From 6a8f4c816e2f5aa33f7eb6b3a653f81026736545 Mon Sep 17 00:00:00 2001 From: rcitach Date: Fri, 31 Jul 2026 08:07:02 +0000 Subject: [PATCH] =?UTF-8?q?RA6W1=E5=9F=BA=E7=A1=80BSP=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/renesas/.clang-format-ignore | 2 + .../HAL_Drivers/drivers/config/drv_config.h | 6 + .../drivers/config/raw/ra6w1/uart_config.h | 58 + .../HAL_Drivers/drivers/drv_usart_v2.c | 28 +- bsp/renesas/libraries/Kconfig | 10 + bsp/renesas/ra6w1-ek/.config | 1460 + bsp/renesas/ra6w1-ek/Kconfig | 24 + bsp/renesas/ra6w1-ek/README.md | 127 + bsp/renesas/ra6w1-ek/SConscript | 26 + bsp/renesas/ra6w1-ek/SConstruct | 54 + bsp/renesas/ra6w1-ek/board/Kconfig | 44 + bsp/renesas/ra6w1-ek/board/SConscript | 16 + bsp/renesas/ra6w1-ek/board/board.h | 57 + bsp/renesas/ra6w1-ek/board/bsp_linker_info.h | 135 + bsp/renesas/ra6w1-ek/board/ports/SConscript | 19 + bsp/renesas/ra6w1-ek/board/ports/drv_gpio_w.c | 446 + bsp/renesas/ra6w1-ek/board/ports/gpio_cfg.h | 83 + .../ra6w1-ek/docs/picture/ek-ra6w1.png | Bin 0 -> 830796 bytes bsp/renesas/ra6w1-ek/ra/SConscript | 36 + .../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/ra6w1-ek/ra/arm/CMSIS_6/LICENSE | 201 + .../ra6w1-ek/ra/board/rrq61xxx_evb/board.h | 51 + .../ra/board/rrq61xxx_evb/board_init.h | 46 + .../ra/board/rrq61xxx_evb/board_leds.c | 71 + .../ra/board/rrq61xxx_evb/board_leds.h | 62 + bsp/renesas/ra6w1-ek/ra/fsp/inc/api/bsp_api.h | 101 + .../ra6w1-ek/ra/fsp/inc/api/fsp_common_api.h | 384 + .../ra/fsp/inc/api/r_external_irq_api.h | 159 + .../ra6w1-ek/ra/fsp/inc/api/r_ioport_api.h | 192 + .../ra6w1-ek/ra/fsp/inc/api/r_transfer_api.h | 389 + .../ra6w1-ek/ra/fsp/inc/api/r_uart_api.h | 266 + .../ra6w1-ek/ra/fsp/inc/fsp_features.h | 301 + bsp/renesas/ra6w1-ek/ra/fsp/inc/fsp_version.h | 76 + bsp/renesas/ra6w1-ek/ra/fsp/inc/fw_version.h | 3 + .../ra/fsp/inc/instances/r_ext_irq_w.h | 86 + .../ra6w1-ek/ra/fsp/inc/instances/r_gpio_w.h | 435 + .../ra6w1-ek/ra/fsp/inc/instances/r_uart_w.h | 232 + .../cmsis/Device/RENESAS/Include/renesas.h | 202 + .../bsp/cmsis/Device/RENESAS/Include/system.h | 44 + .../ra/fsp/src/bsp/mcu/all/bsp_exceptions.h | 47 + .../cmsis/Device/RENESAS/Include/R7SA6W1CE.h | 34879 ++++++++++++++++ .../cmsis/Device/RENESAS/Include/renesas.h | 202 + .../cmsis/Device/RENESAS/Include/system.h | 44 + .../cmsis/Device/RENESAS/Source/startup.c | 316 + .../cmsis/Device/RENESAS/Source/system.c | 721 + .../fsp/src/bsp_w/mcu/all/bsp_api_override.h | 47 + .../ra/fsp/src/bsp_w/mcu/all/bsp_assert.c | 144 + .../ra/fsp/src/bsp_w/mcu/all/bsp_assert.h | 40 + .../ra/fsp/src/bsp_w/mcu/all/bsp_clocks.c | 821 + .../ra/fsp/src/bsp_w/mcu/all/bsp_clocks.h | 344 + .../ra/fsp/src/bsp_w/mcu/all/bsp_cmac.h | 61 + .../ra/fsp/src/bsp_w/mcu/all/bsp_common.c | 311 + .../ra/fsp/src/bsp_w/mcu/all/bsp_common.h | 1046 + .../src/bsp_w/mcu/all/bsp_compiler_support.h | 124 + .../ra/fsp/src/bsp_w/mcu/all/bsp_delay.c | 119 + .../ra/fsp/src/bsp_w/mcu/all/bsp_delay.h | 73 + .../fsp/src/bsp_w/mcu/all/bsp_device_info.h | 55 + .../ra/fsp/src/bsp_w/mcu/all/bsp_exceptions.h | 47 + .../ra/fsp/src/bsp_w/mcu/all/bsp_freeze.h | 20 + .../ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.c | 181 + .../ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.h | 58 + .../ra/fsp/src/bsp_w/mcu/all/bsp_guard.c | 48 + .../ra/fsp/src/bsp_w/mcu/all/bsp_guard.h | 35 + .../ra/fsp/src/bsp_w/mcu/all/bsp_io.h | 408 + .../ra/fsp/src/bsp_w/mcu/all/bsp_irq.c | 103 + .../ra/fsp/src/bsp_w/mcu/all/bsp_irq.h | 246 + .../ra/fsp/src/bsp_w/mcu/all/bsp_mcu_api.h | 37 + .../fsp/src/bsp_w/mcu/all/bsp_module_stop.h | 183 + .../ra/fsp/src/bsp_w/mcu/all/bsp_otp.h | 54 + .../ra/fsp/src/bsp_w/mcu/all/bsp_pd.c | 270 + .../ra/fsp/src/bsp_w/mcu/all/bsp_pd.h | 69 + .../ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.c | 284 + .../ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.h | 110 + .../ra/fsp/src/bsp_w/mcu/all/bsp_rsip.h | 65 + .../ra/fsp/src/bsp_w/mcu/all/bsp_sbrk.c | 94 + .../ra/fsp/src/bsp_w/mcu/all/bsp_security.c | 308 + .../ra/fsp/src/bsp_w/mcu/all/bsp_security.h | 33 + .../ra/fsp/src/bsp_w/mcu/all/fast_memcpy.S | 104 + .../ra/fsp/src/bsp_w/mcu/all/fast_memset.S | 97 + .../bsp_device_definitions_internal.h | 347 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_cache.h | 178 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.c | 842 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.h | 1146 + .../fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.c | 62 + .../fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.h | 43 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dmac.h | 110 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.c | 552 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.h | 55 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_feature.h | 171 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_freeze.h | 89 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_init.c | 157 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io.h | 64 + .../src/bsp_w/mcu/ra6w1/bsp_io_isolation.c | 266 + .../src/bsp_w/mcu/ra6w1/bsp_io_isolation.h | 119 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_linker.c | 21 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_mcu_info.h | 33 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.c | 397 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.h | 71 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_override.h | 178 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.c | 493 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.h | 229 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.c | 208 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.h | 37 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtc.h | 110 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtm.h | 43 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.c | 169 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.h | 580 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.c | 1735 + .../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.h | 346 + .../ra/fsp/src/bsp_w/mcu/ra6w1/clib.h | 125 + .../src/bsp_w/mcu/ra6w1/common_compile_opt.h | 41 + .../ra/fsp/src/bsp_w/mcu/ra6w1/common_def.h | 764 + .../config/4MB/default_partition_table.h | 74 + .../mcu/ra6w1/config/4MB/partition_table.h | 67 + .../ra6w1/config/4MB/suota/partition_table.h | 69 + .../config/8MB/at25sl/suota/partition_table.h | 75 + .../bsp_w/mcu/ra6w1/config/ad_nvparam_defs.h | 131 + .../ra6w1/config/boards/brd_io_config_ra6w1.h | 104 + .../src/bsp_w/mcu/ra6w1/config/bsp_debug.h | 1099 + .../src/bsp_w/mcu/ra6w1/config/bsp_defaults.h | 662 + .../mcu/ra6w1/config/bsp_defaults_ra6w1.h | 904 + .../bsp_w/mcu/ra6w1/config/bsp_definitions.h | 175 + .../mcu/ra6w1/config/bsp_device_definitions.h | 172 + .../config/bsp_device_definitions_internal.h | 334 + .../mcu/ra6w1/config/bsp_memory_defaults.h | 80 + .../ra6w1/config/bsp_memory_defaults_ra6w1.h | 136 + .../mcu/ra6w1/config/bsp_sflash_map_ra6w1.h | 629 + .../mcu/ra6w1/config/bsp_undisclosed_defs.h | 65 + .../ra6w1/config/include/custom_config_sdk.h | 752 + .../bsp_w/mcu/ra6w1/config/include/sdk_ver.h | 66 + .../ra6w1/config/include/sys_feature_sdk.h | 106 + .../mcu/ra6w1/config/middleware_defaults.h | 495 + .../bsp_w/mcu/ra6w1/config/partition_table.h | 89 + .../ra/fsp/src/bsp_w/mcu/ra6w1/hw_sys.h | 473 + .../ra/fsp/src/bsp_w/mcu/ra6w1/iface_defs.h | 167 + .../ra/fsp/src/bsp_w/mcu/ra6w1/interrupts.h | 154 + .../ra/fsp/src/bsp_w/mcu/ra6w1/osal/osal.h | 1339 + .../bsp_w/mcu/ra6w1/ra6w1_platform_nvparam.h | 2102 + .../ra/fsp/src/bsp_w/mcu/ra6w1/sdk_defs.h | 997 + .../ra/fsp/src/bsp_w/mcu/ra6w1/sys_feature.h | 178 + .../ra/fsp/src/r_ext_irq_w/r_ext_irq_w.c | 430 + .../ra6w1-ek/ra/fsp/src/r_gpio_w/r_gpio_w.c | 812 + .../ra6w1-ek/ra/fsp/src/r_uart_w/r_uart_w.c | 2065 + bsp/renesas/ra6w1-ek/rafw_cfg/SConscript | 18 + .../ra6w1-ek/rafw_cfg/fsp_cfg/bsp/board_cfg.h | 5 + .../ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_cfg.h | 75 + .../rafw_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h | 5 + .../fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h | 12 + .../rafw_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h | 481 + .../rafw_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h | 5 + .../rafw_cfg/fsp_cfg/bsp/bsp_pin_cfg.h | 18 + .../rafw_cfg/fsp_cfg/r_ext_irq_w_cfg.h | 13 + .../ra6w1-ek/rafw_cfg/fsp_cfg/r_gpio_w_cfg.h | 13 + .../ra6w1-ek/rafw_cfg/fsp_cfg/r_uart_w_cfg.h | 15 + bsp/renesas/ra6w1-ek/rafw_gen/SConscript | 18 + bsp/renesas/ra6w1-ek/rafw_gen/bsp_clock_cfg.h | 30 + bsp/renesas/ra6w1-ek/rafw_gen/common_data.c | 7 + bsp/renesas/ra6w1-ek/rafw_gen/common_data.h | 20 + bsp/renesas/ra6w1-ek/rafw_gen/hal_data.c | 47 + bsp/renesas/ra6w1-ek/rafw_gen/hal_data.h | 24 + bsp/renesas/ra6w1-ek/rafw_gen/main.c | 6 + bsp/renesas/ra6w1-ek/rafw_gen/pin_data.c | 100 + bsp/renesas/ra6w1-ek/rafw_gen/vector_data.c | 22 + bsp/renesas/ra6w1-ek/rafw_gen/vector_data.h | 25 + bsp/renesas/ra6w1-ek/rtconfig.h | 430 + bsp/renesas/ra6w1-ek/rtconfig.py | 103 + bsp/renesas/ra6w1-ek/script/fsp.ld | 385 + bsp/renesas/ra6w1-ek/script/memory_regions.ld | 13 + .../ra6w1-ek/scripts/gen_rrq61_flash_image.py | 334 + .../ra6w1-ek/scripts/rrq61_fw_version.py | 20 + bsp/renesas/ra6w1-ek/src/hal_entry.c | 29 + 211 files changed, 130244 insertions(+), 4 deletions(-) create mode 100644 bsp/renesas/libraries/HAL_Drivers/drivers/config/raw/ra6w1/uart_config.h create mode 100644 bsp/renesas/ra6w1-ek/.config create mode 100644 bsp/renesas/ra6w1-ek/Kconfig create mode 100644 bsp/renesas/ra6w1-ek/README.md create mode 100644 bsp/renesas/ra6w1-ek/SConscript create mode 100644 bsp/renesas/ra6w1-ek/SConstruct create mode 100644 bsp/renesas/ra6w1-ek/board/Kconfig create mode 100644 bsp/renesas/ra6w1-ek/board/SConscript create mode 100644 bsp/renesas/ra6w1-ek/board/board.h create mode 100644 bsp/renesas/ra6w1-ek/board/bsp_linker_info.h create mode 100644 bsp/renesas/ra6w1-ek/board/ports/SConscript create mode 100644 bsp/renesas/ra6w1-ek/board/ports/drv_gpio_w.c create mode 100644 bsp/renesas/ra6w1-ek/board/ports/gpio_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/docs/picture/ek-ra6w1.png create mode 100644 bsp/renesas/ra6w1-ek/ra/SConscript create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h create mode 100644 bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/LICENSE create mode 100644 bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board.h create mode 100644 bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_init.h create mode 100644 bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_leds.c create mode 100644 bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_leds.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/api/bsp_api.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/api/fsp_common_api.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_external_irq_api.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_ioport_api.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_transfer_api.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_uart_api.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/fsp_features.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/fsp_version.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/fw_version.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_ext_irq_w.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_gpio_w.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_uart_w.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/R7SA6W1CE.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/renesas.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/system.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Source/startup.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Source/system.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_api_override.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_assert.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_assert.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_clocks.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_clocks.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_cmac.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_common.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_common.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_compiler_support.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_delay.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_delay.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_device_info.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_exceptions.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_freeze.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_guard.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_guard.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_io.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_irq.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_irq.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_mcu_api.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_module_stop.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_otp.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_rsip.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_sbrk.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_security.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_security.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/fast_memcpy.S create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/fast_memset.S create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/internal/bsp_device_definitions_internal.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_cache.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dmac.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_feature.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_freeze.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_init.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io_isolation.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io_isolation.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_linker.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_mcu_info.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_override.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtc.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtm.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/clib.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/common_compile_opt.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/common_def.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/default_partition_table.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/partition_table.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/suota/partition_table.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/8MB/at25sl/suota/partition_table.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/ad_nvparam_defs.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/boards/brd_io_config_ra6w1.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_debug.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_defaults.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_defaults_ra6w1.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_definitions.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_device_definitions.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_device_definitions_internal.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_memory_defaults.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_memory_defaults_ra6w1.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_sflash_map_ra6w1.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_undisclosed_defs.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/custom_config_sdk.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/sdk_ver.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/sys_feature_sdk.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/middleware_defaults.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/partition_table.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/hw_sys.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/iface_defs.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/interrupts.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/osal/osal.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/ra6w1_platform_nvparam.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/sdk_defs.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/sys_feature.h create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/r_ext_irq_w/r_ext_irq_w.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/r_gpio_w/r_gpio_w.c create mode 100644 bsp/renesas/ra6w1-ek/ra/fsp/src/r_uart_w/r_uart_w.c create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/SConscript create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/board_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_pin_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_ext_irq_w_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_gpio_w_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_uart_w_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/SConscript create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/bsp_clock_cfg.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/common_data.c create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/common_data.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/hal_data.c create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/hal_data.h create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/main.c create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/pin_data.c create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/vector_data.c create mode 100644 bsp/renesas/ra6w1-ek/rafw_gen/vector_data.h create mode 100644 bsp/renesas/ra6w1-ek/rtconfig.h create mode 100644 bsp/renesas/ra6w1-ek/rtconfig.py create mode 100644 bsp/renesas/ra6w1-ek/script/fsp.ld create mode 100644 bsp/renesas/ra6w1-ek/script/memory_regions.ld create mode 100644 bsp/renesas/ra6w1-ek/scripts/gen_rrq61_flash_image.py create mode 100644 bsp/renesas/ra6w1-ek/scripts/rrq61_fw_version.py create mode 100644 bsp/renesas/ra6w1-ek/src/hal_entry.c diff --git a/bsp/renesas/.clang-format-ignore b/bsp/renesas/.clang-format-ignore index b36f1ccad5c0..7ece8cbfcea3 100644 --- a/bsp/renesas/.clang-format-ignore +++ b/bsp/renesas/.clang-format-ignore @@ -9,6 +9,8 @@ /**/ra/ /**/ra_cfg/ /**/ra_gen/ +/**/rafw_cfg/ +/**/rafw_gen/ /libraries/bsp-template/ /**/RTE/ diff --git a/bsp/renesas/libraries/HAL_Drivers/drivers/config/drv_config.h b/bsp/renesas/libraries/HAL_Drivers/drivers/config/drv_config.h index 9d758f371eb6..e7bf194c8c18 100644 --- a/bsp/renesas/libraries/HAL_Drivers/drivers/config/drv_config.h +++ b/bsp/renesas/libraries/HAL_Drivers/drivers/config/drv_config.h @@ -287,6 +287,12 @@ extern "C" #endif #endif /* SOC_SERIES_R7FA2A1 */ +#if defined(SOC_FAMILY_RENESAS_RA_WIRELESS) +#if defined(SOC_SERIES_R7SA6W1) +#include "raw/ra6w1/uart_config.h" +#endif /* SOC_SERIES_R7SA6W1 */ +#endif /* SOC_FAMILY_RENESAS_RA_WIRELESS */ + #ifdef __cplusplus } #endif diff --git a/bsp/renesas/libraries/HAL_Drivers/drivers/config/raw/ra6w1/uart_config.h b/bsp/renesas/libraries/HAL_Drivers/drivers/config/raw/ra6w1/uart_config.h new file mode 100644 index 000000000000..474d89534565 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/drivers/config/raw/ra6w1/uart_config.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-07-29 rcitach first version + */ + +#ifndef __RAW61_UART_CONFIG_H__ +#define __RAW61_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_uart1_ctrl, \ + .p_cfg = &g_uart1_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_uart2_ctrl, \ + .p_cfg = &g_uart2_cfg, \ + } +#endif /* UART1_CONFIG */ +#endif /* BSP_USING_UART1 */ + +#ifdef BSP_USING_UART2 +#ifndef UART2_CONFIG +#define UART2_CONFIG \ + { \ + .name = "uart2", \ + .p_api_ctrl = &g_uart3_ctrl, \ + .p_cfg = &g_uart3_cfg, \ + } +#endif /* UART2_CONFIG */ +#endif /* BSP_USING_UART2 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __RAW61_UART_CONFIG_H__ */ \ No newline at end of file diff --git a/bsp/renesas/libraries/HAL_Drivers/drivers/drv_usart_v2.c b/bsp/renesas/libraries/HAL_Drivers/drivers/drv_usart_v2.c index 7509f3f3b116..ac887fe9626b 100644 --- a/bsp/renesas/libraries/HAL_Drivers/drivers/drv_usart_v2.c +++ b/bsp/renesas/libraries/HAL_Drivers/drivers/drv_usart_v2.c @@ -213,6 +213,16 @@ static rt_err_t ra_uart_configure(struct rt_serial_device *serial, struct serial #if defined(SOC_SERIES_R7FA8M85) || defined(SOC_SERIES_R7KA8P1) err = R_SCI_B_UART_Open(uart->config->p_api_ctrl, uart->config->p_cfg); +#elif defined(SOC_SERIES_R7SA6W1) + uart_w_extended_cfg_t *p_extend = (uart_w_extended_cfg_t *)uart->config->p_cfg->p_extend; + RT_ASSERT(p_extend != RT_NULL); + RT_ASSERT(p_extend->p_baud_setting != RT_NULL); + + err = R_UART_W_BaudCalculate(cfg->baud_rate, p_extend->p_baud_setting); + if (FSP_SUCCESS == err) + { + err = R_UART_W_Open(uart->config->p_api_ctrl, uart->config->p_cfg); + } #else err = R_SCI_UART_Open(uart->config->p_api_ctrl, uart->config->p_cfg); #endif @@ -237,18 +247,28 @@ static int ra_uart_putc(struct rt_serial_device *serial, char c) uart = rt_container_of(serial, struct ra_uart, serial); RT_ASSERT(uart != RT_NULL); -#if defined(SOC_SERIES_R7FA8M85) || defined(SOC_SERIES_R7KA8P1) +#if defined(SOC_SERIES_R7SA6W1) + uart_w_instance_ctrl_t *p_ctrl = (uart_w_instance_ctrl_t *)uart->config->p_api_ctrl; + + p_ctrl->p_reg->UART_DR_REG = c; + + while (p_ctrl->p_reg->UART_FR_REG_b.BUSY); +#elif defined(SOC_SERIES_R7FA8M85) || defined(SOC_SERIES_R7KA8P1) sci_b_uart_instance_ctrl_t *p_ctrl = (sci_b_uart_instance_ctrl_t *)uart->config->p_api_ctrl; + + p_ctrl->p_reg->TDR = c; + + while ((p_ctrl->p_reg->CSR_b.TEND) == 0); #else sci_uart_instance_ctrl_t *p_ctrl = (sci_uart_instance_ctrl_t *)uart->config->p_api_ctrl; -#endif p_ctrl->p_reg->TDR = c; -#if defined(SOC_SERIES_R7FA8M85) || defined(SOC_SERIES_R9A07G0) || defined(SOC_SERIES_R7KA8P1) + #if defined(SOC_SERIES_R9A07G0) while ((p_ctrl->p_reg->CSR_b.TEND) == 0); -#else + #else while ((p_ctrl->p_reg->SSR_b.TEND) == 0); + #endif #endif return RT_EOK; diff --git a/bsp/renesas/libraries/Kconfig b/bsp/renesas/libraries/Kconfig index f590f7e8c73f..1d0aff98aa8d 100644 --- a/bsp/renesas/libraries/Kconfig +++ b/bsp/renesas/libraries/Kconfig @@ -3,6 +3,10 @@ config SOC_FAMILY_RENESAS_RA bool default n +config SOC_FAMILY_RENESAS_RA_WIRELESS + bool + default n + config SOC_FAMILY_RENESAS_RZ bool default n @@ -91,6 +95,12 @@ config SOC_SERIES_R7FA6E2 select SOC_FAMILY_RENESAS_RA default n +config SOC_SERIES_R7SA6W1 + bool + select ARCH_ARM_CORTEX_M33 + select SOC_FAMILY_RENESAS_RA_WIRELESS + default n + config SOC_SERIES_R7FA2A1 bool select ARCH_ARM_CORTEX_M23 diff --git a/bsp/renesas/ra6w1-ek/.config b/bsp/renesas/ra6w1-ek/.config new file mode 100644 index 000000000000..51abcedfedba --- /dev/null +++ b/bsp/renesas/ra6w1-ek/.config @@ -0,0 +1,1460 @@ +CONFIG_SOC_R7SA6W1CED=y + +# +# RT-Thread Kernel +# + +# +# klibc options +# + +# +# rt_vsnprintf options +# +# CONFIG_RT_KLIBC_USING_LIBC_VSNPRINTF is not set +# CONFIG_RT_KLIBC_USING_VSNPRINTF_LONGLONG is not set +# CONFIG_RT_KLIBC_USING_VSNPRINTF_STANDARD is not set +# end of rt_vsnprintf options + +# +# rt_vsscanf options +# +# CONFIG_RT_KLIBC_USING_LIBC_VSSCANF is not set +# end of rt_vsscanf options + +# +# rt_memset options +# +# CONFIG_RT_KLIBC_USING_USER_MEMSET is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMSET is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMSET is not set +# end of rt_memset options + +# +# rt_memcpy options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMCPY is not set +# end of rt_memcpy options + +# +# rt_memmove options +# +# CONFIG_RT_KLIBC_USING_USER_MEMMOVE is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMMOVE is not set +# end of rt_memmove options + +# +# rt_memcmp options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCMP is not set +# end of rt_memcmp options + +# +# rt_strstr options +# +# CONFIG_RT_KLIBC_USING_USER_STRSTR is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRSTR is not set +# end of rt_strstr options + +# +# rt_strcasecmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCASECMP is not set +# end of rt_strcasecmp options + +# +# rt_strncpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCPY is not set +# end of rt_strncpy options + +# +# rt_strcpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCPY is not set +# end of rt_strcpy options + +# +# rt_strncmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCMP is not set +# end of rt_strncmp options + +# +# rt_strcmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCMP is not set +# end of rt_strcmp options + +# +# rt_strlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRLEN is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRLEN is not set +# end of rt_strlen options + +# +# rt_strnlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRNLEN is not set +# end of rt_strnlen options +# end of klibc options + +CONFIG_RT_NAME_MAX=12 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +# CONFIG_RT_USING_HOOKLIST is not set +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=4 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=512 +# CONFIG_RT_USING_TIMER_ALL_SOFT is not set +# CONFIG_RT_USING_CPU_USAGE_TRACER is not set + +# +# kservice options +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice options + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_ASSERT=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_AUTO_INIT is not set +# CONFIG_RT_USING_CI_ACTION is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +# CONFIG_RT_USING_MEMPOOL is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" +CONFIG_RT_USING_CONSOLE_OUTPUT_CTL=y +CONFIG_RT_VER_NUM=0x50300 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# end of RT-Thread Kernel + +CONFIG_RT_USING_HW_ATOMIC=y +CONFIG_ARCH_USING_HW_ATOMIC_8=y +CONFIG_ARCH_USING_HW_ATOMIC_16=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_WORD_OPERATION is not set +# CONFIG_FINSH_USING_FUNC_EXT is not set +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +# CONFIG_RT_USING_DFS is not set +# end of DFS: device virtual file system + +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +# CONFIG_RT_USING_SERIAL_V1 is not set +CONFIG_RT_USING_SERIAL_V2=y +# CONFIG_RT_SERIAL_BUF_STRATEGY_DROP is not set +CONFIG_RT_SERIAL_BUF_STRATEGY_OVERWRITE=y +CONFIG_RT_SERIAL_USING_DMA=y +# CONFIG_RT_USING_SERIAL_BYPASS is not set +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_CLOCK_TIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +# CONFIG_RT_USING_PHY_V2 is not set +# CONFIG_RT_USING_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_RPMSG is not set +# CONFIG_RT_USING_BLK is not set +# CONFIG_RT_USING_REGULATOR is not set +# CONFIG_RT_USING_POWER_SUPPLY is not set +CONFIG_RT_USING_PIN=y +# 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 + +# +# 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 +# CONFIG_RT_USING_RUST 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 +# CONFIG_PKG_USING_ESP_HOSTED is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set +# end of CYW43012 WiFi + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set +# end of BL808 WiFi + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# end of CYW43439 WiFi +# end of Wi-Fi + +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# end of IoT Cloud + +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set +# CONFIG_PKG_USING_QMODBUS is not set +# CONFIG_PKG_USING_PNET is not set +# CONFIG_PKG_USING_OPENER is not set +# CONFIG_PKG_USING_FREEMQTT is not set +# end of IoT - internet of things + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set +# end of security packages + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set +# CONFIG_PKG_USING_RYAN_JSON is not set +# end of JSON: JavaScript Object Notation, a lightweight data-interchange format + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# end of XML: Extensible Markup Language + +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set +# end of language packages + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set +# end of LVGL: powerful and easy-to-use embedded GUI library + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# end of u8g2: a monochrome graphic library + +# CONFIG_PKG_USING_NES_SIMULATOR is not set +# 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_VECTOR is not set +# CONFIG_PKG_USING_SORCH is not set +# CONFIG_PKG_USING_DICT is not set +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_MCOREDUMP is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set +# CONFIG_PKG_USING_RVBACKTRACE is not set +# CONFIG_PKG_USING_HPATCHLITE is not set +# CONFIG_PKG_USING_THREAD_METRIC is not set +# CONFIG_PKG_USING_UORB is not set +# CONFIG_PKG_USING_RT_TUNNEL is not set +# CONFIG_PKG_USING_VIRTUAL_TERMINAL is not set +# end of tools packages + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# end of enhanced kernel services + +# CONFIG_PKG_USING_AUNITY is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_CORE is not set +# CONFIG_PKG_USING_CMSIS_NN is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set +# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FILEX is not set +# CONFIG_PKG_USING_LEVELX is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_UART_FRAMEWORK is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_RMP is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# CONFIG_PKG_USING_HEARTBEAT is not set +# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set +# CONFIG_PKG_USING_CHERRYECAT is not set +# CONFIG_PKG_USING_EVENT_LOOP is not set +# CONFIG_PKG_USING_THREAD_MANAGER is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32F0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F1_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F1_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F2_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F2_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F3_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F3_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F7_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F7_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32G0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32G0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32G4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32G4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H7_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H7_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H7RS_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H7RS_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32U5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32U5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_STM32WL_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32WL_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32WB_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32MP1_M4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32MP1_M4_CMSIS_DRIVER is not set +# end of STM32 HAL & SDK Drivers + +# +# Infineon HAL Packages +# +# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set +# CONFIG_PKG_USING_INFINEON_CMSIS is not set +# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set +# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set +# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set +# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set +# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set +# CONFIG_PKG_USING_INFINEON_USBDEV is not set +# end of Infineon HAL Packages + +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_ESP_IDF is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# end of Kendryte SDK + +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_RP2350_SDK is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# CONFIG_PKG_USING_MM32 is not set + +# +# WCH HAL & SDK Drivers +# +# CONFIG_PKG_USING_CH32V20x_SDK is not set +# CONFIG_PKG_USING_CH32V307_SDK is not set +# end of WCH HAL & SDK Drivers + +# +# AT32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_AT32A403A_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32A403A_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32A423_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32A423_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F45x_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F45x_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F402_405_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F402_405_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F403A_407_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F403A_407_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F413_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F413_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F415_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F415_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F421_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F421_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F423_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F423_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F425_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F425_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F435_437_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F435_437_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32M412_416_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32M412_416_CMSIS_DRIVER is not set +# end of AT32 HAL & SDK Drivers + +# +# HC32 DDL Drivers +# +# CONFIG_PKG_USING_HC32F3_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_HC32F3_SERIES_DRIVER is not set +# CONFIG_PKG_USING_HC32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_HC32F4_SERIES_DRIVER is not set +# end of HC32 DDL Drivers + +# +# NXP HAL & SDK Drivers +# +# CONFIG_PKG_USING_NXP_MCX_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_NXP_MCX_SERIES_DRIVER is not set +# CONFIG_PKG_USING_NXP_LPC_DRIVER is not set +# CONFIG_PKG_USING_NXP_LPC55S_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMX6SX_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMX6UL_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMXRT_DRIVER is not set +# end of NXP HAL & SDK Drivers + +# +# NUVOTON Drivers +# +# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set +# end of NUVOTON Drivers + +# +# GD32 Drivers +# +# CONFIG_PKG_USING_GD32_ARM_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_GD32_ARM_SERIES_DRIVER is not set +# CONFIG_PKG_USING_GD32_RISCV_SERIES_DRIVER is not set +# CONFIG_PKG_USING_GD32VW55X_WIFI is not set +# end of GD32 Drivers + +# +# HPMicro SDK +# +# CONFIG_PKG_USING_HPM_SDK is not set +# end of HPMicro SDK + +# +# FT32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_FT32F0_STD_DRIVER is not set +# CONFIG_PKG_USING_FT32F0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_FT32F4_STD_DRIVER is not set +# CONFIG_PKG_USING_FT32F4_CMSIS_DRIVER is not set +# end of FT32 HAL & SDK Drivers + +# +# NOVOSNS Drivers +# +# CONFIG_PKG_USING_NOVOSNS_SERIES_DRIVER is not set +# end of NOVOSNS Drivers +# end of HAL & SDK Drivers + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_MAX31855 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90382 is not set +# CONFIG_PKG_USING_MLX90384 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90394 is not set +# CONFIG_PKG_USING_MLX90396 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set +# CONFIG_PKG_USING_P3T1755 is not set +# CONFIG_PKG_USING_QMI8658 is not set +# CONFIG_PKG_USING_ICM20948 is not set +# CONFIG_PKG_USING_SCD4X 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_LCD_SPI_DRIVER is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_RGPOWER is not set +# CONFIG_PKG_USING_BT_MX02 is not set +# CONFIG_PKG_USING_GC9A01 is not set +# CONFIG_PKG_USING_IK485 is not set +# CONFIG_PKG_USING_SERVO is not set +# CONFIG_PKG_USING_SEAN_WS2812B is not set +# CONFIG_PKG_USING_IC74HC165 is not set +# CONFIG_PKG_USING_IST8310 is not set +# CONFIG_PKG_USING_ST7789_SPI is not set +# CONFIG_PKG_USING_CAN_UDS is not set +# CONFIG_PKG_USING_ISOTP_C is not set +# CONFIG_PKG_USING_IKUNLED is not set +# CONFIG_PKG_USING_INS5T8025 is not set +# CONFIG_PKG_USING_IRUART is not set +# CONFIG_PKG_USING_ST7305 is not set +# CONFIG_PKG_USING_TM1668 is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set +# end of peripheral libraries and drivers + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set +# CONFIG_PKG_USING_LLMCHAT is not set +# end of AI packages + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_APID is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set +# end of Signal Processing and Control Algorithm Packages + +# +# miscellaneous packages +# + +# +# project laboratory +# +# end of project laboratory + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# end of samples: kernel and components samples + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# CONFIG_PKG_USING_TINYSQUARE is not set +# end of entertainment: terminal games and other interesting software packages + +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LIBCRC is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# CONFIG_PKG_USING_DRMP is not set +# end of miscellaneous packages + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set +# end of Projects and Demos + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set +# end of Sensors + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set +# end of Display + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set +# end of Timing + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set +# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set +# end of Data Processing + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set +# end of Communication + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# end of Device Control + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# end of Other + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set +# end of Signal IO + +# +# Uncategorized +# +# end of Arduino libraries +# end of RT-Thread online packages + +CONFIG_SOC_FAMILY_RENESAS_RA_WIRELESS=y +CONFIG_SOC_SERIES_R7SA6W1=y + +# +# Hardware Drivers Config +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO_W=y +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 +# end of Hardware Drivers Config diff --git a/bsp/renesas/ra6w1-ek/Kconfig b/bsp/renesas/ra6w1-ek/Kconfig new file mode 100644 index 000000000000..8571e9e23404 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/Kconfig @@ -0,0 +1,24 @@ +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 := / + +config SOC_R7SA6W1CED + bool + select SOC_SERIES_R7SA6W1 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +source "$(RTT_DIR)/Kconfig" +osource "$PKGS_DIR/Kconfig" +rsource "../libraries/Kconfig" +source "$(BSP_DIR)/board/Kconfig" diff --git a/bsp/renesas/ra6w1-ek/README.md b/bsp/renesas/ra6w1-ek/README.md new file mode 100644 index 000000000000..460ae97f39b6 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/README.md @@ -0,0 +1,127 @@ +# 瑞萨 EK-RA6W1 开发板 BSP 说明 + +## 简介 + +本文档为瑞萨 EK-RA6W1 开发板提供的 BSP (板级支持包) 说明。通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。 + +主要内容如下: + +- 开发板介绍 +- BSP 快速上手指南 + +## 开发板介绍 + +基于瑞萨 RA6W1 MCU 开发的 EK-RA6W1 MCU 评估板,通过灵活配置软件包和 IDE,可帮助用户对 RA6W1 MCU 群组的特性轻松进行评估,并对嵌入系统应用程序进行开发。 + +开发板正面外观如下图: + +![](docs/picture/ek-ra6w1.png) + + +该开发板常用 **板载资源** 如下: + +- MCU:R7SA6W1CED,160MHz,Arm Cortex®-M33内核,704KB SRAM +- 网络:Wi-Fi 6,802.11a/b/g/n/ac/ax 2.4/5GHz,1x1,20MHz,MCS9 115Mbps,OFDMA,TWT +- 板载资源:8MB QSPI Flash,8MB pSRAM,2x SPI,3x UART,2x I2C,12 位 ADC、I2S、PDM、PWM + +**更多详细资料及工具** + +## 外设支持 + +* 本 BSP 目前对外设的支持情况如下: + + | **片上外设** | **支持情况** | **备注** | + | :----------: | :----------: | :----------------------- | + | UART | 支持 | UART1 为默认日志输出端口 | + | GPIO | 支持 | | + +* 注意:仓库刚拉下来是最小系统,若需添加/使能其他外设需参考:[外设驱动使用教程 (rt-thread.org)](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/make-bsp/renesas-ra/RA系列BSP外设驱动使用教程) + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +## ENV 编译、调试烧录 + +- 编译:打开ENV进入到 *rt-thread/bsp/renesas/ra6w1-ek* 目录,执行 scons 进行编译 + +* 下载:使用Renesas Flash Programmer 进行程序烧录,Microcontroller 选择 RA6W1, 烧录rtthread.img.bin文件,偏移为0 + +![](docs/picture/download.png) + +### 快速上手 + +本 BSP 目前仅提供 ENV 工程。下面以 ENV 开发环境为例,介绍如何将系统运行起来。 + +**硬件连接** + +使用 USB 数据线连接开发板到 PC + +**编译下载** + +- 编译:打开ENV进入到 *rt-thread/bsp/renesas/ra6w1-ek* 目录,执行 scons 进行编译 + +* 下载:使用Renesas Flash Programmer 进行程序烧录,Microcontroller 选择 RA6W1, 烧录rtthread.img.bin文件,偏移为0 + +**查看运行结果** + +下载程序成功之后,系统会自动运行并打印系统信息。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息。输入 help 命令可查看系统中支持的命令。 + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.3.0 build Jul 31 2026 08:52:35 + 2006 - 2024 Copyright by RT-Thread team +[I/utest] utest is initialize success. +[I/utest] total utest testcase num: (24) + +Hello RT-Thread on RA6W1! +msh >help +RT-Thread shell commands: +reboot - Reboot System +utest_list - output all utest testcase +utest_run - utest_run [-thread or -help] [testcase name] [loop num] +pin - pin [option] +clear - clear the terminal screen +version - show RT-Thread version information +console - console setting +list - list objects +help - RT-Thread shell help +ps - List threads in the system +free - Show the memory usage in the system +backtrace - print backtrace of a thread + +msh > + +``` + +### 进阶使用 + +**资料及文档** + +- [瑞萨RA6W1 MCU 基础知识](https://www.renesas.cn/zh/products/ra6w1) +- [RA6W1 MCU 使用指南](https://www.renesas.cn/zh/document/mah/ra6w1-hardware-design-guide) + +**FSP 配置** + +需要根据指南安装好e2studio工具,并完成指南中软件包的安装, +[软件包安装链接](https://www.renesas.com/en/document/sws/rafw-flexible-software-package?r=25578118&_gl=1*3jbk41*_gcl_au*NzAxNzk2MDQyLjE3ODM0MTk0NTE.*_ga*MTIzMjEwMzY0MS4xNzgzNDE5NDUx*_ga_D1706WVDQV*czE3ODU0OTI2NDIkbzgkZzAkdDE3ODU0OTI2NDIkajYwJGwwJGgw) +,获取 [rafw-example](https://github.com/renesas/rafw-fsp-examples.git) 并导入基础 gpio_ek_ra6w1_ep 示例,根据需求选择对应功能,并将对应生成的ra系列代码复制到对应目录 + +## 联系人信息 + +在使用过程中若您有任何的想法和建议,建议您通过以下方式来联系到我们 [RT-Thread 社区论坛](https://club.rt-thread.org/) + +## 贡献代码 + +如果您对 EK-RA6M3 感兴趣,并且有一些好玩的项目愿意与大家分享的话欢迎给我们贡献代码,您可以参考 [如何向 RT-Thread 代码贡献](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/development-guide/github/github)。 diff --git a/bsp/renesas/ra6w1-ek/SConscript b/bsp/renesas/ra6w1-ek/SConscript new file mode 100644 index 000000000000..68df10a75999 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/SConscript @@ -0,0 +1,26 @@ +# 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']: + 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/ra6w1-ek/SConstruct b/bsp/renesas/ra6w1-ek/SConstruct new file mode 100644 index 000000000000..f028d3d61e77 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/SConstruct @@ -0,0 +1,54 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM in ['iccarm']: + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map project.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +rtconfig.BSP_LIBRARY_TYPE = None + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'),variant_dir='build/libraries/HAL_Drivers', duplicate=0)) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/renesas/ra6w1-ek/board/Kconfig b/bsp/renesas/ra6w1-ek/board/Kconfig new file mode 100644 index 000000000000..6e7cb35098be --- /dev/null +++ b/bsp/renesas/ra6w1-ek/board/Kconfig @@ -0,0 +1,44 @@ +menu "Hardware Drivers Config" + + menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO_W + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + menuconfig BSP_USING_UART0 + bool "Enable UART0" + default y + 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 +endmenu diff --git a/bsp/renesas/ra6w1-ek/board/SConscript b/bsp/renesas/ra6w1-ek/board/SConscript new file mode 100644 index 000000000000..a27ea8e470cc --- /dev/null +++ b/bsp/renesas/ra6w1-ek/board/SConscript @@ -0,0 +1,16 @@ +import os +from building import * + +objs = [] +cwd = GetCurrentDir() +list = os.listdir(cwd) +CPPPATH = [cwd] +src = Glob('*.c') + +objs = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/renesas/ra6w1-ek/board/board.h b/bsp/renesas/ra6w1-ek/board/board.h new file mode 100644 index 000000000000..e8a9ce4f249a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/board/board.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2006-2026, 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 660 +#define RA_SRAM_END (0x20000000 + 0x000a5000) + +#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 BSP_USING_GPIO_W +#define R_IOPORT_Open R_GPIO_W_Open +#define R_IOPORT_Close R_GPIO_W_Close +#define R_IOPORT_PinsCfg R_GPIO_W_PinsCfg +#define R_IOPORT_PinCfg R_GPIO_W_PinCfg +#define R_IOPORT_PinRead R_GPIO_W_PinRead +#define R_IOPORT_PinWrite R_GPIO_W_PinWrite +#define R_IOPORT_PortDirectionSet R_GPIO_W_PortDirectionSet +#define R_IOPORT_PortEventInputRead R_GPIO_W_PortEventInputRead +#define R_IOPORT_PortEventOutputWrite R_GPIO_W_PortEventOutputWrite +#define R_IOPORT_PortRead R_GPIO_W_PortRead +#define R_IOPORT_PortWrite R_GPIO_W_PortWrite + +#define g_ioport g_gpio_w +#define g_ioport_ctrl g_gpio_w_ctrl +int rt_hw_pin_init(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/bsp/renesas/ra6w1-ek/board/bsp_linker_info.h b/bsp/renesas/ra6w1-ek/board/bsp_linker_info.h new file mode 100644 index 000000000000..c4ab32218f10 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/board/bsp_linker_info.h @@ -0,0 +1,135 @@ +/* UNCRUSTIFY-OFF */ +#ifndef BSP_LINKER_H +#define BSP_LINKER_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/******* Solution Definitions *************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +/* linker generated initialization table data structures types */ +typedef enum e_bsp_init_mem { + INIT_MEM_ZERO, + INIT_MEM_FLASH, + INIT_MEM_DATA_FLASH, + INIT_MEM_RAM, + INIT_MEM_DTCM, + INIT_MEM_ITCM, + INIT_MEM_CTCM, + INIT_MEM_STCM, + INIT_MEM_OSPI0_CS0, + INIT_MEM_OSPI0_CS1, + INIT_MEM_OSPI1_CS0, + INIT_MEM_OSPI1_CS1, + INIT_MEM_QSPI_FLASH, + INIT_MEM_SDRAM, + INIT_MEM_RAMCODE, + INIT_MEM_IPDRAM, + INIT_MEM_FRAGRAM, + INIT_MEM_SHARED_TCM_RAM, + INIT_MEM_MACHW_MIB, +} bsp_init_mem_t; + +typedef struct st_bsp_init_type { + uint32_t copy_64 :8; /* if 1, must use 64 bit copy operation (to keep ecc happy) */ + uint32_t external :8; /* =1 if either source or destination is external, else 0 */ + uint32_t source_type :8; + uint32_t destination_type :8; +} bsp_init_type_t; + +typedef struct st_bsp_init_zero_info { + uint32_t *const p_base; + uint32_t *const p_limit; + bsp_init_type_t type; +} bsp_init_zero_info_t; + +typedef struct st_bsp_init_copy_info { + uint32_t *const p_base; + uint32_t *const p_limit; + uint32_t *const p_load; + bsp_init_type_t type; +} bsp_init_copy_info_t; + +typedef struct st_bsp_init_info { + uint32_t zero_count; + bsp_init_zero_info_t const *const p_zero_list; + uint32_t copy_count; + bsp_init_copy_info_t const *const p_copy_list; +} bsp_init_info_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +extern bsp_init_info_t const g_init_info; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +#endif /* BSP_LINKER_H */ +#ifdef BSP_LINKER_C +/*********************************************************************************************************************** + * Objects allocated by bsp_linker.c + **********************************************************************************************************************/ +/* DDSC symbol definitions */ +/* Zero initialization tables */ +extern uint32_t __ipdram_zero$$Base; +extern uint32_t __ipdram_zero$$Limit; +extern uint32_t __fragram_zero$$Base; +extern uint32_t __fragram_zero$$Limit; +extern uint32_t __machw_mib_zero$$Base; +extern uint32_t __machw_mib_zero$$Limit; +extern uint32_t __ram_zero$$Base; +extern uint32_t __ram_zero$$Limit; +static const bsp_init_zero_info_t zero_list[] = +{ + {.p_base = &__ipdram_zero$$Base, .p_limit = &__ipdram_zero$$Limit,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_ZERO, .destination_type = INIT_MEM_IPDRAM}}, + {.p_base = &__fragram_zero$$Base, .p_limit = &__fragram_zero$$Limit,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_ZERO, .destination_type = INIT_MEM_FRAGRAM}}, + {.p_base = &__machw_mib_zero$$Base, .p_limit = &__machw_mib_zero$$Limit,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_ZERO, .destination_type = INIT_MEM_MACHW_MIB}}, + {.p_base = &__ram_zero$$Base, .p_limit = &__ram_zero$$Limit,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_ZERO, .destination_type = INIT_MEM_RAM}} +}; +/* Load initialization tables */ +extern uint32_t __ipdram_from_flash$$Base; +extern uint32_t __ipdram_from_flash$$Limit; +extern uint32_t __ipdram_from_flash$$Load; +extern uint32_t __fragram_from_flash$$Base; +extern uint32_t __fragram_from_flash$$Limit; +extern uint32_t __fragram_from_flash$$Load; +extern uint32_t __machw_mib_from_flash$$Base; +extern uint32_t __machw_mib_from_flash$$Limit; +extern uint32_t __machw_mib_from_flash$$Load; +extern uint32_t __ram_from_flash$$Base; +extern uint32_t __ram_from_flash$$Limit; +extern uint32_t __ram_from_flash$$Load; +extern uint32_t __ramcode_from_flash$$Base; +extern uint32_t __ramcode_from_flash$$Limit; +extern uint32_t __ramcode_from_flash$$Load; +static const bsp_init_copy_info_t copy_list[] = +{ + {.p_base = &__ipdram_from_flash$$Base, .p_limit = &__ipdram_from_flash$$Limit, .p_load = &__ipdram_from_flash$$Load,.type={.copy_64 = 0, .external = 1, .source_type = INIT_MEM_FLASH, .destination_type = INIT_MEM_IPDRAM}}, + {.p_base = &__fragram_from_flash$$Base, .p_limit = &__fragram_from_flash$$Limit, .p_load = &__fragram_from_flash$$Load,.type={.copy_64 = 0, .external = 1, .source_type = INIT_MEM_FLASH, .destination_type = INIT_MEM_FRAGRAM}}, + {.p_base = &__machw_mib_from_flash$$Base, .p_limit = &__machw_mib_from_flash$$Limit, .p_load = &__machw_mib_from_flash$$Load,.type={.copy_64 = 0, .external = 1, .source_type = INIT_MEM_FLASH, .destination_type = INIT_MEM_MACHW_MIB}}, + {.p_base = &__ram_from_flash$$Base, .p_limit = &__ram_from_flash$$Limit, .p_load = &__ram_from_flash$$Load,.type={.copy_64 = 0, .external = 1, .source_type = INIT_MEM_FLASH, .destination_type = INIT_MEM_RAM}}, + {.p_base = &__ramcode_from_flash$$Base, .p_limit = &__ramcode_from_flash$$Limit, .p_load = &__ramcode_from_flash$$Load,.type={.copy_64 = 0, .external = 1, .source_type = INIT_MEM_FLASH, .destination_type = INIT_MEM_RAMCODE}} +}; + +/* initialization data structure */ +const bsp_init_info_t g_init_info = +{ + .zero_count = sizeof(zero_list) / sizeof(zero_list[0]), + .p_zero_list = zero_list, + .copy_count = sizeof(copy_list) / sizeof(copy_list[0]), + .p_copy_list = copy_list +}; + +#endif /* BSP_LINKER_C */ +/* TODO: Revert once solution project is ready. */ +#if !defined(BOARD_RA6B1_PRODK) && !defined(BOARD_RA6U1_EK) +#endif + +/* UNCRUSTIFY-ON */ + diff --git a/bsp/renesas/ra6w1-ek/board/ports/SConscript b/bsp/renesas/ra6w1-ek/board/ports/SConscript new file mode 100644 index 000000000000..6bc17b8362e2 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/board/ports/SConscript @@ -0,0 +1,19 @@ +import os +from building import * + +src = [] +objs = [] +cwd = GetCurrentDir() +CPPPATH = [cwd] + +if GetDepend(["BSP_USING_GPIO_W"]): + src += ["drv_gpio_w.c"] + +objs = DefineGroup('Port', src, depend = [''], CPPPATH = CPPPATH) + +list = os.listdir(cwd) +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/ra6w1-ek/board/ports/drv_gpio_w.c b/bsp/renesas/ra6w1-ek/board/ports/drv_gpio_w.c new file mode 100644 index 000000000000..0eaeee5b76f6 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/board/ports/drv_gpio_w.c @@ -0,0 +1,446 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-07-29 KyleChan first version + * 2026-07-15 rain RA Wireless GPIO adapter + */ + +#include +#include +#include +#include +#include "r_ext_irq_w.h" +#include "common_data.h" +#include "board.h" + +#ifdef BSP_USING_GPIO_W + +#define DBG_TAG "drv.gpio.wireless" +#ifdef DRV_DEBUG + #define DBG_LVL DBG_LOG +#else + #define DBG_LVL DBG_INFO +#endif /* DRV_DEBUG */ + +#define RA_WIRELESS_EXT_IRQ_MAX_CHANNEL 30 + +static struct rt_pin_irq_hdr pin_irq_hdr_tab[RA_WIRELESS_EXT_IRQ_MAX_CHANNEL] = {0}; +static ext_irq_w_instance_ctrl_t ra_ext_irq_ctrl_tab[RA_WIRELESS_EXT_IRQ_MAX_CHANNEL]; +static ext_irq_w_extended_cfg_t ra_ext_irq_extend_tab[RA_WIRELESS_EXT_IRQ_MAX_CHANNEL]; +static external_irq_cfg_t ra_ext_irq_cfg_tab[RA_WIRELESS_EXT_IRQ_MAX_CHANNEL]; +static rt_int32_t ra_ext_irq_pin_to_channel[RA_WIRELESS_EXT_IRQ_MAX_CHANNEL]; + +static void ra_irq_tab_init(void) +{ + for (int i = 0; i < RA_WIRELESS_EXT_IRQ_MAX_CHANNEL; ++i) + { + pin_irq_hdr_tab[i].pin = -1; + pin_irq_hdr_tab[i].mode = 0; + pin_irq_hdr_tab[i].args = RT_NULL; + pin_irq_hdr_tab[i].hdr = RT_NULL; + ra_ext_irq_pin_to_channel[i] = -1; + } +} + +static rt_int32_t ra_pin_find_irq_channel(rt_uint32_t pin) +{ + for (int i = 0; i < RA_WIRELESS_EXT_IRQ_MAX_CHANNEL; ++i) + { + if (ra_ext_irq_pin_to_channel[i] == (rt_int32_t) pin) + { + return i; + } + } + + return -1; +} + +static rt_int32_t ra_pin_alloc_irq_channel(rt_uint32_t pin) +{ + rt_int32_t channel = ra_pin_find_irq_channel(pin); + + if (channel >= 0) + { + return channel; + } + + for (int i = 0; i < RA_WIRELESS_EXT_IRQ_MAX_CHANNEL; ++i) + { + if (ra_ext_irq_pin_to_channel[i] < 0) + { + ra_ext_irq_pin_to_channel[i] = (rt_int32_t) pin; + return i; + } + } + + return -1; +} + +static rt_bool_t ra_wireless_pin_valid(rt_base_t pin) +{ + rt_uint32_t port; + rt_uint32_t pin_id; + + if (pin < 0) + { + return RT_FALSE; + } + + port = ((rt_uint32_t) pin & BSP_IO_PORT_BITS) >> BSP_IO_PORT_OFFSET; + pin_id = (rt_uint32_t) pin & BSP_IO_PIN_BITS; + + return (((BSP_IO_PORT_00 == port) && (pin_id < BSP_FEATURE_IO_PORT0_GPIO_COUNT)) || + ((BSP_IO_PORT_01 == port) && (pin_id < BSP_FEATURE_IO_PORT1_GPIO_COUNT))); +} + +static rt_bool_t ra_ext_irq_w_pin_supported(rt_base_t pin) +{ + rt_uint32_t port; + rt_uint32_t pin_id; + + if (pin < 0) + { + return RT_FALSE; + } + + port = ((rt_uint32_t) pin & BSP_IO_PORT_BITS) >> BSP_IO_PORT_OFFSET; + pin_id = (rt_uint32_t) pin & BSP_IO_PIN_BITS; + + return (((BSP_IO_PORT_00 == port) && (pin_id <= 13U)) || + ((BSP_IO_PORT_01 == port) && (pin_id <= 15U))); +} + +static external_irq_trigger_t ra_pin_irq_mode_to_trigger(rt_uint8_t mode) +{ + switch (mode) + { + case PIN_IRQ_MODE_RISING: + return EXTERNAL_IRQ_TRIG_RISING; + case PIN_IRQ_MODE_FALLING: + return EXTERNAL_IRQ_TRIG_FALLING; + case PIN_IRQ_MODE_HIGH_LEVEL: + return EXTERNAL_IRQ_TRIG_LEVEL_HIGH; + case PIN_IRQ_MODE_LOW_LEVEL: + return EXTERNAL_IRQ_TRIG_LEVEL_LOW; + default: + return (external_irq_trigger_t) -1; + } +} + +static void ra_ext_irq_w_callback(external_irq_callback_args_t *p_args) +{ + struct rt_pin_irq_hdr *irq_hdr = (struct rt_pin_irq_hdr *) p_args->p_context; + + rt_interrupt_enter(); + if ((RT_NULL != irq_hdr) && (RT_NULL != irq_hdr->hdr)) + { + irq_hdr->hdr(irq_hdr->args); + } + rt_interrupt_leave(); +} + +static void ra_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode) +{ + fsp_err_t err; + uint32_t cfg; + + RT_UNUSED(dev); + + if (!ra_wireless_pin_valid(pin)) + { + LOG_E("invalid pin: 0x%x", pin); + return; + } + + err = R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg); + if ((err != FSP_SUCCESS) && (err != FSP_ERR_ALREADY_OPEN)) + { + LOG_E("GPIO open failed"); + return; + } + + switch (mode) + { + case PIN_MODE_OUTPUT: + cfg = GPIO_W_CFG_PORT_DIRECTION_OUTPUT; + break; + + case PIN_MODE_INPUT: + cfg = GPIO_W_CFG_PORT_DIRECTION_INPUT; + break; + + case PIN_MODE_INPUT_PULLUP: + cfg = GPIO_W_CFG_PORT_DIRECTION_INPUT | GPIO_W_CFG_PULLUP_ENABLE; + break; + + case PIN_MODE_INPUT_PULLDOWN: + cfg = GPIO_W_CFG_PORT_DIRECTION_INPUT | GPIO_W_CFG_PULLDOWN_ENABLE; + break; + + case PIN_MODE_OUTPUT_OD: + cfg = GPIO_W_CFG_OPEN_DRAIN_ENABLE; + break; + + default: + LOG_E("unsupported pin mode: %d", mode); + return; + } + + err = R_IOPORT_PinCfg(&g_ioport_ctrl, (bsp_io_port_pin_t) pin, cfg); + if (err != FSP_SUCCESS) + { + LOG_E("pin mode configuration failed: %d", err); + } +} + +static void ra_pin_write(rt_device_t dev, rt_base_t pin, rt_uint8_t value) +{ + bsp_io_level_t level = BSP_IO_LEVEL_HIGH; + + RT_UNUSED(dev); + + if (!ra_wireless_pin_valid(pin)) + { + LOG_E("invalid pin: 0x%x", pin); + return; + } + + if (value != level) + { + level = BSP_IO_LEVEL_LOW; + } + + R_BSP_PinAccessEnable(); + R_BSP_PinWrite(pin, level); + R_BSP_PinAccessDisable(); +} + +static rt_ssize_t ra_pin_read(rt_device_t dev, rt_base_t pin) +{ + RT_UNUSED(dev); + + if (!ra_wireless_pin_valid(pin)) + { + return -RT_EINVAL; + } + return R_BSP_PinRead(pin); +} + +static rt_err_t ra_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt_uint8_t enabled) +{ + fsp_err_t err; + rt_int32_t irqx = ra_pin_find_irq_channel((rt_uint32_t) pin); + + RT_UNUSED(device); + + if ((irqx < 0) || (irqx >= RA_WIRELESS_EXT_IRQ_MAX_CHANNEL)) + { + return -RT_ERROR; + } + + if (PIN_IRQ_ENABLE == enabled) + { + err = R_EXT_IRQ_W_ExternalIrqOpen((external_irq_ctrl_t *) &ra_ext_irq_ctrl_tab[irqx], + (external_irq_cfg_t const *) &ra_ext_irq_cfg_tab[irqx]); + if ((FSP_SUCCESS != err) && (FSP_ERR_ALREADY_OPEN != err)) + { + LOG_E("R_EXT_IRQ_W_ExternalIrqOpen failed: %d", err); + return -RT_ERROR; + } + + err = R_EXT_IRQ_W_ExternalIrqEnable((external_irq_ctrl_t *) &ra_ext_irq_ctrl_tab[irqx]); + if (FSP_SUCCESS != err) + { + LOG_E("R_EXT_IRQ_W_ExternalIrqEnable failed: %d", err); + return -RT_ERROR; + } + } + else if (PIN_IRQ_DISABLE == enabled) + { + err = R_EXT_IRQ_W_ExternalIrqDisable((external_irq_ctrl_t *) &ra_ext_irq_ctrl_tab[irqx]); + if ((FSP_SUCCESS != err) && (FSP_ERR_NOT_OPEN != err)) + { + LOG_E("R_EXT_IRQ_W_ExternalIrqDisable failed: %d", err); + return -RT_ERROR; + } + + err = R_EXT_IRQ_W_ExternalIrqClose((external_irq_ctrl_t *) &ra_ext_irq_ctrl_tab[irqx]); + if ((FSP_SUCCESS != err) && (FSP_ERR_NOT_OPEN != err)) + { + LOG_E("R_EXT_IRQ_W_ExternalIrqClose failed: %d", err); + return -RT_ERROR; + } + } + + return RT_EOK; +} + +static rt_err_t ra_pin_attach_irq(struct rt_device *device, rt_base_t pin, + rt_uint8_t mode, void (*hdr)(void *args), void *args) +{ + rt_int32_t irqx; + external_irq_trigger_t trigger = ra_pin_irq_mode_to_trigger(mode); + + if (((external_irq_trigger_t) -1) == trigger) + { + LOG_W("RA Wireless EXT IRQ does not support mode %d", mode); + return -RT_EINVAL; + } + + RT_UNUSED(device); + + if (!ra_ext_irq_w_pin_supported(pin)) + { + return -RT_EINVAL; + } + + irqx = ra_pin_alloc_irq_channel((rt_uint32_t) pin); + if ((irqx < 0) || (irqx >= RA_WIRELESS_EXT_IRQ_MAX_CHANNEL)) + { + return -RT_ERROR; + } + + int level = rt_hw_interrupt_disable(); + if (pin_irq_hdr_tab[irqx].pin == pin && + pin_irq_hdr_tab[irqx].hdr == hdr && + pin_irq_hdr_tab[irqx].mode == mode && + pin_irq_hdr_tab[irqx].args == args) + { + rt_hw_interrupt_enable(level); + return RT_EOK; + } + + if (pin_irq_hdr_tab[irqx].pin != -1) + { + rt_hw_interrupt_enable(level); + return -RT_EBUSY; + } + + pin_irq_hdr_tab[irqx].pin = pin; + pin_irq_hdr_tab[irqx].hdr = hdr; + pin_irq_hdr_tab[irqx].mode = mode; + pin_irq_hdr_tab[irqx].args = args; + + ra_ext_irq_extend_tab[irqx].irq_pin = (bsp_io_port_pin_t) pin; + + ra_ext_irq_cfg_tab[irqx].channel = (uint8_t) irqx; + ra_ext_irq_cfg_tab[irqx].ipl = 4; + ra_ext_irq_cfg_tab[irqx].irq = FSP_INVALID_VECTOR; + ra_ext_irq_cfg_tab[irqx].trigger = trigger; + ra_ext_irq_cfg_tab[irqx].clock_source_div = EXTERNAL_IRQ_CLOCK_SOURCE_DIV_1; + ra_ext_irq_cfg_tab[irqx].filter_enable = false; + ra_ext_irq_cfg_tab[irqx].p_callback = ra_ext_irq_w_callback; + ra_ext_irq_cfg_tab[irqx].p_context = &pin_irq_hdr_tab[irqx]; + ra_ext_irq_cfg_tab[irqx].p_extend = &ra_ext_irq_extend_tab[irqx]; + + rt_hw_interrupt_enable(level); + + return RT_EOK; +} + +static rt_err_t ra_pin_dettach_irq(struct rt_device *device, rt_base_t pin) +{ + fsp_err_t err; + rt_int32_t irqx = ra_pin_find_irq_channel((rt_uint32_t) pin); + + RT_UNUSED(device); + + if ((irqx < 0) || (irqx >= RA_WIRELESS_EXT_IRQ_MAX_CHANNEL)) + { + return -RT_ERROR; + } + + err = R_EXT_IRQ_W_ExternalIrqDisable((external_irq_ctrl_t *) &ra_ext_irq_ctrl_tab[irqx]); + if ((FSP_SUCCESS != err) && (FSP_ERR_NOT_OPEN != err)) + { + return -RT_ERROR; + } + + err = R_EXT_IRQ_W_ExternalIrqClose((external_irq_ctrl_t *) &ra_ext_irq_ctrl_tab[irqx]); + if ((FSP_SUCCESS != err) && (FSP_ERR_NOT_OPEN != err)) + { + return -RT_ERROR; + } + + int level = rt_hw_interrupt_disable(); + if (pin_irq_hdr_tab[irqx].pin == -1) + { + rt_hw_interrupt_enable(level); + return RT_EOK; + } + + pin_irq_hdr_tab[irqx].pin = -1; + pin_irq_hdr_tab[irqx].hdr = RT_NULL; + pin_irq_hdr_tab[irqx].mode = 0; + pin_irq_hdr_tab[irqx].args = RT_NULL; + ra_ext_irq_pin_to_channel[irqx] = -1; + rt_memset(&ra_ext_irq_ctrl_tab[irqx], 0, sizeof(ra_ext_irq_ctrl_tab[irqx])); + rt_memset(&ra_ext_irq_cfg_tab[irqx], 0, sizeof(ra_ext_irq_cfg_tab[irqx])); + rt_memset(&ra_ext_irq_extend_tab[irqx], 0, sizeof(ra_ext_irq_extend_tab[irqx])); + + rt_hw_interrupt_enable(level); + + return RT_EOK; +} + +static rt_base_t ra_pin_get(const char *name) +{ + rt_int32_t port = -1; + rt_int32_t pin = -1; + + if ((rt_strlen(name) == 5) && + ((name[0] == 'P') || (name[0] == 'p')) && + (name[2] == '_') && + ('0' <= (int) name[1] && (int) name[1] <= '9') && + ('0' <= (int) name[3] && (int) name[3] <= '9') && + ('0' <= (int) name[4] && (int) name[4] <= '9')) + { + port = (rt_int32_t) (name[1] - '0'); + pin = (rt_int32_t) ((name[3] - '0') * 10 + (name[4] - '0')); + } + else if ((rt_strlen(name) == 4) && + ((name[0] == 'P') || (name[0] == 'p')) && + ('0' <= (int) name[1] && (int) name[1] <= '9') && + ('0' <= (int) name[2] && (int) name[2] <= '9') && + ('0' <= (int) name[3] && (int) name[3] <= '9')) + { + port = (rt_int32_t) (name[1] - '0'); + pin = (rt_int32_t) ((name[2] - '0') * 10 + (name[3] - '0')); + } + + if ((port >= 0) && (pin >= 0) && (pin <= (rt_int32_t) BSP_IO_PIN_BITS)) + { + rt_base_t pin_value = (rt_base_t) ((port << BSP_IO_PORT_OFFSET) | pin); + if (ra_wireless_pin_valid(pin_value)) + { + return pin_value; + } + } + + LOG_W("Invalid pin expression, use `P0_06` or `P006` format"); + return -RT_ERROR; +} + +const static struct rt_pin_ops _ra_pin_ops = +{ + .pin_mode = ra_pin_mode, + .pin_write = ra_pin_write, + .pin_read = ra_pin_read, + .pin_attach_irq = ra_pin_attach_irq, + .pin_detach_irq = ra_pin_dettach_irq, + .pin_irq_enable = ra_pin_irq_enable, + .pin_get = ra_pin_get, +}; + +int rt_hw_pin_init(void) +{ + ra_irq_tab_init(); + return rt_device_pin_register("pin", &_ra_pin_ops, RT_NULL); +} + +#endif /* BSP_USING_GPIO_W */ + diff --git a/bsp/renesas/ra6w1-ek/board/ports/gpio_cfg.h b/bsp/renesas/ra6w1-ek/board/ports/gpio_cfg.h new file mode 100644 index 000000000000..ad2b4c86d17c --- /dev/null +++ b/bsp/renesas/ra6w1-ek/board/ports/gpio_cfg.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-01-19 Sherman first version + */ + +/* Number of IRQ channels on the device */ +#define RA_IRQ_MAX 16 + +/* PIN to IRQx table */ +#define PIN2IRQX_TABLE \ +{ \ + switch (pin) \ + { \ + case BSP_IO_PORT_04_PIN_00: \ + case BSP_IO_PORT_02_PIN_06: \ + case BSP_IO_PORT_01_PIN_05: \ + return 0; \ + case BSP_IO_PORT_02_PIN_05: \ + case BSP_IO_PORT_01_PIN_01: \ + case BSP_IO_PORT_01_PIN_04: \ + return 1; \ + case BSP_IO_PORT_02_PIN_03: \ + case BSP_IO_PORT_01_PIN_00: \ + case BSP_IO_PORT_02_PIN_13: \ + return 2; \ + case BSP_IO_PORT_02_PIN_02: \ + case BSP_IO_PORT_01_PIN_10: \ + case BSP_IO_PORT_02_PIN_12: \ + return 3; \ + case BSP_IO_PORT_04_PIN_02: \ + case BSP_IO_PORT_01_PIN_11: \ + case BSP_IO_PORT_04_PIN_11: \ + return 4; \ + case BSP_IO_PORT_04_PIN_01: \ + case BSP_IO_PORT_03_PIN_02: \ + case BSP_IO_PORT_04_PIN_10: \ + return 5; \ + case BSP_IO_PORT_03_PIN_01: \ + case BSP_IO_PORT_00_PIN_00: \ + case BSP_IO_PORT_04_PIN_09: \ + return 6; \ + case BSP_IO_PORT_00_PIN_01: \ + case BSP_IO_PORT_04_PIN_08: \ + return 7; \ + case BSP_IO_PORT_00_PIN_02: \ + case BSP_IO_PORT_03_PIN_05: \ + case BSP_IO_PORT_04_PIN_15: \ + return 8; \ + case BSP_IO_PORT_00_PIN_04: \ + case BSP_IO_PORT_03_PIN_04: \ + case BSP_IO_PORT_04_PIN_14: \ + return 9; \ + case BSP_IO_PORT_00_PIN_05: \ + case BSP_IO_PORT_07_PIN_09: \ + return 10; \ + case BSP_IO_PORT_05_PIN_01: \ + case BSP_IO_PORT_00_PIN_06: \ + case BSP_IO_PORT_07_PIN_08: \ + return 11; \ + case BSP_IO_PORT_05_PIN_02: \ + case BSP_IO_PORT_00_PIN_08: \ + return 12; \ + case BSP_IO_PORT_00_PIN_15: \ + case BSP_IO_PORT_00_PIN_09: \ + return 13; \ + case BSP_IO_PORT_04_PIN_03: \ + case BSP_IO_PORT_05_PIN_12: \ + case BSP_IO_PORT_05_PIN_05: \ + return 14; \ + case BSP_IO_PORT_04_PIN_04: \ + case BSP_IO_PORT_05_PIN_11: \ + case BSP_IO_PORT_05_PIN_06: \ + return 15; \ + default : \ + return -1; \ + } \ +} + diff --git a/bsp/renesas/ra6w1-ek/docs/picture/ek-ra6w1.png b/bsp/renesas/ra6w1-ek/docs/picture/ek-ra6w1.png new file mode 100644 index 0000000000000000000000000000000000000000..52dcc2d11a6a080004ae23e19895a212ba3a5d8a GIT binary patch literal 830796 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≦̸@*fp;ig19qQpo>kR0!{Kh8yX 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
  • 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 literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra6w1-ek/ra/SConscript b/bsp/renesas/ra6w1-ek/ra/SConscript new file mode 100644 index 000000000000..03f6085d5f78 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/SConscript @@ -0,0 +1,36 @@ +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"]: + + CPPPATH = [cwd + "/arm/CMSIS_6/CMSIS/Core/Include", + cwd + "/fsp/inc", + cwd + "/fsp/inc/api", + cwd + "/fsp/inc/instances", + cwd + "/fsp/src/bsp/cmsis/Device/RENESAS/Include", + cwd + "/fsp/src/bsp/mcu/all", + cwd + "/fsp/src/bsp_w/cmsis/Device/RENESAS/Include", + cwd + "/fsp/src/bsp_w/mcu/all", + cwd + "/fsp/src/bsp_w/mcu/ra6w1", + cwd + "/fsp/src/bsp_w/mcu/ra6w1/config"] + + src += Glob("./fsp/src/bsp_w/cmsis/Device/RENESAS/Source/*.c") + src += Glob("./fsp/src/bsp_w/mcu/all/*.c") + src += Glob("./fsp/src/bsp_w/mcu/all/*.S") + src += Glob("./fsp/src/bsp_w/mcu/ra6w1/*.c") + + src += Glob("./fsp/src/r_gpio_w/*.c") + src += Glob("./fsp/src/r_uart_w/*.c") + src += Glob("./fsp/src/r_ext_irq_w/*.c") + +group = DefineGroup("ra", src, depend = [""], CPPPATH = CPPPATH) +Return("group") diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h new file mode 100644 index 000000000000..760c63057290 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h @@ -0,0 +1,392 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(A) Compiler ARMClang (Arm Compiler 6) Header File + */ + +#ifndef __CMSIS_ARMCLANG_A_H +#define __CMSIS_ARMCLANG_A_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_ARMCLANG_H + #error "This file must not be included directly" +#endif + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0, #0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0, #0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0, #0" : "=Q" (*ptr) : "r" (value) ); +} + + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +#define __SADD8 __builtin_arm_sadd8 +#define __QADD8 __builtin_arm_qadd8 +#define __SHADD8 __builtin_arm_shadd8 +#define __UADD8 __builtin_arm_uadd8 +#define __UQADD8 __builtin_arm_uqadd8 +#define __UHADD8 __builtin_arm_uhadd8 +#define __SSUB8 __builtin_arm_ssub8 +#define __QSUB8 __builtin_arm_qsub8 +#define __SHSUB8 __builtin_arm_shsub8 +#define __USUB8 __builtin_arm_usub8 +#define __UQSUB8 __builtin_arm_uqsub8 +#define __UHSUB8 __builtin_arm_uhsub8 +#define __SADD16 __builtin_arm_sadd16 +#define __QADD16 __builtin_arm_qadd16 +#define __SHADD16 __builtin_arm_shadd16 +#define __UADD16 __builtin_arm_uadd16 +#define __UQADD16 __builtin_arm_uqadd16 +#define __UHADD16 __builtin_arm_uhadd16 +#define __SSUB16 __builtin_arm_ssub16 +#define __QSUB16 __builtin_arm_qsub16 +#define __SHSUB16 __builtin_arm_shsub16 +#define __USUB16 __builtin_arm_usub16 +#define __UQSUB16 __builtin_arm_uqsub16 +#define __UHSUB16 __builtin_arm_uhsub16 +#define __SASX __builtin_arm_sasx +#define __QASX __builtin_arm_qasx +#define __SHASX __builtin_arm_shasx +#define __UASX __builtin_arm_uasx +#define __UQASX __builtin_arm_uqasx +#define __UHASX __builtin_arm_uhasx +#define __SSAX __builtin_arm_ssax +#define __QSAX __builtin_arm_qsax +#define __SHSAX __builtin_arm_shsax +#define __USAX __builtin_arm_usax +#define __UQSAX __builtin_arm_uqsax +#define __UHSAX __builtin_arm_uhsax +#define __USAD8 __builtin_arm_usad8 +#define __USADA8 __builtin_arm_usada8 +#define __SSAT16 __builtin_arm_ssat16 +#define __USAT16 __builtin_arm_usat16 +#define __UXTB16 __builtin_arm_uxtb16 +#define __UXTAB16 __builtin_arm_uxtab16 +#define __SXTB16 __builtin_arm_sxtb16 +#define __SXTAB16 __builtin_arm_sxtab16 +#define __SMUAD __builtin_arm_smuad +#define __SMUADX __builtin_arm_smuadx +#define __SMLAD __builtin_arm_smlad +#define __SMLADX __builtin_arm_smladx +#define __SMLALD __builtin_arm_smlald +#define __SMLALDX __builtin_arm_smlaldx +#define __SMUSD __builtin_arm_smusd +#define __SMUSDX __builtin_arm_smusdx +#define __SMLSD __builtin_arm_smlsd +#define __SMLSDX __builtin_arm_smlsdx +#define __SMLSLD __builtin_arm_smlsld +#define __SMLSLDX __builtin_arm_smlsldx +#define __SEL __builtin_arm_sel +#define __QADD __builtin_arm_qadd +#define __QSUB __builtin_arm_qsub + +#define __PKHBT(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) +{ + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) + { + __ASM volatile("sxtb16 %0, %1, ROR %2" : "=r"(result) : "r"(op1), "i"(rotate)); + } + else + { + result = __SXTB16(__ROR(op1, rotate)); + } + return result; +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16_RORn(uint32_t op1, uint32_t op2, uint32_t rotate) +{ + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) + { + __ASM volatile("sxtab16 %0, %1, %2, ROR %3" : "=r"(result) : "r"(op1), "r"(op2), "i"(rotate)); + } + else + { + result = __SXTAB16(op1, __ROR(op2, rotate)); + } + return result; +} + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} + +#endif /* (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) */ + /** @} end of group CMSIS_SIMD_intrinsics */ + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : : "memory" + ); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack) : "memory" + ); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#include "cmsis_cp15.h" + +/** \brief Enable Floating Point Unit + + Critical section, called from undef handler, so systick is disabled + */ +__STATIC_INLINE void __FPU_Enable(void) +{ + __ASM volatile( + // Permit access to VFP/NEON, registers by modifying CPACR + " MRC p15,0,R1,c1,c0,2 \n" + " ORR R1,R1,#0x00F00000 \n" + " MCR p15,0,R1,c1,c0,2 \n" + + // Ensure that subsequent instructions occur in the context of VFP/NEON access permitted + " ISB \n" + + // Enable VFP/NEON + " VMRS R1,FPEXC \n" + " ORR R1,R1,#0x40000000 \n" + " VMSR FPEXC,R1 \n" + + // Initialise VFP/NEON registers to 0 + " MOV R2,#0 \n" + + // Initialise D16 registers to 0 + " VMOV D0, R2,R2 \n" + " VMOV D1, R2,R2 \n" + " VMOV D2, R2,R2 \n" + " VMOV D3, R2,R2 \n" + " VMOV D4, R2,R2 \n" + " VMOV D5, R2,R2 \n" + " VMOV D6, R2,R2 \n" + " VMOV D7, R2,R2 \n" + " VMOV D8, R2,R2 \n" + " VMOV D9, R2,R2 \n" + " VMOV D10,R2,R2 \n" + " VMOV D11,R2,R2 \n" + " VMOV D12,R2,R2 \n" + " VMOV D13,R2,R2 \n" + " VMOV D14,R2,R2 \n" + " VMOV D15,R2,R2 \n" + +#if (defined(__ARM_NEON) && (__ARM_NEON == 1)) + // Initialise D32 registers to 0 + " VMOV D16,R2,R2 \n" + " VMOV D17,R2,R2 \n" + " VMOV D18,R2,R2 \n" + " VMOV D19,R2,R2 \n" + " VMOV D20,R2,R2 \n" + " VMOV D21,R2,R2 \n" + " VMOV D22,R2,R2 \n" + " VMOV D23,R2,R2 \n" + " VMOV D24,R2,R2 \n" + " VMOV D25,R2,R2 \n" + " VMOV D26,R2,R2 \n" + " VMOV D27,R2,R2 \n" + " VMOV D28,R2,R2 \n" + " VMOV D29,R2,R2 \n" + " VMOV D30,R2,R2 \n" + " VMOV D31,R2,R2 \n" +#endif + + // Initialise FPSCR to a known state + " VMRS R1,FPSCR \n" + " LDR R2,=0x00086060 \n" //Mask off all bits that do not have to be preserved. Non-preserved bits can/should be zero. + " AND R1,R1,R2 \n" + " VMSR FPSCR,R1 " + : : : "cc", "r1", "r2" + ); +} + +#endif /* __CMSIS_ARMCLANG_A_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h new file mode 100644 index 000000000000..91ca6a2a5900 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h @@ -0,0 +1,386 @@ +/* + * Copyright (c) 2023-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(A) Compiler LLVM/Clang Header File + */ + +#ifndef __CMSIS_CLANG_A_H +#define __CMSIS_CLANG_A_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_CLANG_H + #error "This file must not be included directly" +#endif +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0, #0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0, #0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0, #0" : "=Q" (*ptr) : "r" (value) ); +} + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) +#define __SADD8 __builtin_arm_sadd8 +#define __QADD8 __builtin_arm_qadd8 +#define __SHADD8 __builtin_arm_shadd8 +#define __UADD8 __builtin_arm_uadd8 +#define __UQADD8 __builtin_arm_uqadd8 +#define __UHADD8 __builtin_arm_uhadd8 +#define __SSUB8 __builtin_arm_ssub8 +#define __QSUB8 __builtin_arm_qsub8 +#define __SHSUB8 __builtin_arm_shsub8 +#define __USUB8 __builtin_arm_usub8 +#define __UQSUB8 __builtin_arm_uqsub8 +#define __UHSUB8 __builtin_arm_uhsub8 +#define __SADD16 __builtin_arm_sadd16 +#define __QADD16 __builtin_arm_qadd16 +#define __SHADD16 __builtin_arm_shadd16 +#define __UADD16 __builtin_arm_uadd16 +#define __UQADD16 __builtin_arm_uqadd16 +#define __UHADD16 __builtin_arm_uhadd16 +#define __SSUB16 __builtin_arm_ssub16 +#define __QSUB16 __builtin_arm_qsub16 +#define __SHSUB16 __builtin_arm_shsub16 +#define __USUB16 __builtin_arm_usub16 +#define __UQSUB16 __builtin_arm_uqsub16 +#define __UHSUB16 __builtin_arm_uhsub16 +#define __SASX __builtin_arm_sasx +#define __QASX __builtin_arm_qasx +#define __SHASX __builtin_arm_shasx +#define __UASX __builtin_arm_uasx +#define __UQASX __builtin_arm_uqasx +#define __UHASX __builtin_arm_uhasx +#define __SSAX __builtin_arm_ssax +#define __QSAX __builtin_arm_qsax +#define __SHSAX __builtin_arm_shsax +#define __USAX __builtin_arm_usax +#define __UQSAX __builtin_arm_uqsax +#define __UHSAX __builtin_arm_uhsax +#define __USAD8 __builtin_arm_usad8 +#define __USADA8 __builtin_arm_usada8 +#define __SSAT16 __builtin_arm_ssat16 +#define __USAT16 __builtin_arm_usat16 +#define __UXTB16 __builtin_arm_uxtb16 +#define __UXTAB16 __builtin_arm_uxtab16 +#define __SXTB16 __builtin_arm_sxtb16 +#define __SXTAB16 __builtin_arm_sxtab16 +#define __SMUAD __builtin_arm_smuad +#define __SMUADX __builtin_arm_smuadx +#define __SMLAD __builtin_arm_smlad +#define __SMLADX __builtin_arm_smladx +#define __SMLALD __builtin_arm_smlald +#define __SMLALDX __builtin_arm_smlaldx +#define __SMUSD __builtin_arm_smusd +#define __SMUSDX __builtin_arm_smusdx +#define __SMLSD __builtin_arm_smlsd +#define __SMLSDX __builtin_arm_smlsdx +#define __SMLSLD __builtin_arm_smlsld +#define __SMLSLDX __builtin_arm_smlsldx +#define __SEL __builtin_arm_sel +#define __QADD __builtin_arm_qadd +#define __QSUB __builtin_arm_qsub + +#define __PKHBT(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) +{ + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) + { + __ASM volatile("sxtb16 %0, %1, ROR %2" : "=r"(result) : "r"(op1), "i"(rotate)); + } + else + { + result = __SXTB16(__ROR(op1, rotate)); + } + return result; +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16_RORn(uint32_t op1, uint32_t op2, uint32_t rotate) +{ + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) + { + __ASM volatile("sxtab16 %0, %1, %2, ROR %3" : "=r"(result) : "r"(op1), "r"(op2), "i"(rotate)); + } + else + { + result = __SXTAB16(op1, __ROR(op2, rotate)); + } + return result; +} + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} + +#endif /* (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) */ + /** @} end of group CMSIS_SIMD_intrinsics */ + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : : "memory" + ); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack) : "memory" + ); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#include "cmsis_cp15.h" + +/** \brief Enable Floating Point Unit + + Critical section, called from undef handler, so systick is disabled + */ +__STATIC_INLINE void __FPU_Enable(void) +{ + // Permit access to VFP/NEON, registers by modifying CPACR + const uint32_t cpacr = __get_CPACR(); + __set_CPACR(cpacr | 0x00F00000ul); + __ISB(); + + // Enable VFP/NEON + const uint32_t fpexc = __get_FPEXC(); + __set_FPEXC(fpexc | 0x40000000ul); + + __ASM volatile( + // Initialise VFP/NEON registers to 0 + " MOV R2,#0 \n" + + // Initialise D16 registers to 0 + " VMOV D0, R2,R2 \n" + " VMOV D1, R2,R2 \n" + " VMOV D2, R2,R2 \n" + " VMOV D3, R2,R2 \n" + " VMOV D4, R2,R2 \n" + " VMOV D5, R2,R2 \n" + " VMOV D6, R2,R2 \n" + " VMOV D7, R2,R2 \n" + " VMOV D8, R2,R2 \n" + " VMOV D9, R2,R2 \n" + " VMOV D10,R2,R2 \n" + " VMOV D11,R2,R2 \n" + " VMOV D12,R2,R2 \n" + " VMOV D13,R2,R2 \n" + " VMOV D14,R2,R2 \n" + " VMOV D15,R2,R2 \n" + +#if (defined(__ARM_NEON) && (__ARM_NEON == 1)) + // Initialise D32 registers to 0 + " VMOV D16,R2,R2 \n" + " VMOV D17,R2,R2 \n" + " VMOV D18,R2,R2 \n" + " VMOV D19,R2,R2 \n" + " VMOV D20,R2,R2 \n" + " VMOV D21,R2,R2 \n" + " VMOV D22,R2,R2 \n" + " VMOV D23,R2,R2 \n" + " VMOV D24,R2,R2 \n" + " VMOV D25,R2,R2 \n" + " VMOV D26,R2,R2 \n" + " VMOV D27,R2,R2 \n" + " VMOV D28,R2,R2 \n" + " VMOV D29,R2,R2 \n" + " VMOV D30,R2,R2 \n" + " VMOV D31,R2,R2 \n" +#endif + : : : "cc", "r2" + ); + + // Initialise FPSCR to a known state + const uint32_t fpscr = __get_FPSCR(); + __set_FPSCR(fpscr & 0x00086060ul); +} + +/*@} end of group CMSIS_Core_intrinsics */ + +#pragma clang diagnostic pop + +#endif /* __CMSIS_CLANG_A_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h new file mode 100644 index 000000000000..582b1bc54fec --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h @@ -0,0 +1,564 @@ +/* + * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(A) Compiler Specific Macros, Functions, Instructions + */ + +#ifndef __CMSIS_CP15_H +#define __CMSIS_CP15_H + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +/** \brief Get ACTLR + \return Auxiliary Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_ACTLR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 1); + return(result); +} + +/** \brief Set ACTLR + \param [in] actlr Auxiliary Control value to set + */ +__STATIC_FORCEINLINE void __set_ACTLR(uint32_t actlr) +{ + __set_CP(15, 0, actlr, 1, 0, 1); +} + +/** \brief Get CPACR + \return Coprocessor Access Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPACR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 2); + return result; +} + +/** \brief Set CPACR + \param [in] cpacr Coprocessor Access Control value to set + */ +__STATIC_FORCEINLINE void __set_CPACR(uint32_t cpacr) +{ + __set_CP(15, 0, cpacr, 1, 0, 2); +} + +/** \brief Get DFSR + \return Data Fault Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_DFSR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 5, 0, 0); + return result; +} + +/** \brief Set DFSR + \param [in] dfsr Data Fault Status value to set + */ +__STATIC_FORCEINLINE void __set_DFSR(uint32_t dfsr) +{ + __set_CP(15, 0, dfsr, 5, 0, 0); +} + +/** \brief Get IFSR + \return Instruction Fault Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IFSR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 5, 0, 1); + return result; +} + +/** \brief Set IFSR + \param [in] ifsr Instruction Fault Status value to set + */ +__STATIC_FORCEINLINE void __set_IFSR(uint32_t ifsr) +{ + __set_CP(15, 0, ifsr, 5, 0, 1); +} + +/** \brief Get ISR + \return Interrupt Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_ISR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 1, 0); + return result; +} + +/** \brief Get CBAR + \return Configuration Base Address register value + */ +__STATIC_FORCEINLINE uint32_t __get_CBAR(void) +{ + uint32_t result; + __get_CP(15, 4, result, 15, 0, 0); + return result; +} + +/** \brief Get TTBR0 + + This function returns the value of the Translation Table Base Register 0. + + \return Translation Table Base Register 0 value + */ +__STATIC_FORCEINLINE uint32_t __get_TTBR0(void) +{ + uint32_t result; + __get_CP(15, 0, result, 2, 0, 0); + return result; +} + +/** \brief Set TTBR0 + + This function assigns the given value to the Translation Table Base Register 0. + + \param [in] ttbr0 Translation Table Base Register 0 value to set + */ +__STATIC_FORCEINLINE void __set_TTBR0(uint32_t ttbr0) +{ + __set_CP(15, 0, ttbr0, 2, 0, 0); +} + +/** \brief Get DACR + + This function returns the value of the Domain Access Control Register. + + \return Domain Access Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_DACR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 3, 0, 0); + return result; +} + +/** \brief Set DACR + + This function assigns the given value to the Domain Access Control Register. + + \param [in] dacr Domain Access Control Register value to set + */ +__STATIC_FORCEINLINE void __set_DACR(uint32_t dacr) +{ + __set_CP(15, 0, dacr, 3, 0, 0); +} + +/** \brief Set SCTLR + + This function assigns the given value to the System Control Register. + + \param [in] sctlr System Control Register value to set + */ +__STATIC_FORCEINLINE void __set_SCTLR(uint32_t sctlr) +{ + __set_CP(15, 0, sctlr, 1, 0, 0); +} + +/** \brief Get SCTLR + \return System Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_SCTLR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 0); + return result; +} + +/** \brief Get MPIDR + + This function returns the value of the Multiprocessor Affinity Register. + + \return Multiprocessor Affinity Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MPIDR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 0, 0, 5); + return result; +} + +/** \brief Get VBAR + + This function returns the value of the Vector Base Address Register. + + \return Vector Base Address Register + */ +__STATIC_FORCEINLINE uint32_t __get_VBAR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 0, 0); + return result; +} + +/** \brief Set VBAR + + This function assigns the given value to the Vector Base Address Register. + + \param [in] vbar Vector Base Address Register value to set + */ +__STATIC_FORCEINLINE void __set_VBAR(uint32_t vbar) +{ + __set_CP(15, 0, vbar, 12, 0, 0); +} + +/** \brief Get MVBAR + + This function returns the value of the Monitor Vector Base Address Register. + + \return Monitor Vector Base Address Register + */ +__STATIC_FORCEINLINE uint32_t __get_MVBAR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 0, 1); + return result; +} + +/** \brief Set MVBAR + + This function assigns the given value to the Monitor Vector Base Address Register. + + \param [in] mvbar Monitor Vector Base Address Register value to set + */ +__STATIC_FORCEINLINE void __set_MVBAR(uint32_t mvbar) +{ + __set_CP(15, 0, mvbar, 12, 0, 1); +} + +#if (defined(__TIM_PRESENT) && (__TIM_PRESENT == 1U)) || \ + defined(DOXYGEN) + +/** \brief Set CNTFRQ + + This function assigns the given value to PL1 Physical Timer Counter Frequency Register (CNTFRQ). + + \param [in] value CNTFRQ Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTFRQ(uint32_t value) +{ + __set_CP(15, 0, value, 14, 0, 0); +} + +/** \brief Get CNTFRQ + + This function returns the value of the PL1 Physical Timer Counter Frequency Register (CNTFRQ). + + \return CNTFRQ Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTFRQ(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 0 , 0); + return result; +} + +/** \brief Set CNTP_TVAL + + This function assigns the given value to PL1 Physical Timer Value Register (CNTP_TVAL). + + \param [in] value CNTP_TVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_TVAL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 2, 0); +} + +/** \brief Get CNTP_TVAL + + This function returns the value of the PL1 Physical Timer Value Register (CNTP_TVAL). + + \return CNTP_TVAL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTP_TVAL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 2, 0); + return result; +} + +/** \brief Get CNTPCT + + This function returns the value of the 64 bits PL1 Physical Count Register (CNTPCT). + + \return CNTPCT Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTPCT(void) +{ + uint64_t result; + __get_CP64(15, 0, result, 14); + return result; +} + +/** \brief Set CNTP_CVAL + + This function assigns the given value to 64bits PL1 Physical Timer CompareValue Register (CNTP_CVAL). + + \param [in] value CNTP_CVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_CVAL(uint64_t value) +{ + __set_CP64(15, 2, value, 14); +} + +/** \brief Get CNTP_CVAL + + This function returns the value of the 64 bits PL1 Physical Timer CompareValue Register (CNTP_CVAL). + + \return CNTP_CVAL Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTP_CVAL(void) +{ + uint64_t result; + __get_CP64(15, 2, result, 14); + return result; +} + +/** \brief Set CNTP_CTL + + This function assigns the given value to PL1 Physical Timer Control Register (CNTP_CTL). + + \param [in] value CNTP_CTL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_CTL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 2, 1); +} + +/** \brief Get CNTP_CTL register + \return CNTP_CTL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTP_CTL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 2, 1); + return result; +} + +/******************************* VIRTUAL TIMER *******************************/ +/** see [ARM DDI 0406C.d] : + . §B4.1.31 "CNTV_CTL, Counter-timer Virtual Timer Control register" + . §B4.1.32 "CNTV_CVAL, Counter-timer Virtual Timer CompareValue register" + . §B4.1.33 "CNTV_TVAL, Counter-timer Virtual Timer TimerValue register" + . §B4.1.34 "CNTVCT, Counter-timer Virtual Count register" +**/ +/** \brief Set CNTV_TVAL + This function assigns the given value to VL1 Virtual Timer Value Register (CNTV_TVAL). + \param [in] value CNTV_TVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTV_TVAL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 3, 0); +} + +/** \brief Get CNTV_TVAL + This function returns the value of the VL1 Virtual Timer Value Register (CNTV_TVAL). + \return CNTV_TVAL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTV_TVAL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 3, 0); + return result; +} + +/** \brief Get CNTVCT + This function returns the value of the 64 bits VL1 Virtual Count Register (CNTVCT). + \return CNTVCT Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTVCT(void) +{ + uint64_t result; + __get_CP64(15, 1, result, 14); + return result; +} + +/** \brief Set CNTV_CVAL + This function assigns the given value to 64bits VL1 Virtual Timer CompareValue Register (CNTV_CVAL). + \param [in] value CNTV_CVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTV_CVAL(uint64_t value) +{ + __set_CP64(15, 3, value, 14); +} + +/** \brief Get CNTV_CVAL + This function returns the value of the 64 bits VL1 Virtual Timer CompareValue Register (CNTV_CVAL). + \return CNTV_CVAL Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTV_CVAL(void) +{ + uint64_t result; + __get_CP64(15, 3, result, 14); + return result; +} + +/** \brief Set CNTV_CTL + This function assigns the given value to VL1 Virtual Timer Control Register (CNTV_CTL). + \param [in] value CNTV_CTL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTV_CTL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 3, 1); +} + +/** \brief Get CNTV_CTL register + \return CNTV_CTL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTV_CTL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 3, 1); + return result; +} + +/***************************** VIRTUAL TIMER END *****************************/ +#endif + +/** \brief Set TLBIALL + + TLB Invalidate All + */ +__STATIC_FORCEINLINE void __set_TLBIALL(uint32_t value) +{ + __set_CP(15, 0, value, 8, 7, 0); +} + +/** \brief Set BPIALL. + + Branch Predictor Invalidate All + */ +__STATIC_FORCEINLINE void __set_BPIALL(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 6); +} + +/** \brief Set ICIALLU + + Instruction Cache Invalidate All + */ +__STATIC_FORCEINLINE void __set_ICIALLU(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 0); +} + +/** \brief Set ICIMVAC + + Instruction Cache Invalidate + */ +__STATIC_FORCEINLINE void __set_ICIMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 1); +} + +/** \brief Set DCCMVAC + + Data cache clean + */ +__STATIC_FORCEINLINE void __set_DCCMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 10, 1); +} + +/** \brief Set DCIMVAC + + Data cache invalidate + */ +__STATIC_FORCEINLINE void __set_DCIMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 6, 1); +} + +/** \brief Set DCCIMVAC + + Data cache clean and invalidate + */ +__STATIC_FORCEINLINE void __set_DCCIMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 14, 1); +} + +/** \brief Set CSSELR + */ +__STATIC_FORCEINLINE void __set_CSSELR(uint32_t value) +{ + __set_CP(15, 2, value, 0, 0, 0); +} + +/** \brief Get CSSELR + \return CSSELR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CSSELR(void) +{ + uint32_t result; + __get_CP(15, 2, result, 0, 0, 0); + return result; +} + +/** \brief Get CCSIDR + \return CCSIDR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CCSIDR(void) +{ + uint32_t result; + __get_CP(15, 1, result, 0, 0, 0); + return result; +} + +/** \brief Get CLIDR + \return CLIDR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CLIDR(void) +{ + uint32_t result; + __get_CP(15, 1, result, 0, 0, 1); + return result; +} + +/** \brief Set DCISW + */ +__STATIC_FORCEINLINE void __set_DCISW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 6, 2); +} + +/** \brief Set DCCSW + */ +__STATIC_FORCEINLINE void __set_DCCSW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 10, 2); +} + +/** \brief Set DCCISW + */ +__STATIC_FORCEINLINE void __set_DCCISW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 14, 2); +} + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h new file mode 100644 index 000000000000..5d2aaca75dd3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h @@ -0,0 +1,223 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_GCC_A_H +#define __CMSIS_GCC_A_H + +#ifndef __CMSIS_GCC_H + #error "This file must not be included directly" +#endif + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + + +/** \defgroup CMSIS_Core_intrinsics CMSIS Core Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr = __get_CPSR(); + uint32_t result; + __ASM volatile( + "CPS #0x1F \n" + "MOV %0, sp " : "=r"(result) : : "memory" + ); + __set_CPSR(cpsr); + __ISB(); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr = __get_CPSR(); + __ASM volatile( + "CPS #0x1F \n" + "MOV sp, %0 " : : "r" (topOfProcStack) : "memory" + ); + __set_CPSR(cpsr); + __ISB(); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#include "cmsis_cp15.h" + +/** \brief Enable Floating Point Unit + + Critical section, called from undef handler, so systick is disabled + */ +__STATIC_INLINE void __FPU_Enable(void) +{ + // Permit access to VFP/NEON, registers by modifying CPACR + const uint32_t cpacr = __get_CPACR(); + __set_CPACR(cpacr | 0x00F00000ul); + __ISB(); + + // Enable VFP/NEON + const uint32_t fpexc = __get_FPEXC(); + __set_FPEXC(fpexc | 0x40000000ul); + + __ASM volatile( + // Initialise VFP/NEON registers to 0 + " MOV R2,#0 \n" + + // Initialise D16 registers to 0 + " VMOV D0, R2,R2 \n" + " VMOV D1, R2,R2 \n" + " VMOV D2, R2,R2 \n" + " VMOV D3, R2,R2 \n" + " VMOV D4, R2,R2 \n" + " VMOV D5, R2,R2 \n" + " VMOV D6, R2,R2 \n" + " VMOV D7, R2,R2 \n" + " VMOV D8, R2,R2 \n" + " VMOV D9, R2,R2 \n" + " VMOV D10,R2,R2 \n" + " VMOV D11,R2,R2 \n" + " VMOV D12,R2,R2 \n" + " VMOV D13,R2,R2 \n" + " VMOV D14,R2,R2 \n" + " VMOV D15,R2,R2 \n" + +#if (defined(__ARM_NEON) && (__ARM_NEON == 1)) + // Initialise D32 registers to 0 + " VMOV D16,R2,R2 \n" + " VMOV D17,R2,R2 \n" + " VMOV D18,R2,R2 \n" + " VMOV D19,R2,R2 \n" + " VMOV D20,R2,R2 \n" + " VMOV D21,R2,R2 \n" + " VMOV D22,R2,R2 \n" + " VMOV D23,R2,R2 \n" + " VMOV D24,R2,R2 \n" + " VMOV D25,R2,R2 \n" + " VMOV D26,R2,R2 \n" + " VMOV D27,R2,R2 \n" + " VMOV D28,R2,R2 \n" + " VMOV D29,R2,R2 \n" + " VMOV D30,R2,R2 \n" + " VMOV D31,R2,R2 \n" +#endif + : : : "cc", "r2" + ); + + // Initialise FPSCR to a known state + const uint32_t fpscr = __get_FPSCR(); + __set_FPSCR(fpscr & 0x00086060ul); +} + +/*@} end of group CMSIS_Core_intrinsics */ + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_A_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h new file mode 100644 index 000000000000..3ddd0ba79a46 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h @@ -0,0 +1,558 @@ +/* + * Copyright (c) 2017-2018 IAR Systems + * Copyright (c) 2018-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(A) Compiler ICCARM (IAR Compiler for Arm) Header File + */ + +#ifndef __CMSIS_ICCARM_A_H__ +#define __CMSIS_ICCARM_A_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#pragma language=extended + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + + +/* Define compiler macros for CPU architecture, used in CMSIS 5. + */ +#if __ARM_ARCH_7A__ +/* Macro already defined */ +#else + #if defined(__ARM7A__) + #define __ARM_ARCH_7A__ 1 + #endif +#endif + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if __ICCARM_V8 + #define __NO_RETURN __attribute__((__noreturn__)) + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #if __ICCARM_V8 + #define __RESTRICT __restrict + #else + /* Needs IAR language extensions */ + #define __RESTRICT restrict + #endif +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef CMSIS_DEPRECATED + #define CMSIS_DEPRECATED __attribute__((deprecated)) +#endif + +#ifndef __UNALIGNED_UINT16_READ + #pragma language=save + #pragma language=extended + __IAR_FT uint16_t __iar_uint16_read(void const *ptr) + { + return *(__packed uint16_t*)(ptr); + } + #pragma language=restore + #define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE + #pragma language=save + #pragma language=extended + __IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) + { + *(__packed uint16_t*)(ptr) = val;; + } + #pragma language=restore + #define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ + #pragma language=save + #pragma language=extended + __IAR_FT uint32_t __iar_uint32_read(void const *ptr) + { + return *(__packed uint32_t*)(ptr); + } + #pragma language=restore + #define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE + #pragma language=save + #pragma language=extended + __IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) + { + *(__packed uint32_t*)(ptr) = val;; + } + #pragma language=restore + #define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + + +#ifndef __ICCARM_INTRINSICS_VERSION__ + #define __ICCARM_INTRINSICS_VERSION__ 0 +#endif + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_fault_irq __iar_builtin_disable_fiq + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_fault_irq __iar_builtin_enable_fiq + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + #else + #define __get_FPSCR() ( 0 ) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #define __get_CPSR() (__arm_rsr("CPSR")) + #define __get_mode() (__get_CPSR() & 0x1FU) + + #define __set_CPSR(VALUE) (__arm_wsr("CPSR", (VALUE))) + #define __set_mode(VALUE) (__arm_wsr("CPSR_c", (VALUE))) + + + #define __get_FPEXC() (__arm_rsr("FPEXC")) + #define __set_FPEXC(VALUE) (__arm_wsr("FPEXC", VALUE)) + + #define __get_CP(cp, op1, RT, CRn, CRm, op2) \ + ((RT) = __arm_rsr("p" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2)) + + #define __set_CP(cp, op1, RT, CRn, CRm, op2) \ + (__arm_wsr("p" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2, (RT))) + + #define __get_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) + + #define __set_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + + #include "cmsis_cp15.h" + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + #define __CLREX __iar_builtin_CLREX + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #define __SSAT __iar_builtin_SSAT + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #define __USAT __iar_builtin_USAT + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if !((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if !((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + #define __get_FPSCR() (0) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __enable_fault_irq __enable_fiq + #define __disable_fault_irq __disable_fiq + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + __IAR_FT void __set_mode(uint32_t mode) + { + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); + } + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM("RRX %0, %1" : "=r"(result) : "r" (value) : "cc"); + return(result); + } + + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + __IAR_FT uint32_t __get_FPEXC(void) + { + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); + #else + return(0); + #endif + } + + __IAR_FT void __set_FPEXC(uint32_t fpexc) + { + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); + #endif + } + + + #define __get_CP(cp, op1, Rt, CRn, CRm, op2) \ + __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) + #define __set_CP(cp, op1, Rt, CRn, CRm, op2) \ + __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) + #define __get_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) + #define __set_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + + #include "cmsis_cp15.h" + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + + +__IAR_FT uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %2 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : "r"(cpsr) : "memory" + ); + return result; +} + +__IAR_FT void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %2 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack), "r"(cpsr) : "memory" + ); +} + +#define __get_mode() (__get_CPSR() & 0x1FU) + +__STATIC_INLINE +void __FPU_Enable(void) +{ + __ASM volatile( + //Permit access to VFP/NEON, registers by modifying CPACR + " MRC p15,0,R1,c1,c0,2 \n" + " ORR R1,R1,#0x00F00000 \n" + " MCR p15,0,R1,c1,c0,2 \n" + + //Ensure that subsequent instructions occur in the context of VFP/NEON access permitted + " ISB \n" + + //Enable VFP/NEON + " VMRS R1,FPEXC \n" + " ORR R1,R1,#0x40000000 \n" + " VMSR FPEXC,R1 \n" + + //Initialise VFP/NEON registers to 0 + " MOV R2,#0 \n" + + //Initialise D16 registers to 0 + " VMOV D0, R2,R2 \n" + " VMOV D1, R2,R2 \n" + " VMOV D2, R2,R2 \n" + " VMOV D3, R2,R2 \n" + " VMOV D4, R2,R2 \n" + " VMOV D5, R2,R2 \n" + " VMOV D6, R2,R2 \n" + " VMOV D7, R2,R2 \n" + " VMOV D8, R2,R2 \n" + " VMOV D9, R2,R2 \n" + " VMOV D10,R2,R2 \n" + " VMOV D11,R2,R2 \n" + " VMOV D12,R2,R2 \n" + " VMOV D13,R2,R2 \n" + " VMOV D14,R2,R2 \n" + " VMOV D15,R2,R2 \n" + +#ifdef __ARM_ADVANCED_SIMD__ + //Initialise D32 registers to 0 + " VMOV D16,R2,R2 \n" + " VMOV D17,R2,R2 \n" + " VMOV D18,R2,R2 \n" + " VMOV D19,R2,R2 \n" + " VMOV D20,R2,R2 \n" + " VMOV D21,R2,R2 \n" + " VMOV D22,R2,R2 \n" + " VMOV D23,R2,R2 \n" + " VMOV D24,R2,R2 \n" + " VMOV D25,R2,R2 \n" + " VMOV D26,R2,R2 \n" + " VMOV D27,R2,R2 \n" + " VMOV D28,R2,R2 \n" + " VMOV D29,R2,R2 \n" + " VMOV D30,R2,R2 \n" + " VMOV D31,R2,R2 \n" +#endif + + //Initialise FPSCR to a known state + " VMRS R1,FPSCR \n" + " MOV32 R2,#0x00086060 \n" //Mask off all bits that do not have to be preserved. Non-preserved bits can/should be zero. + " AND R1,R1,R2 \n" + " VMSR FPSCR,R1 \n" + : : : "cc", "r1", "r2" + ); +} + + + +#undef __IAR_FT +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#endif /* __CMSIS_ICCARM_A_H__ */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h new file mode 100644 index 000000000000..7264fb9367fb --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2017-2020 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(A) Interrupt Controller API Header File + */ + +#ifndef IRQ_CTRL_H_ +#define IRQ_CTRL_H_ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#include + +#ifndef IRQHANDLER_T +#define IRQHANDLER_T +/// Interrupt handler data type +typedef void (*IRQHandler_t) (void); +#endif + +#ifndef IRQN_ID_T +#define IRQN_ID_T +/// Interrupt ID number data type +typedef int32_t IRQn_ID_t; +#endif + +/* Interrupt mode bit-masks */ +#define IRQ_MODE_TRIG_Pos (0U) +#define IRQ_MODE_TRIG_Msk (0x07UL /*<< IRQ_MODE_TRIG_Pos*/) +#define IRQ_MODE_TRIG_LEVEL (0x00UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: level triggered interrupt +#define IRQ_MODE_TRIG_LEVEL_LOW (0x01UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: low level triggered interrupt +#define IRQ_MODE_TRIG_LEVEL_HIGH (0x02UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: high level triggered interrupt +#define IRQ_MODE_TRIG_EDGE (0x04UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: edge triggered interrupt +#define IRQ_MODE_TRIG_EDGE_RISING (0x05UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: rising edge triggered interrupt +#define IRQ_MODE_TRIG_EDGE_FALLING (0x06UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: falling edge triggered interrupt +#define IRQ_MODE_TRIG_EDGE_BOTH (0x07UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: rising and falling edge triggered interrupt + +#define IRQ_MODE_TYPE_Pos (3U) +#define IRQ_MODE_TYPE_Msk (0x01UL << IRQ_MODE_TYPE_Pos) +#define IRQ_MODE_TYPE_IRQ (0x00UL << IRQ_MODE_TYPE_Pos) ///< Type: interrupt source triggers CPU IRQ line +#define IRQ_MODE_TYPE_FIQ (0x01UL << IRQ_MODE_TYPE_Pos) ///< Type: interrupt source triggers CPU FIQ line + +#define IRQ_MODE_DOMAIN_Pos (4U) +#define IRQ_MODE_DOMAIN_Msk (0x01UL << IRQ_MODE_DOMAIN_Pos) +#define IRQ_MODE_DOMAIN_NONSECURE (0x00UL << IRQ_MODE_DOMAIN_Pos) ///< Domain: interrupt is targeting non-secure domain +#define IRQ_MODE_DOMAIN_SECURE (0x01UL << IRQ_MODE_DOMAIN_Pos) ///< Domain: interrupt is targeting secure domain + +#define IRQ_MODE_CPU_Pos (5U) +#define IRQ_MODE_CPU_Msk (0xFFUL << IRQ_MODE_CPU_Pos) +#define IRQ_MODE_CPU_ALL (0x00UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets all CPUs +#define IRQ_MODE_CPU_0 (0x01UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 0 +#define IRQ_MODE_CPU_1 (0x02UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 1 +#define IRQ_MODE_CPU_2 (0x04UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 2 +#define IRQ_MODE_CPU_3 (0x08UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 3 +#define IRQ_MODE_CPU_4 (0x10UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 4 +#define IRQ_MODE_CPU_5 (0x20UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 5 +#define IRQ_MODE_CPU_6 (0x40UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 6 +#define IRQ_MODE_CPU_7 (0x80UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 7 + +// Encoding in some early GIC implementations +#define IRQ_MODE_MODEL_Pos (13U) +#define IRQ_MODE_MODEL_Msk (0x1UL << IRQ_MODE_MODEL_Pos) +#define IRQ_MODE_MODEL_NN (0x0UL << IRQ_MODE_MODEL_Pos) ///< Corresponding interrupt is handled using the N-N model +#define IRQ_MODE_MODEL_1N (0x1UL << IRQ_MODE_MODEL_Pos) ///< Corresponding interrupt is handled using the 1-N model + +#define IRQ_MODE_ERROR (0x80000000UL) ///< Bit indicating mode value error + +/* Interrupt priority bit-masks */ +#define IRQ_PRIORITY_Msk (0x0000FFFFUL) ///< Interrupt priority value bit-mask +#define IRQ_PRIORITY_ERROR (0x80000000UL) ///< Bit indicating priority value error + +/// Initialize interrupt controller. +/// \return 0 on success, -1 on error. +int32_t IRQ_Initialize (void); + +/// Register interrupt handler. +/// \param[in] irqn interrupt ID number +/// \param[in] handler interrupt handler function address +/// \return 0 on success, -1 on error. +int32_t IRQ_SetHandler (IRQn_ID_t irqn, IRQHandler_t handler); + +/// Get the registered interrupt handler. +/// \param[in] irqn interrupt ID number +/// \return registered interrupt handler function address. +IRQHandler_t IRQ_GetHandler (IRQn_ID_t irqn); + +/// Enable interrupt. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_Enable (IRQn_ID_t irqn); + +/// Disable interrupt. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_Disable (IRQn_ID_t irqn); + +/// Get interrupt enable state. +/// \param[in] irqn interrupt ID number +/// \return 0 - interrupt is disabled, 1 - interrupt is enabled. +uint32_t IRQ_GetEnableState (IRQn_ID_t irqn); + +/// Configure interrupt request mode. +/// \param[in] irqn interrupt ID number +/// \param[in] mode mode configuration +/// \return 0 on success, -1 on error. +int32_t IRQ_SetMode (IRQn_ID_t irqn, uint32_t mode); + +/// Get interrupt mode configuration. +/// \param[in] irqn interrupt ID number +/// \return current interrupt mode configuration with optional IRQ_MODE_ERROR bit set. +uint32_t IRQ_GetMode (IRQn_ID_t irqn); + +/// Get ID number of current interrupt request (IRQ). +/// \return interrupt ID number. +IRQn_ID_t IRQ_GetActiveIRQ (void); + +/// Get ID number of current fast interrupt request (FIQ). +/// \return interrupt ID number. +IRQn_ID_t IRQ_GetActiveFIQ (void); + +/// Signal end of interrupt processing. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_EndOfInterrupt (IRQn_ID_t irqn); + +/// Set interrupt pending flag. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_SetPending (IRQn_ID_t irqn); + +/// Get interrupt pending flag. +/// \param[in] irqn interrupt ID number +/// \return 0 - interrupt is not pending, 1 - interrupt is pending. +uint32_t IRQ_GetPending (IRQn_ID_t irqn); + +/// Clear interrupt pending flag. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_ClearPending (IRQn_ID_t irqn); + +/// Set interrupt priority value. +/// \param[in] irqn interrupt ID number +/// \param[in] priority interrupt priority value +/// \return 0 on success, -1 on error. +int32_t IRQ_SetPriority (IRQn_ID_t irqn, uint32_t priority); + +/// Get interrupt priority. +/// \param[in] irqn interrupt ID number +/// \return current interrupt priority value with optional IRQ_PRIORITY_ERROR bit set. +uint32_t IRQ_GetPriority (IRQn_ID_t irqn); + +/// Set priority masking threshold. +/// \param[in] priority priority masking threshold value +/// \return 0 on success, -1 on error. +int32_t IRQ_SetPriorityMask (uint32_t priority); + +/// Get priority masking threshold +/// \return current priority masking threshold value with optional IRQ_PRIORITY_ERROR bit set. +uint32_t IRQ_GetPriorityMask (void); + +/// Set priority grouping field split point +/// \param[in] bits number of MSB bits included in the group priority field comparison +/// \return 0 on success, -1 on error. +int32_t IRQ_SetPriorityGroupBits (uint32_t bits); + +/// Get priority grouping field split point +/// \return current number of MSB bits included in the group priority field comparison with +/// optional IRQ_PRIORITY_ERROR bit set. +uint32_t IRQ_GetPriorityGroupBits (void); + +#endif // IRQ_CTRL_H_ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h new file mode 100644 index 000000000000..446d21a918fa --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h @@ -0,0 +1,707 @@ +/**************************************************************************//** + * @file cmsis_armclang.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V6.0.0 + * @date 27. July 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_ARMCLANG_H +#define __CMSIS_ARMCLANG_H + +#pragma clang system_header /* treat file as system include file */ + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef CMSIS_DEPRECATED + #define CMSIS_DEPRECATED __attribute__((deprecated)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".bss.noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#endif + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __nop() + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __wfi() + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE() __wfe() + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __sev() + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV(value) __rev(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16(value) __rev16(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REVSH(value) __revsh(value) + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +#define __ROR(op1, op2) __ror(op1, op2) + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT(value) __rbit(value) + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ(value) __clz(value) + + +#if ((__ARM_FEATURE_SAT >= 1) && \ + (__ARM_ARCH_ISA_THUMB >= 2) ) +/* __ARM_FEATURE_SAT is wrong for Armv8-M Baseline devices */ +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(value, sat) __ssat(value, sat) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(value, sat) __usat(value, sat) + +#else /* (__ARM_FEATURE_SAT >= 1) */ +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return (max); + } + else if (val < min) + { + return (min); + } + } + return (val); +} + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return (max); + } + else if (val < 0) + { + return (0U); + } + } + return ((uint32_t)val); +} +#endif /* (__ARM_FEATURE_SAT >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 1) +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 2) +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 2) */ + + +#if (__ARM_FEATURE_LDREX >= 4) +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 4) */ + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : "=r" (result) : "r" (value)); + return (result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return (result); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* (__ARM_ARCH >= 8) */ + +/** @}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} +#endif + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} +#endif + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} +#endif + + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + return (__builtin_arm_get_fpscr()); +#else + return (0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + __builtin_arm_set_fpscr(fpscr); +#else + (void)fpscr; +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + +// Include the profile specific settings: +#if __ARM_ARCH_PROFILE == 'A' + #include "./a-profile/cmsis_armclang_a.h" +#elif __ARM_ARCH_PROFILE == 'R' + #include "./r-profile/cmsis_armclang_r.h" +#elif __ARM_ARCH_PROFILE == 'M' + #include "./m-profile/cmsis_armclang_m.h" +#else + #error "Unknown Arm architecture profile" +#endif + +#endif /* __CMSIS_ARMCLANG_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h new file mode 100644 index 000000000000..872e16c838a0 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h @@ -0,0 +1,708 @@ +/**************************************************************************//** + * @file cmsis_clang.h + * @brief CMSIS compiler LLVM/Clang header file + * @version V6.0.0 + * @date 27. July 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_CLANG_H +#define __CMSIS_CLANG_H + +#pragma clang system_header /* treat file as system include file */ + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef CMSIS_DEPRECATED + #define CMSIS_DEPRECATED __attribute__((deprecated)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#endif + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __nop() + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __wfi() + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE() __wfe() + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __sev() + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV(value) __rev(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16(value) __rev16(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REVSH(value) __revsh(value) + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +#define __ROR(op1, op2) __ror(op1, op2) + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT(value) __rbit(value) + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ(value) __clz(value) + + +#if ((__ARM_FEATURE_SAT >= 1) && \ + (__ARM_ARCH_ISA_THUMB >= 2) ) +/* __ARM_FEATURE_SAT is wrong for Armv8-M Baseline devices */ +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(value, sat) __ssat(value, sat) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(value, sat) __usat(value, sat) + +#else /* (__ARM_FEATURE_SAT >= 1) */ +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return (max); + } + else if (val < min) + { + return (min); + } + } + return (val); +} + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return (max); + } + else if (val < 0) + { + return (0U); + } + } + return ((uint32_t)val); +} +#endif /* (__ARM_FEATURE_SAT >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 1) +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 2) +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 2) */ + + +#if (__ARM_FEATURE_LDREX >= 4) +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 4) */ + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : "=r" (result) : "r" (value)); + return (result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return (result); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* (__ARM_ARCH >= 8) */ + +/** @}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} +#endif + + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + return (__builtin_arm_get_fpscr()); +#else + return (0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + __builtin_arm_set_fpscr(fpscr); +#else + (void)fpscr; +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + +// Include the profile specific settings: +#if __ARM_ARCH_PROFILE == 'A' + #include "./a-profile/cmsis_clang_a.h" +#elif __ARM_ARCH_PROFILE == 'R' + #include "./r-profile/cmsis_clang_r.h" +#elif __ARM_ARCH_PROFILE == 'M' + #include "./m-profile/cmsis_clang_m.h" +#else + #error "Unknown Arm architecture profile" +#endif + +#endif /* __CMSIS_CLANG_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h new file mode 100644 index 000000000000..cf3f5b027ddc --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2009-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Compiler Generic Header File + */ + +#ifndef __CMSIS_COMPILER_H +#define __CMSIS_COMPILER_H + +#include + +/* + * Arm Compiler above 6.10.1 (armclang) + */ +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) + #include "cmsis_armclang.h" + +/* + * TI Arm Clang Compiler (tiarmclang) + */ +#elif defined (__ti__) + #include "cmsis_tiarmclang.h" + + +/* + * LLVM/Clang Compiler + */ +#elif defined ( __clang__ ) + #include "cmsis_clang.h" + + +/* + * GNU Compiler + */ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + + +/* + * IAR Compiler + */ +#elif defined ( __ICCARM__ ) + #if __ARM_ARCH_PROFILE == 'A' + #include "a-profile/cmsis_iccarm_a.h" + #elif __ARM_ARCH_PROFILE == 'R' + #include "r-profile/cmsis_iccarm_r.h" + #elif __ARM_ARCH_PROFILE == 'M' + #include "m-profile/cmsis_iccarm_m.h" + #else + #error "Unknown Arm architecture profile" + #endif + + +/* + * TI Arm Compiler (armcl) + */ +#elif defined ( __TI_ARM__ ) + #include + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __attribute__((packed)) + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed)) + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed)) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) + #endif + #ifndef __RESTRICT + #define __RESTRICT __restrict + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + #ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) + #endif + #ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) + #endif + +/* + * TASKING Compiler + */ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __packed__ + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __packed__ + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __packed__ + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __align(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + #ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) + #endif + #ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) + #endif + +/* + * COSMIC Compiler + */ +#elif defined ( __CSMC__ ) + #include + + #ifndef __ASM + #define __ASM _asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + // NO RETURN is automatically detected hence no warning here + #define __NO_RETURN + #endif + #ifndef __USED + #warning No compiler specific solution for __USED. __USED is ignored. + #define __USED + #endif + #ifndef __WEAK + #define __WEAK __weak + #endif + #ifndef __PACKED + #define __PACKED @packed + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT @packed struct + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION @packed union + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. + #define __ALIGNED(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + #ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) + #endif + #ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) + #endif + +#else + #error Unknown compiler. +#endif + + +#endif /* __CMSIS_COMPILER_H */ + diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h new file mode 100644 index 000000000000..4771466f0654 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h @@ -0,0 +1,1006 @@ +/**************************************************************************//** + * @file cmsis_gcc.h + * @brief CMSIS compiler GCC header file + * @version V6.0.0 + * @date 27. July 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_GCC_H +#define __CMSIS_GCC_H + +#pragma GCC system_header /* treat file as system include file */ + +#include + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef CMSIS_DEPRECATED + #define CMSIS_DEPRECATED __attribute__((deprecated)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#endif + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __ASM volatile ("nop") + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __ASM volatile ("wfi":::"memory") + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE() __ASM volatile ("wfe":::"memory") + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __ASM volatile ("sev") + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +__STATIC_FORCEINLINE void __ISB(void) +{ + __ASM volatile ("isb 0xF":::"memory"); +} + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__STATIC_FORCEINLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); +} + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__STATIC_FORCEINLINE void __DMB(void) +{ + __ASM volatile ("dmb 0xF":::"memory"); +} + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) +{ + return __builtin_bswap32(value); +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return (result); +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) +{ + return (int16_t)__builtin_bswap16(value); +} + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if (__ARM_ARCH_ISA_THUMB >= 2) + __ASM ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return (result); +} + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) +{ + /* Even though __builtin_clz produces a CLZ instruction on ARM, formally + __builtin_clz(0) is undefined behaviour, so handle this case specially. + This guarantees ARM-compatible results if happening to compile on a non-ARM + target, and ensures the compiler doesn't decide to activate any + optimisations using the logic "value was passed to __builtin_clz, so it + is non-zero". + ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a + single CLZ instruction. + */ + if (value == 0U) + { + return 32U; + } + return __builtin_clz(value); +} + + +#if (__ARM_FEATURE_SAT >= 1) +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(value, sat) __ssat(value, sat) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(value, sat) __usat(value, sat) + +#else /* (__ARM_FEATURE_SAT >= 1) */ +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return (max); + } + else if (val < min) + { + return (min); + } + } + return (val); +} + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return (max); + } + else if (val < 0) + { + return (0U); + } + } + return ((uint32_t)val); +} +#endif /* (__ARM_FEATURE_SAT >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 1) +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +__STATIC_FORCEINLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return (result); +} +#endif /* (__ARM_FEATURE_LDREX >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 2) +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return (result); +} +#endif /* (__ARM_FEATURE_LDREX >= 2) */ + + +#if (__ARM_FEATURE_LDREX >= 4) +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return (result); +} + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return (result); +} +#endif /* (__ARM_FEATURE_LDREX >= 4) */ + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : "=r" (result) : "r" (value)); + return (result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return (result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return (result); +} + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return (result); +} + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return (result); +} + +#endif /* (__ARM_ARCH >= 8) */ + +/** @}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + +#if (__ARM_ARCH_ISA_THUMB >= 2) + /** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ + __STATIC_FORCEINLINE void __enable_fault_irq(void) + { + __ASM volatile ("cpsie f" : : : "memory"); + } + + + /** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ + __STATIC_FORCEINLINE void __disable_fault_irq(void) + { + __ASM volatile ("cpsid f" : : : "memory"); + } +#endif + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + return (__builtin_arm_get_fpscr()); +#else + return (0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + __builtin_arm_set_fpscr(fpscr); +#else + (void)fpscr; +#endif +} + + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + #define __SADD8 __sadd8 + #define __QADD8 __qadd8 + #define __SHADD8 __shadd8 + #define __UADD8 __uadd8 + #define __UQADD8 __uqadd8 + #define __UHADD8 __uhadd8 + #define __SSUB8 __ssub8 + #define __QSUB8 __qsub8 + #define __SHSUB8 __shsub8 + #define __USUB8 __usub8 + #define __UQSUB8 __uqsub8 + #define __UHSUB8 __uhsub8 + #define __SADD16 __sadd16 + #define __QADD16 __qadd16 + #define __SHADD16 __shadd16 + #define __UADD16 __uadd16 + #define __UQADD16 __uqadd16 + #define __UHADD16 __uhadd16 + #define __SSUB16 __ssub16 + #define __QSUB16 __qsub16 + #define __SHSUB16 __shsub16 + #define __USUB16 __usub16 + #define __UQSUB16 __uqsub16 + #define __UHSUB16 __uhsub16 + #define __SASX __sasx + #define __QASX __qasx + #define __SHASX __shasx + #define __UASX __uasx + #define __UQASX __uqasx + #define __UHASX __uhasx + #define __SSAX __ssax + #define __QSAX __qsax + #define __SHSAX __shsax + #define __USAX __usax + #define __UQSAX __uqsax + #define __UHSAX __uhsax + #define __USAD8 __usad8 + #define __USADA8 __usada8 + #define __SSAT16 __ssat16 + #define __USAT16 __usat16 + #define __UXTB16 __uxtb16 + #define __UXTAB16 __uxtab16 + #define __SXTB16 __sxtb16 + #define __SXTAB16 __sxtab16 + #define __SMUAD __smuad + #define __SMUADX __smuadx + #define __SMLAD __smlad + #define __SMLADX __smladx + #define __SMLALD __smlald + #define __SMLALDX __smlaldx + #define __SMUSD __smusd + #define __SMUSDX __smusdx + #define __SMLSD __smlsd + #define __SMLSDX __smlsdx + #define __SMLSLD __smlsld + #define __SMLSLDX __smlsldx + #define __SEL __sel + #define __QADD __qadd + #define __QSUB __qsub + + #define __PKHBT(ARG1,ARG2,ARG3) \ + __extension__ \ + ({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + + #define __PKHTB(ARG1,ARG2,ARG3) \ + __extension__ \ + ({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + + __STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) + { + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) + { + __ASM volatile("sxtb16 %0, %1, ROR %2" : "=r"(result) : "r"(op1), "i"(rotate)); + } + else + { + result = __SXTB16(__ROR(op1, rotate)); + } + return result; + } + + __STATIC_FORCEINLINE uint32_t __SXTAB16_RORn(uint32_t op1, uint32_t op2, uint32_t rotate) + { + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) + { + __ASM volatile("sxtab16 %0, %1, %2, ROR %3" : "=r"(result) : "r"(op1), "r"(op2), "i"(rotate)); + } + else + { + result = __SXTAB16(op1, __ROR(op2, rotate)); + } + return result; + } + + __STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) + { + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); + } +#endif /* (__ARM_FEATURE_DSP == 1) */ +/** @} end of group CMSIS_SIMD_intrinsics */ + +// Include the profile specific settings: +#if __ARM_ARCH_PROFILE == 'A' + #include "a-profile/cmsis_gcc_a.h" +#elif __ARM_ARCH_PROFILE == 'R' + #include "r-profile/cmsis_gcc_r.h" +#elif __ARM_ARCH_PROFILE == 'M' + #include "m-profile/cmsis_gcc_m.h" +#else + #error "Unknown Arm architecture profile" +#endif + +#endif /* __CMSIS_GCC_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h new file mode 100644 index 000000000000..849a8a4a15d3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2009-2023 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Core Version Definitions + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CMSIS_VERSION_H +#define __CMSIS_VERSION_H + +/* CMSIS-Core(M) Version definitions */ +#define __CM_CMSIS_VERSION_MAIN ( 6U) /*!< \brief [31:16] CMSIS-Core(M) main version */ +#define __CM_CMSIS_VERSION_SUB ( 1U) /*!< \brief [15:0] CMSIS-Core(M) sub version */ +#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ + __CM_CMSIS_VERSION_SUB ) /*!< \brief CMSIS Core(M) version number */ + +/* CMSIS-Core(A) Version definitions */ +#define __CA_CMSIS_VERSION_MAIN ( 6U) /*!< \brief [31:16] CMSIS-Core(A) main version */ +#define __CA_CMSIS_VERSION_SUB ( 1U) /*!< \brief [15:0] CMSIS-Core(A) sub version */ +#define __CA_CMSIS_VERSION ((__CA_CMSIS_VERSION_MAIN << 16U) | \ + __CA_CMSIS_VERSION_SUB ) /*!< \brief CMSIS-Core(A) version number */ + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h new file mode 100644 index 000000000000..df5a95d7148a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h @@ -0,0 +1,3000 @@ +/* + * Copyright (c) 2009-2023 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-A Core Peripheral Access Layer Header File + */ + +#ifndef __CORE_CA_H_GENERIC +#define __CORE_CA_H_GENERIC + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ + +#include "cmsis_version.h" + +/* CMSIS CA definitions */ + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CA_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CA_H_DEPENDANT +#define __CORE_CA_H_DEPENDANT + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + + /* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CA_REV + #define __CA_REV 0x0000U /*!< \brief Contains the core revision for a Cortex-A class device */ + #warning "__CA_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __GIC_PRESENT + #define __GIC_PRESENT 1U + #warning "__GIC_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __TIM_PRESENT + #define __TIM_PRESENT 1U + #warning "__TIM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __L2C_PRESENT + #define __L2C_PRESENT 0U + #warning "__L2C_PRESENT not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +#ifdef __cplusplus + #define __I volatile /*!< \brief Defines 'read only' permissions */ +#else + #define __I volatile const /*!< \brief Defines 'read only' permissions */ +#endif +#define __O volatile /*!< \brief Defines 'write only' permissions */ +#define __IO volatile /*!< \brief Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*!< \brief Defines 'read only' structure member permissions */ +#define __OM volatile /*!< \brief Defines 'write only' structure member permissions */ +#define __IOM volatile /*!< \brief Defines 'read / write' structure member permissions */ +#define RESERVED(N, T) T RESERVED##N; // placeholder struct members used for "reserved" areas + + /******************************************************************************* + * Register Abstraction + Core Register contain: + - CPSR + - CP15 Registers + - L2C-310 Cache Controller + - Generic Interrupt Controller Distributor + - Generic Interrupt Controller Interface + ******************************************************************************/ + +/* Core Register CPSR */ +typedef union +{ + struct + { + uint32_t M:5; /*!< \brief bit: 0.. 4 Mode field */ + uint32_t T:1; /*!< \brief bit: 5 Thumb execution state bit */ + uint32_t F:1; /*!< \brief bit: 6 FIQ mask bit */ + uint32_t I:1; /*!< \brief bit: 7 IRQ mask bit */ + uint32_t A:1; /*!< \brief bit: 8 Asynchronous abort mask bit */ + uint32_t E:1; /*!< \brief bit: 9 Endianness execution state bit */ + uint32_t IT1:6; /*!< \brief bit: 10..15 If-Then execution state bits 2-7 */ + uint32_t GE:4; /*!< \brief bit: 16..19 Greater than or Equal flags */ + RESERVED(0:4, uint32_t) + uint32_t J:1; /*!< \brief bit: 24 Jazelle bit */ + uint32_t IT0:2; /*!< \brief bit: 25..26 If-Then execution state bits 0-1 */ + uint32_t Q:1; /*!< \brief bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< \brief bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< \brief bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< \brief bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< \brief bit: 31 Negative condition code flag */ + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} CPSR_Type; + + + +/* CPSR Register Definitions */ +#define CPSR_N_Pos 31U /*!< \brief CPSR: N Position */ +#define CPSR_N_Msk (1UL << CPSR_N_Pos) /*!< \brief CPSR: N Mask */ + +#define CPSR_Z_Pos 30U /*!< \brief CPSR: Z Position */ +#define CPSR_Z_Msk (1UL << CPSR_Z_Pos) /*!< \brief CPSR: Z Mask */ + +#define CPSR_C_Pos 29U /*!< \brief CPSR: C Position */ +#define CPSR_C_Msk (1UL << CPSR_C_Pos) /*!< \brief CPSR: C Mask */ + +#define CPSR_V_Pos 28U /*!< \brief CPSR: V Position */ +#define CPSR_V_Msk (1UL << CPSR_V_Pos) /*!< \brief CPSR: V Mask */ + +#define CPSR_Q_Pos 27U /*!< \brief CPSR: Q Position */ +#define CPSR_Q_Msk (1UL << CPSR_Q_Pos) /*!< \brief CPSR: Q Mask */ + +#define CPSR_IT0_Pos 25U /*!< \brief CPSR: IT0 Position */ +#define CPSR_IT0_Msk (3UL << CPSR_IT0_Pos) /*!< \brief CPSR: IT0 Mask */ + +#define CPSR_J_Pos 24U /*!< \brief CPSR: J Position */ +#define CPSR_J_Msk (1UL << CPSR_J_Pos) /*!< \brief CPSR: J Mask */ + +#define CPSR_GE_Pos 16U /*!< \brief CPSR: GE Position */ +#define CPSR_GE_Msk (0xFUL << CPSR_GE_Pos) /*!< \brief CPSR: GE Mask */ + +#define CPSR_IT1_Pos 10U /*!< \brief CPSR: IT1 Position */ +#define CPSR_IT1_Msk (0x3FUL << CPSR_IT1_Pos) /*!< \brief CPSR: IT1 Mask */ + +#define CPSR_E_Pos 9U /*!< \brief CPSR: E Position */ +#define CPSR_E_Msk (1UL << CPSR_E_Pos) /*!< \brief CPSR: E Mask */ + +#define CPSR_A_Pos 8U /*!< \brief CPSR: A Position */ +#define CPSR_A_Msk (1UL << CPSR_A_Pos) /*!< \brief CPSR: A Mask */ + +#define CPSR_I_Pos 7U /*!< \brief CPSR: I Position */ +#define CPSR_I_Msk (1UL << CPSR_I_Pos) /*!< \brief CPSR: I Mask */ + +#define CPSR_F_Pos 6U /*!< \brief CPSR: F Position */ +#define CPSR_F_Msk (1UL << CPSR_F_Pos) /*!< \brief CPSR: F Mask */ + +#define CPSR_T_Pos 5U /*!< \brief CPSR: T Position */ +#define CPSR_T_Msk (1UL << CPSR_T_Pos) /*!< \brief CPSR: T Mask */ + +#define CPSR_M_Pos 0U /*!< \brief CPSR: M Position */ +#define CPSR_M_Msk (0x1FUL << CPSR_M_Pos) /*!< \brief CPSR: M Mask */ + +#define CPSR_M_USR 0x10U /*!< \brief CPSR: M User mode (PL0) */ +#define CPSR_M_FIQ 0x11U /*!< \brief CPSR: M Fast Interrupt mode (PL1) */ +#define CPSR_M_IRQ 0x12U /*!< \brief CPSR: M Interrupt mode (PL1) */ +#define CPSR_M_SVC 0x13U /*!< \brief CPSR: M Supervisor mode (PL1) */ +#define CPSR_M_MON 0x16U /*!< \brief CPSR: M Monitor mode (PL1) */ +#define CPSR_M_ABT 0x17U /*!< \brief CPSR: M Abort mode (PL1) */ +#define CPSR_M_HYP 0x1AU /*!< \brief CPSR: M Hypervisor mode (PL2) */ +#define CPSR_M_UND 0x1BU /*!< \brief CPSR: M Undefined mode (PL1) */ +#define CPSR_M_SYS 0x1FU /*!< \brief CPSR: M System mode (PL1) */ + +/* CP15 Register SCTLR */ +typedef union +{ + struct + { + uint32_t M:1; /*!< \brief bit: 0 MMU enable */ + uint32_t A:1; /*!< \brief bit: 1 Alignment check enable */ + uint32_t C:1; /*!< \brief bit: 2 Cache enable */ + RESERVED(0:2, uint32_t) + uint32_t CP15BEN:1; /*!< \brief bit: 5 CP15 barrier enable */ + RESERVED(1:1, uint32_t) + uint32_t B:1; /*!< \brief bit: 7 Endianness model */ + RESERVED(2:2, uint32_t) + uint32_t SW:1; /*!< \brief bit: 10 SWP and SWPB enable */ + uint32_t Z:1; /*!< \brief bit: 11 Branch prediction enable */ + uint32_t I:1; /*!< \brief bit: 12 Instruction cache enable */ + uint32_t V:1; /*!< \brief bit: 13 Vectors bit */ + uint32_t RR:1; /*!< \brief bit: 14 Round Robin select */ + RESERVED(3:2, uint32_t) + uint32_t HA:1; /*!< \brief bit: 17 Hardware Access flag enable */ + RESERVED(4:1, uint32_t) + uint32_t WXN:1; /*!< \brief bit: 19 Write permission implies XN */ + uint32_t UWXN:1; /*!< \brief bit: 20 Unprivileged write permission implies PL1 XN */ + uint32_t FI:1; /*!< \brief bit: 21 Fast interrupts configuration enable */ + uint32_t U:1; /*!< \brief bit: 22 Alignment model */ + RESERVED(5:1, uint32_t) + uint32_t VE:1; /*!< \brief bit: 24 Interrupt Vectors Enable */ + uint32_t EE:1; /*!< \brief bit: 25 Exception Endianness */ + RESERVED(6:1, uint32_t) + uint32_t NMFI:1; /*!< \brief bit: 27 Non-maskable FIQ (NMFI) support */ + uint32_t TRE:1; /*!< \brief bit: 28 TEX remap enable. */ + uint32_t AFE:1; /*!< \brief bit: 29 Access flag enable */ + uint32_t TE:1; /*!< \brief bit: 30 Thumb Exception enable */ + RESERVED(7:1, uint32_t) + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} SCTLR_Type; + +#define SCTLR_TE_Pos 30U /*!< \brief SCTLR: TE Position */ +#define SCTLR_TE_Msk (1UL << SCTLR_TE_Pos) /*!< \brief SCTLR: TE Mask */ + +#define SCTLR_AFE_Pos 29U /*!< \brief SCTLR: AFE Position */ +#define SCTLR_AFE_Msk (1UL << SCTLR_AFE_Pos) /*!< \brief SCTLR: AFE Mask */ + +#define SCTLR_TRE_Pos 28U /*!< \brief SCTLR: TRE Position */ +#define SCTLR_TRE_Msk (1UL << SCTLR_TRE_Pos) /*!< \brief SCTLR: TRE Mask */ + +#define SCTLR_NMFI_Pos 27U /*!< \brief SCTLR: NMFI Position */ +#define SCTLR_NMFI_Msk (1UL << SCTLR_NMFI_Pos) /*!< \brief SCTLR: NMFI Mask */ + +#define SCTLR_EE_Pos 25U /*!< \brief SCTLR: EE Position */ +#define SCTLR_EE_Msk (1UL << SCTLR_EE_Pos) /*!< \brief SCTLR: EE Mask */ + +#define SCTLR_VE_Pos 24U /*!< \brief SCTLR: VE Position */ +#define SCTLR_VE_Msk (1UL << SCTLR_VE_Pos) /*!< \brief SCTLR: VE Mask */ + +#define SCTLR_U_Pos 22U /*!< \brief SCTLR: U Position */ +#define SCTLR_U_Msk (1UL << SCTLR_U_Pos) /*!< \brief SCTLR: U Mask */ + +#define SCTLR_FI_Pos 21U /*!< \brief SCTLR: FI Position */ +#define SCTLR_FI_Msk (1UL << SCTLR_FI_Pos) /*!< \brief SCTLR: FI Mask */ + +#define SCTLR_UWXN_Pos 20U /*!< \brief SCTLR: UWXN Position */ +#define SCTLR_UWXN_Msk (1UL << SCTLR_UWXN_Pos) /*!< \brief SCTLR: UWXN Mask */ + +#define SCTLR_WXN_Pos 19U /*!< \brief SCTLR: WXN Position */ +#define SCTLR_WXN_Msk (1UL << SCTLR_WXN_Pos) /*!< \brief SCTLR: WXN Mask */ + +#define SCTLR_HA_Pos 17U /*!< \brief SCTLR: HA Position */ +#define SCTLR_HA_Msk (1UL << SCTLR_HA_Pos) /*!< \brief SCTLR: HA Mask */ + +#define SCTLR_RR_Pos 14U /*!< \brief SCTLR: RR Position */ +#define SCTLR_RR_Msk (1UL << SCTLR_RR_Pos) /*!< \brief SCTLR: RR Mask */ + +#define SCTLR_V_Pos 13U /*!< \brief SCTLR: V Position */ +#define SCTLR_V_Msk (1UL << SCTLR_V_Pos) /*!< \brief SCTLR: V Mask */ + +#define SCTLR_I_Pos 12U /*!< \brief SCTLR: I Position */ +#define SCTLR_I_Msk (1UL << SCTLR_I_Pos) /*!< \brief SCTLR: I Mask */ + +#define SCTLR_Z_Pos 11U /*!< \brief SCTLR: Z Position */ +#define SCTLR_Z_Msk (1UL << SCTLR_Z_Pos) /*!< \brief SCTLR: Z Mask */ + +#define SCTLR_SW_Pos 10U /*!< \brief SCTLR: SW Position */ +#define SCTLR_SW_Msk (1UL << SCTLR_SW_Pos) /*!< \brief SCTLR: SW Mask */ + +#define SCTLR_B_Pos 7U /*!< \brief SCTLR: B Position */ +#define SCTLR_B_Msk (1UL << SCTLR_B_Pos) /*!< \brief SCTLR: B Mask */ + +#define SCTLR_CP15BEN_Pos 5U /*!< \brief SCTLR: CP15BEN Position */ +#define SCTLR_CP15BEN_Msk (1UL << SCTLR_CP15BEN_Pos) /*!< \brief SCTLR: CP15BEN Mask */ + +#define SCTLR_C_Pos 2U /*!< \brief SCTLR: C Position */ +#define SCTLR_C_Msk (1UL << SCTLR_C_Pos) /*!< \brief SCTLR: C Mask */ + +#define SCTLR_A_Pos 1U /*!< \brief SCTLR: A Position */ +#define SCTLR_A_Msk (1UL << SCTLR_A_Pos) /*!< \brief SCTLR: A Mask */ + +#define SCTLR_M_Pos 0U /*!< \brief SCTLR: M Position */ +#define SCTLR_M_Msk (1UL << SCTLR_M_Pos) /*!< \brief SCTLR: M Mask */ + +/* CP15 Register ACTLR */ +typedef union +{ +#if __CORTEX_A == 5 || defined(DOXYGEN) + /** \brief Structure used for bit access on Cortex-A5 */ + struct + { + uint32_t FW:1; /*!< \brief bit: 0 Cache and TLB maintenance broadcast */ + RESERVED(0:5, uint32_t) + uint32_t SMP:1; /*!< \brief bit: 6 Enables coherent requests to the processor */ + uint32_t EXCL:1; /*!< \brief bit: 7 Exclusive L1/L2 cache control */ + RESERVED(1:2, uint32_t) + uint32_t DODMBS:1; /*!< \brief bit: 10 Disable optimized data memory barrier behavior */ + uint32_t DWBST:1; /*!< \brief bit: 11 AXI data write bursts to Normal memory */ + uint32_t RADIS:1; /*!< \brief bit: 12 L1 Data Cache read-allocate mode disable */ + uint32_t L1PCTL:2; /*!< \brief bit:13..14 L1 Data prefetch control */ + uint32_t BP:2; /*!< \brief bit:16..15 Branch prediction policy */ + uint32_t RSDIS:1; /*!< \brief bit: 17 Disable return stack operation */ + uint32_t BTDIS:1; /*!< \brief bit: 18 Disable indirect Branch Target Address Cache (BTAC) */ + RESERVED(3:9, uint32_t) + uint32_t DBDI:1; /*!< \brief bit: 28 Disable branch dual issue */ + RESERVED(7:3, uint32_t) + } b; +#endif +#if __CORTEX_A == 7 || defined(DOXYGEN) + /** \brief Structure used for bit access on Cortex-A7 */ + struct + { + RESERVED(0:6, uint32_t) + uint32_t SMP:1; /*!< \brief bit: 6 Enables coherent requests to the processor */ + RESERVED(1:3, uint32_t) + uint32_t DODMBS:1; /*!< \brief bit: 10 Disable optimized data memory barrier behavior */ + uint32_t L2RADIS:1; /*!< \brief bit: 11 L2 Data Cache read-allocate mode disable */ + uint32_t L1RADIS:1; /*!< \brief bit: 12 L1 Data Cache read-allocate mode disable */ + uint32_t L1PCTL:2; /*!< \brief bit:13..14 L1 Data prefetch control */ + uint32_t DDVM:1; /*!< \brief bit: 15 Disable Distributed Virtual Memory (DVM) transactions */ + RESERVED(3:12, uint32_t) + uint32_t DDI:1; /*!< \brief bit: 28 Disable dual issue */ + RESERVED(7:3, uint32_t) + } b; +#endif +#if __CORTEX_A == 9 || defined(DOXYGEN) + /** \brief Structure used for bit access on Cortex-A9 */ + struct + { + uint32_t FW:1; /*!< \brief bit: 0 Cache and TLB maintenance broadcast */ + RESERVED(0:1, uint32_t) + uint32_t L1PE:1; /*!< \brief bit: 2 Dside prefetch */ + uint32_t WFLZM:1; /*!< \brief bit: 3 Cache and TLB maintenance broadcast */ + RESERVED(1:2, uint32_t) + uint32_t SMP:1; /*!< \brief bit: 6 Enables coherent requests to the processor */ + uint32_t EXCL:1; /*!< \brief bit: 7 Exclusive L1/L2 cache control */ + uint32_t AOW:1; /*!< \brief bit: 8 Enable allocation in one cache way only */ + uint32_t PARITY:1; /*!< \brief bit: 9 Support for parity checking, if implemented */ + RESERVED(7:22, uint32_t) + } b; +#endif + uint32_t w; /*!< \brief Type used for word access */ +} ACTLR_Type; + +#define ACTLR_DDI_Pos 28U /*!< \brief ACTLR: DDI Position */ +#define ACTLR_DDI_Msk (1UL << ACTLR_DDI_Pos) /*!< \brief ACTLR: DDI Mask */ + +#define ACTLR_DBDI_Pos 28U /*!< \brief ACTLR: DBDI Position */ +#define ACTLR_DBDI_Msk (1UL << ACTLR_DBDI_Pos) /*!< \brief ACTLR: DBDI Mask */ + +#define ACTLR_BTDIS_Pos 18U /*!< \brief ACTLR: BTDIS Position */ +#define ACTLR_BTDIS_Msk (1UL << ACTLR_BTDIS_Pos) /*!< \brief ACTLR: BTDIS Mask */ + +#define ACTLR_RSDIS_Pos 17U /*!< \brief ACTLR: RSDIS Position */ +#define ACTLR_RSDIS_Msk (1UL << ACTLR_RSDIS_Pos) /*!< \brief ACTLR: RSDIS Mask */ + +#define ACTLR_BP_Pos 15U /*!< \brief ACTLR: BP Position */ +#define ACTLR_BP_Msk (3UL << ACTLR_BP_Pos) /*!< \brief ACTLR: BP Mask */ + +#define ACTLR_DDVM_Pos 15U /*!< \brief ACTLR: DDVM Position */ +#define ACTLR_DDVM_Msk (1UL << ACTLR_DDVM_Pos) /*!< \brief ACTLR: DDVM Mask */ + +#define ACTLR_L1PCTL_Pos 13U /*!< \brief ACTLR: L1PCTL Position */ +#define ACTLR_L1PCTL_Msk (3UL << ACTLR_L1PCTL_Pos) /*!< \brief ACTLR: L1PCTL Mask */ + +#define ACTLR_RADIS_Pos 12U /*!< \brief ACTLR: RADIS Position */ +#define ACTLR_RADIS_Msk (1UL << ACTLR_RADIS_Pos) /*!< \brief ACTLR: RADIS Mask */ + +#define ACTLR_L1RADIS_Pos 12U /*!< \brief ACTLR: L1RADIS Position */ +#define ACTLR_L1RADIS_Msk (1UL << ACTLR_L1RADIS_Pos) /*!< \brief ACTLR: L1RADIS Mask */ + +#define ACTLR_DWBST_Pos 11U /*!< \brief ACTLR: DWBST Position */ +#define ACTLR_DWBST_Msk (1UL << ACTLR_DWBST_Pos) /*!< \brief ACTLR: DWBST Mask */ + +#define ACTLR_L2RADIS_Pos 11U /*!< \brief ACTLR: L2RADIS Position */ +#define ACTLR_L2RADIS_Msk (1UL << ACTLR_L2RADIS_Pos) /*!< \brief ACTLR: L2RADIS Mask */ + +#define ACTLR_DODMBS_Pos 10U /*!< \brief ACTLR: DODMBS Position */ +#define ACTLR_DODMBS_Msk (1UL << ACTLR_DODMBS_Pos) /*!< \brief ACTLR: DODMBS Mask */ + +#define ACTLR_PARITY_Pos 9U /*!< \brief ACTLR: PARITY Position */ +#define ACTLR_PARITY_Msk (1UL << ACTLR_PARITY_Pos) /*!< \brief ACTLR: PARITY Mask */ + +#define ACTLR_AOW_Pos 8U /*!< \brief ACTLR: AOW Position */ +#define ACTLR_AOW_Msk (1UL << ACTLR_AOW_Pos) /*!< \brief ACTLR: AOW Mask */ + +#define ACTLR_EXCL_Pos 7U /*!< \brief ACTLR: EXCL Position */ +#define ACTLR_EXCL_Msk (1UL << ACTLR_EXCL_Pos) /*!< \brief ACTLR: EXCL Mask */ + +#define ACTLR_SMP_Pos 6U /*!< \brief ACTLR: SMP Position */ +#define ACTLR_SMP_Msk (1UL << ACTLR_SMP_Pos) /*!< \brief ACTLR: SMP Mask */ + +#define ACTLR_WFLZM_Pos 3U /*!< \brief ACTLR: WFLZM Position */ +#define ACTLR_WFLZM_Msk (1UL << ACTLR_WFLZM_Pos) /*!< \brief ACTLR: WFLZM Mask */ + +#define ACTLR_L1PE_Pos 2U /*!< \brief ACTLR: L1PE Position */ +#define ACTLR_L1PE_Msk (1UL << ACTLR_L1PE_Pos) /*!< \brief ACTLR: L1PE Mask */ + +#define ACTLR_FW_Pos 0U /*!< \brief ACTLR: FW Position */ +#define ACTLR_FW_Msk (1UL << ACTLR_FW_Pos) /*!< \brief ACTLR: FW Mask */ + +/* CP15 Register CPACR */ +typedef union +{ + struct + { + uint32_t CP0:2; /*!< \brief bit: 0..1 Access rights for coprocessor 0 */ + uint32_t CP1:2; /*!< \brief bit: 2..3 Access rights for coprocessor 1 */ + uint32_t CP2:2; /*!< \brief bit: 4..5 Access rights for coprocessor 2 */ + uint32_t CP3:2; /*!< \brief bit: 6..7 Access rights for coprocessor 3 */ + uint32_t CP4:2; /*!< \brief bit: 8..9 Access rights for coprocessor 4 */ + uint32_t CP5:2; /*!< \brief bit:10..11 Access rights for coprocessor 5 */ + uint32_t CP6:2; /*!< \brief bit:12..13 Access rights for coprocessor 6 */ + uint32_t CP7:2; /*!< \brief bit:14..15 Access rights for coprocessor 7 */ + uint32_t CP8:2; /*!< \brief bit:16..17 Access rights for coprocessor 8 */ + uint32_t CP9:2; /*!< \brief bit:18..19 Access rights for coprocessor 9 */ + uint32_t CP10:2; /*!< \brief bit:20..21 Access rights for coprocessor 10 */ + uint32_t CP11:2; /*!< \brief bit:22..23 Access rights for coprocessor 11 */ + uint32_t CP12:2; /*!< \brief bit:24..25 Access rights for coprocessor 11 */ + uint32_t CP13:2; /*!< \brief bit:26..27 Access rights for coprocessor 11 */ + uint32_t TRCDIS:1; /*!< \brief bit: 28 Disable CP14 access to trace registers */ + RESERVED(0:1, uint32_t) + uint32_t D32DIS:1; /*!< \brief bit: 30 Disable use of registers D16-D31 of the VFP register file */ + uint32_t ASEDIS:1; /*!< \brief bit: 31 Disable Advanced SIMD Functionality */ + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} CPACR_Type; + +#define CPACR_ASEDIS_Pos 31U /*!< \brief CPACR: ASEDIS Position */ +#define CPACR_ASEDIS_Msk (1UL << CPACR_ASEDIS_Pos) /*!< \brief CPACR: ASEDIS Mask */ + +#define CPACR_D32DIS_Pos 30U /*!< \brief CPACR: D32DIS Position */ +#define CPACR_D32DIS_Msk (1UL << CPACR_D32DIS_Pos) /*!< \brief CPACR: D32DIS Mask */ + +#define CPACR_TRCDIS_Pos 28U /*!< \brief CPACR: D32DIS Position */ +#define CPACR_TRCDIS_Msk (1UL << CPACR_D32DIS_Pos) /*!< \brief CPACR: D32DIS Mask */ + +#define CPACR_CP_Pos_(n) (n*2U) /*!< \brief CPACR: CPn Position */ +#define CPACR_CP_Msk_(n) (3UL << CPACR_CP_Pos_(n)) /*!< \brief CPACR: CPn Mask */ + +#define CPACR_CP_NA 0U /*!< \brief CPACR CPn field: Access denied. */ +#define CPACR_CP_PL1 1U /*!< \brief CPACR CPn field: Accessible from PL1 only. */ +#define CPACR_CP_FA 3U /*!< \brief CPACR CPn field: Full access. */ + +/* CP15 Register DFSR */ +typedef union +{ + struct + { + uint32_t FS0:4; /*!< \brief bit: 0.. 3 Fault Status bits bit 0-3 */ + uint32_t Domain:4; /*!< \brief bit: 4.. 7 Fault on which domain */ + RESERVED(0:1, uint32_t) + uint32_t LPAE:1; /*!< \brief bit: 9 Large Physical Address Extension */ + uint32_t FS1:1; /*!< \brief bit: 10 Fault Status bits bit 4 */ + uint32_t WnR:1; /*!< \brief bit: 11 Write not Read bit */ + uint32_t ExT:1; /*!< \brief bit: 12 External abort type */ + uint32_t CM:1; /*!< \brief bit: 13 Cache maintenance fault */ + RESERVED(1:18, uint32_t) + } s; /*!< \brief Structure used for bit access in short format */ + struct + { + uint32_t STATUS:5; /*!< \brief bit: 0.. 5 Fault Status bits */ + RESERVED(0:3, uint32_t) + uint32_t LPAE:1; /*!< \brief bit: 9 Large Physical Address Extension */ + RESERVED(1:1, uint32_t) + uint32_t WnR:1; /*!< \brief bit: 11 Write not Read bit */ + uint32_t ExT:1; /*!< \brief bit: 12 External abort type */ + uint32_t CM:1; /*!< \brief bit: 13 Cache maintenance fault */ + RESERVED(2:18, uint32_t) + } l; /*!< \brief Structure used for bit access in long format */ + uint32_t w; /*!< \brief Type used for word access */ +} DFSR_Type; + +#define DFSR_CM_Pos 13U /*!< \brief DFSR: CM Position */ +#define DFSR_CM_Msk (1UL << DFSR_CM_Pos) /*!< \brief DFSR: CM Mask */ + +#define DFSR_Ext_Pos 12U /*!< \brief DFSR: Ext Position */ +#define DFSR_Ext_Msk (1UL << DFSR_Ext_Pos) /*!< \brief DFSR: Ext Mask */ + +#define DFSR_WnR_Pos 11U /*!< \brief DFSR: WnR Position */ +#define DFSR_WnR_Msk (1UL << DFSR_WnR_Pos) /*!< \brief DFSR: WnR Mask */ + +#define DFSR_FS1_Pos 10U /*!< \brief DFSR: FS1 Position */ +#define DFSR_FS1_Msk (1UL << DFSR_FS1_Pos) /*!< \brief DFSR: FS1 Mask */ + +#define DFSR_LPAE_Pos 9U /*!< \brief DFSR: LPAE Position */ +#define DFSR_LPAE_Msk (1UL << DFSR_LPAE_Pos) /*!< \brief DFSR: LPAE Mask */ + +#define DFSR_Domain_Pos 4U /*!< \brief DFSR: Domain Position */ +#define DFSR_Domain_Msk (0xFUL << DFSR_Domain_Pos) /*!< \brief DFSR: Domain Mask */ + +#define DFSR_FS0_Pos 0U /*!< \brief DFSR: FS0 Position */ +#define DFSR_FS0_Msk (0xFUL << DFSR_FS0_Pos) /*!< \brief DFSR: FS0 Mask */ + +#define DFSR_STATUS_Pos 0U /*!< \brief DFSR: STATUS Position */ +#define DFSR_STATUS_Msk (0x3FUL << DFSR_STATUS_Pos) /*!< \brief DFSR: STATUS Mask */ + +/* CP15 Register IFSR */ +typedef union +{ + struct + { + uint32_t FS0:4; /*!< \brief bit: 0.. 3 Fault Status bits bit 0-3 */ + RESERVED(0:5, uint32_t) + uint32_t LPAE:1; /*!< \brief bit: 9 Large Physical Address Extension */ + uint32_t FS1:1; /*!< \brief bit: 10 Fault Status bits bit 4 */ + RESERVED(1:1, uint32_t) + uint32_t ExT:1; /*!< \brief bit: 12 External abort type */ + RESERVED(2:19, uint32_t) + } s; /*!< \brief Structure used for bit access in short format */ + struct + { + uint32_t STATUS:6; /*!< \brief bit: 0.. 5 Fault Status bits */ + RESERVED(0:3, uint32_t) + uint32_t LPAE:1; /*!< \brief bit: 9 Large Physical Address Extension */ + RESERVED(1:2, uint32_t) + uint32_t ExT:1; /*!< \brief bit: 12 External abort type */ + RESERVED(2:19, uint32_t) + } l; /*!< \brief Structure used for bit access in long format */ + uint32_t w; /*!< \brief Type used for word access */ +} IFSR_Type; + +#define IFSR_ExT_Pos 12U /*!< \brief IFSR: ExT Position */ +#define IFSR_ExT_Msk (1UL << IFSR_ExT_Pos) /*!< \brief IFSR: ExT Mask */ + +#define IFSR_FS1_Pos 10U /*!< \brief IFSR: FS1 Position */ +#define IFSR_FS1_Msk (1UL << IFSR_FS1_Pos) /*!< \brief IFSR: FS1 Mask */ + +#define IFSR_LPAE_Pos 9U /*!< \brief IFSR: LPAE Position */ +#define IFSR_LPAE_Msk (0x1UL << IFSR_LPAE_Pos) /*!< \brief IFSR: LPAE Mask */ + +#define IFSR_FS0_Pos 0U /*!< \brief IFSR: FS0 Position */ +#define IFSR_FS0_Msk (0xFUL << IFSR_FS0_Pos) /*!< \brief IFSR: FS0 Mask */ + +#define IFSR_STATUS_Pos 0U /*!< \brief IFSR: STATUS Position */ +#define IFSR_STATUS_Msk (0x3FUL << IFSR_STATUS_Pos) /*!< \brief IFSR: STATUS Mask */ + +/* CP15 Register ISR */ +typedef union +{ + struct + { + RESERVED(0:6, uint32_t) + uint32_t F:1; /*!< \brief bit: 6 FIQ pending bit */ + uint32_t I:1; /*!< \brief bit: 7 IRQ pending bit */ + uint32_t A:1; /*!< \brief bit: 8 External abort pending bit */ + RESERVED(1:23, uint32_t) + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} ISR_Type; + +#define ISR_A_Pos 13U /*!< \brief ISR: A Position */ +#define ISR_A_Msk (1UL << ISR_A_Pos) /*!< \brief ISR: A Mask */ + +#define ISR_I_Pos 12U /*!< \brief ISR: I Position */ +#define ISR_I_Msk (1UL << ISR_I_Pos) /*!< \brief ISR: I Mask */ + +#define ISR_F_Pos 11U /*!< \brief ISR: F Position */ +#define ISR_F_Msk (1UL << ISR_F_Pos) /*!< \brief ISR: F Mask */ + +/* DACR Register */ +#define DACR_D_Pos_(n) (2U*n) /*!< \brief DACR: Dn Position */ +#define DACR_D_Msk_(n) (3UL << DACR_D_Pos_(n)) /*!< \brief DACR: Dn Mask */ +#define DACR_Dn_NOACCESS 0U /*!< \brief DACR Dn field: No access */ +#define DACR_Dn_CLIENT 1U /*!< \brief DACR Dn field: Client */ +#define DACR_Dn_MANAGER 3U /*!< \brief DACR Dn field: Manager */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param [in] field Name of the register bit field. + \param [in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param [in] field Name of the register bit field. + \param [in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + + +/** + \brief Union type to access the L2C_310 Cache Controller. +*/ +#if (defined(__L2C_PRESENT) && (__L2C_PRESENT == 1U)) || \ + defined(DOXYGEN) +typedef struct +{ + __IM uint32_t CACHE_ID; /*!< \brief Offset: 0x0000 (R/ ) Cache ID Register */ + __IM uint32_t CACHE_TYPE; /*!< \brief Offset: 0x0004 (R/ ) Cache Type Register */ + RESERVED(0[0x3e], uint32_t) + __IOM uint32_t CONTROL; /*!< \brief Offset: 0x0100 (R/W) Control Register */ + __IOM uint32_t AUX_CNT; /*!< \brief Offset: 0x0104 (R/W) Auxiliary Control */ + RESERVED(1[0x3e], uint32_t) + __IOM uint32_t EVENT_CONTROL; /*!< \brief Offset: 0x0200 (R/W) Event Counter Control */ + __IOM uint32_t EVENT_COUNTER1_CONF; /*!< \brief Offset: 0x0204 (R/W) Event Counter 1 Configuration */ + __IOM uint32_t EVENT_COUNTER0_CONF; /*!< \brief Offset: 0x0208 (R/W) Event Counter 1 Configuration */ + RESERVED(2[0x2], uint32_t) + __IOM uint32_t INTERRUPT_MASK; /*!< \brief Offset: 0x0214 (R/W) Interrupt Mask */ + __IM uint32_t MASKED_INT_STATUS; /*!< \brief Offset: 0x0218 (R/ ) Masked Interrupt Status */ + __IM uint32_t RAW_INT_STATUS; /*!< \brief Offset: 0x021c (R/ ) Raw Interrupt Status */ + __OM uint32_t INTERRUPT_CLEAR; /*!< \brief Offset: 0x0220 ( /W) Interrupt Clear */ + RESERVED(3[0x143], uint32_t) + __IOM uint32_t CACHE_SYNC; /*!< \brief Offset: 0x0730 (R/W) Cache Sync */ + RESERVED(4[0xf], uint32_t) + __IOM uint32_t INV_LINE_PA; /*!< \brief Offset: 0x0770 (R/W) Invalidate Line By PA */ + RESERVED(6[2], uint32_t) + __IOM uint32_t INV_WAY; /*!< \brief Offset: 0x077c (R/W) Invalidate by Way */ + RESERVED(5[0xc], uint32_t) + __IOM uint32_t CLEAN_LINE_PA; /*!< \brief Offset: 0x07b0 (R/W) Clean Line by PA */ + RESERVED(7[1], uint32_t) + __IOM uint32_t CLEAN_LINE_INDEX_WAY; /*!< \brief Offset: 0x07b8 (R/W) Clean Line by Index/Way */ + __IOM uint32_t CLEAN_WAY; /*!< \brief Offset: 0x07bc (R/W) Clean by Way */ + RESERVED(8[0xc], uint32_t) + __IOM uint32_t CLEAN_INV_LINE_PA; /*!< \brief Offset: 0x07f0 (R/W) Clean and Invalidate Line by PA */ + RESERVED(9[1], uint32_t) + __IOM uint32_t CLEAN_INV_LINE_INDEX_WAY; /*!< \brief Offset: 0x07f8 (R/W) Clean and Invalidate Line by Index/Way */ + __IOM uint32_t CLEAN_INV_WAY; /*!< \brief Offset: 0x07fc (R/W) Clean and Invalidate by Way */ + RESERVED(10[0x40], uint32_t) + __IOM uint32_t DATA_LOCK_0_WAY; /*!< \brief Offset: 0x0900 (R/W) Data Lockdown 0 by Way */ + __IOM uint32_t INST_LOCK_0_WAY; /*!< \brief Offset: 0x0904 (R/W) Instruction Lockdown 0 by Way */ + __IOM uint32_t DATA_LOCK_1_WAY; /*!< \brief Offset: 0x0908 (R/W) Data Lockdown 1 by Way */ + __IOM uint32_t INST_LOCK_1_WAY; /*!< \brief Offset: 0x090c (R/W) Instruction Lockdown 1 by Way */ + __IOM uint32_t DATA_LOCK_2_WAY; /*!< \brief Offset: 0x0910 (R/W) Data Lockdown 2 by Way */ + __IOM uint32_t INST_LOCK_2_WAY; /*!< \brief Offset: 0x0914 (R/W) Instruction Lockdown 2 by Way */ + __IOM uint32_t DATA_LOCK_3_WAY; /*!< \brief Offset: 0x0918 (R/W) Data Lockdown 3 by Way */ + __IOM uint32_t INST_LOCK_3_WAY; /*!< \brief Offset: 0x091c (R/W) Instruction Lockdown 3 by Way */ + __IOM uint32_t DATA_LOCK_4_WAY; /*!< \brief Offset: 0x0920 (R/W) Data Lockdown 4 by Way */ + __IOM uint32_t INST_LOCK_4_WAY; /*!< \brief Offset: 0x0924 (R/W) Instruction Lockdown 4 by Way */ + __IOM uint32_t DATA_LOCK_5_WAY; /*!< \brief Offset: 0x0928 (R/W) Data Lockdown 5 by Way */ + __IOM uint32_t INST_LOCK_5_WAY; /*!< \brief Offset: 0x092c (R/W) Instruction Lockdown 5 by Way */ + __IOM uint32_t DATA_LOCK_6_WAY; /*!< \brief Offset: 0x0930 (R/W) Data Lockdown 5 by Way */ + __IOM uint32_t INST_LOCK_6_WAY; /*!< \brief Offset: 0x0934 (R/W) Instruction Lockdown 5 by Way */ + __IOM uint32_t DATA_LOCK_7_WAY; /*!< \brief Offset: 0x0938 (R/W) Data Lockdown 6 by Way */ + __IOM uint32_t INST_LOCK_7_WAY; /*!< \brief Offset: 0x093c (R/W) Instruction Lockdown 6 by Way */ + RESERVED(11[0x4], uint32_t) + __IOM uint32_t LOCK_LINE_EN; /*!< \brief Offset: 0x0950 (R/W) Lockdown by Line Enable */ + __IOM uint32_t UNLOCK_ALL_BY_WAY; /*!< \brief Offset: 0x0954 (R/W) Unlock All Lines by Way */ + RESERVED(12[0xaa], uint32_t) + __IOM uint32_t ADDRESS_FILTER_START; /*!< \brief Offset: 0x0c00 (R/W) Address Filtering Start */ + __IOM uint32_t ADDRESS_FILTER_END; /*!< \brief Offset: 0x0c04 (R/W) Address Filtering End */ + RESERVED(13[0xce], uint32_t) + __IOM uint32_t DEBUG_CONTROL; /*!< \brief Offset: 0x0f40 (R/W) Debug Control Register */ +} L2C_310_TypeDef; + +#define L2C_310 ((L2C_310_TypeDef *)L2C_310_BASE) /*!< \brief L2C_310 register set access pointer */ +#endif + +#if (defined(__GIC_PRESENT) && (__GIC_PRESENT == 1U)) || \ + defined(DOXYGEN) + +/** \brief Structure type to access the Generic Interrupt Controller Distributor (GICD) +*/ +typedef struct +{ + __IOM uint32_t CTLR; /*!< \brief Offset: 0x000 (R/W) Distributor Control Register */ + __IM uint32_t TYPER; /*!< \brief Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IM uint32_t IIDR; /*!< \brief Offset: 0x008 (R/ ) Distributor Implementer Identification Register */ + RESERVED(0, uint32_t) + __IOM uint32_t STATUSR; /*!< \brief Offset: 0x010 (R/W) Error Reporting Status Register, optional */ + RESERVED(1[11], uint32_t) + __OM uint32_t SETSPI_NSR; /*!< \brief Offset: 0x040 ( /W) Set SPI Register */ + RESERVED(2, uint32_t) + __OM uint32_t CLRSPI_NSR; /*!< \brief Offset: 0x048 ( /W) Clear SPI Register */ + RESERVED(3, uint32_t) + __OM uint32_t SETSPI_SR; /*!< \brief Offset: 0x050 ( /W) Set SPI, Secure Register */ + RESERVED(4, uint32_t) + __OM uint32_t CLRSPI_SR; /*!< \brief Offset: 0x058 ( /W) Clear SPI, Secure Register */ + RESERVED(5[9], uint32_t) + __IOM uint32_t IGROUPR[32]; /*!< \brief Offset: 0x080 (R/W) Interrupt Group Registers */ + __IOM uint32_t ISENABLER[32]; /*!< \brief Offset: 0x100 (R/W) Interrupt Set-Enable Registers */ + __IOM uint32_t ICENABLER[32]; /*!< \brief Offset: 0x180 (R/W) Interrupt Clear-Enable Registers */ + __IOM uint32_t ISPENDR[32]; /*!< \brief Offset: 0x200 (R/W) Interrupt Set-Pending Registers */ + __IOM uint32_t ICPENDR[32]; /*!< \brief Offset: 0x280 (R/W) Interrupt Clear-Pending Registers */ + __IOM uint32_t ISACTIVER[32]; /*!< \brief Offset: 0x300 (R/W) Interrupt Set-Active Registers */ + __IOM uint32_t ICACTIVER[32]; /*!< \brief Offset: 0x380 (R/W) Interrupt Clear-Active Registers */ + __IOM uint32_t IPRIORITYR[255]; /*!< \brief Offset: 0x400 (R/W) Interrupt Priority Registers */ + RESERVED(6, uint32_t) + __IOM uint32_t ITARGETSR[255]; /*!< \brief Offset: 0x800 (R/W) Interrupt Targets Registers */ + RESERVED(7, uint32_t) + __IOM uint32_t ICFGR[64]; /*!< \brief Offset: 0xC00 (R/W) Interrupt Configuration Registers */ + __IOM uint32_t IGRPMODR[32]; /*!< \brief Offset: 0xD00 (R/W) Interrupt Group Modifier Registers */ + RESERVED(8[32], uint32_t) + __IOM uint32_t NSACR[64]; /*!< \brief Offset: 0xE00 (R/W) Non-secure Access Control Registers */ + __OM uint32_t SGIR; /*!< \brief Offset: 0xF00 ( /W) Software Generated Interrupt Register */ + RESERVED(9[3], uint32_t) + __IOM uint32_t CPENDSGIR[4]; /*!< \brief Offset: 0xF10 (R/W) SGI Clear-Pending Registers */ + __IOM uint32_t SPENDSGIR[4]; /*!< \brief Offset: 0xF20 (R/W) SGI Set-Pending Registers */ + RESERVED(10[5236], uint32_t) + __IOM uint64_t IROUTER[988]; /*!< \brief Offset: 0x6100(R/W) Interrupt Routing Registers */ +} GICDistributor_Type; + +#define GICDistributor ((GICDistributor_Type *) GIC_DISTRIBUTOR_BASE ) /*!< \brief GIC Distributor register set access pointer */ + +/* GICDistributor CTLR Register */ +#define GICDistributor_CTLR_EnableGrp0_Pos 0U /*!< GICDistributor CTLR: EnableGrp0 Position */ +#define GICDistributor_CTLR_EnableGrp0_Msk (0x1U /*<< GICDistributor_CTLR_EnableGrp0_Pos*/) /*!< GICDistributor CTLR: EnableGrp0 Mask */ +#define GICDistributor_CTLR_EnableGrp0(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_CTLR_EnableGrp0_Pos*/)) & GICDistributor_CTLR_EnableGrp0_Msk) + +#define GICDistributor_CTLR_EnableGrp1_Pos 1U /*!< GICDistributor CTLR: EnableGrp1 Position */ +#define GICDistributor_CTLR_EnableGrp1_Msk (0x1U << GICDistributor_CTLR_EnableGrp1_Pos) /*!< GICDistributor CTLR: EnableGrp1 Mask */ +#define GICDistributor_CTLR_EnableGrp1(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_EnableGrp1_Pos)) & GICDistributor_CTLR_EnableGrp1_Msk) + +#define GICDistributor_CTLR_ARE_Pos 4U /*!< GICDistributor CTLR: ARE Position */ +#define GICDistributor_CTLR_ARE_Msk (0x1U << GICDistributor_CTLR_ARE_Pos) /*!< GICDistributor CTLR: ARE Mask */ +#define GICDistributor_CTLR_ARE(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_ARE_Pos)) & GICDistributor_CTLR_ARE_Msk) + +#define GICDistributor_CTLR_DC_Pos 6U /*!< GICDistributor CTLR: DC Position */ +#define GICDistributor_CTLR_DC_Msk (0x1U << GICDistributor_CTLR_DC_Pos) /*!< GICDistributor CTLR: DC Mask */ +#define GICDistributor_CTLR_DC(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_DC_Pos)) & GICDistributor_CTLR_DC_Msk) + +#define GICDistributor_CTLR_EINWF_Pos 7U /*!< GICDistributor CTLR: EINWF Position */ +#define GICDistributor_CTLR_EINWF_Msk (0x1U << GICDistributor_CTLR_EINWF_Pos) /*!< GICDistributor CTLR: EINWF Mask */ +#define GICDistributor_CTLR_EINWF(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_EINWF_Pos)) & GICDistributor_CTLR_EINWF_Msk) + +#define GICDistributor_CTLR_RWP_Pos 31U /*!< GICDistributor CTLR: RWP Position */ +#define GICDistributor_CTLR_RWP_Msk (0x1U << GICDistributor_CTLR_RWP_Pos) /*!< GICDistributor CTLR: RWP Mask */ +#define GICDistributor_CTLR_RWP(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_RWP_Pos)) & GICDistributor_CTLR_RWP_Msk) + +/* GICDistributor TYPER Register */ +#define GICDistributor_TYPER_ITLinesNumber_Pos 0U /*!< GICDistributor TYPER: ITLinesNumber Position */ +#define GICDistributor_TYPER_ITLinesNumber_Msk (0x1FU /*<< GICDistributor_TYPER_ITLinesNumber_Pos*/) /*!< GICDistributor TYPER: ITLinesNumber Mask */ +#define GICDistributor_TYPER_ITLinesNumber(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_TYPER_ITLinesNumber_Pos*/)) & GICDistributor_CTLR_ITLinesNumber_Msk) + +#define GICDistributor_TYPER_CPUNumber_Pos 5U /*!< GICDistributor TYPER: CPUNumber Position */ +#define GICDistributor_TYPER_CPUNumber_Msk (0x7U << GICDistributor_TYPER_CPUNumber_Pos) /*!< GICDistributor TYPER: CPUNumber Mask */ +#define GICDistributor_TYPER_CPUNumber(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_TYPER_CPUNumber_Pos)) & GICDistributor_TYPER_CPUNumber_Msk) + +#define GICDistributor_TYPER_SecurityExtn_Pos 10U /*!< GICDistributor TYPER: SecurityExtn Position */ +#define GICDistributor_TYPER_SecurityExtn_Msk (0x1U << GICDistributor_TYPER_SecurityExtn_Pos) /*!< GICDistributor TYPER: SecurityExtn Mask */ +#define GICDistributor_TYPER_SecurityExtn(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_TYPER_SecurityExtn_Pos)) & GICDistributor_TYPER_SecurityExtn_Msk) + +#define GICDistributor_TYPER_LSPI_Pos 11U /*!< GICDistributor TYPER: LSPI Position */ +#define GICDistributor_TYPER_LSPI_Msk (0x1FU << GICDistributor_TYPER_LSPI_Pos) /*!< GICDistributor TYPER: LSPI Mask */ +#define GICDistributor_TYPER_LSPI(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_TYPER_LSPI_Pos)) & GICDistributor_TYPER_LSPI_Msk) + +/* GICDistributor IIDR Register */ +#define GICDistributor_IIDR_Implementer_Pos 0U /*!< GICDistributor IIDR: Implementer Position */ +#define GICDistributor_IIDR_Implementer_Msk (0xFFFU /*<< GICDistributor_IIDR_Implementer_Pos*/) /*!< GICDistributor IIDR: Implementer Mask */ +#define GICDistributor_IIDR_Implementer(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_IIDR_Implementer_Pos*/)) & GICDistributor_IIDR_Implementer_Msk) + +#define GICDistributor_IIDR_Revision_Pos 12U /*!< GICDistributor IIDR: Revision Position */ +#define GICDistributor_IIDR_Revision_Msk (0xFU << GICDistributor_IIDR_Revision_Pos) /*!< GICDistributor IIDR: Revision Mask */ +#define GICDistributor_IIDR_Revision(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_IIDR_Revision_Pos)) & GICDistributor_IIDR_Revision_Msk) + +#define GICDistributor_IIDR_Variant_Pos 16U /*!< GICDistributor IIDR: Variant Position */ +#define GICDistributor_IIDR_Variant_Msk (0xFU << GICDistributor_IIDR_Variant_Pos) /*!< GICDistributor IIDR: Variant Mask */ +#define GICDistributor_IIDR_Variant(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_IIDR_Variant_Pos)) & GICDistributor_IIDR_Variant_Msk) + +#define GICDistributor_IIDR_ProductID_Pos 24U /*!< GICDistributor IIDR: ProductID Position */ +#define GICDistributor_IIDR_ProductID_Msk (0xFFU << GICDistributor_IIDR_ProductID_Pos) /*!< GICDistributor IIDR: ProductID Mask */ +#define GICDistributor_IIDR_ProductID(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_IIDR_ProductID_Pos)) & GICDistributor_IIDR_ProductID_Msk) + +/* GICDistributor STATUSR Register */ +#define GICDistributor_STATUSR_RRD_Pos 0U /*!< GICDistributor STATUSR: RRD Position */ +#define GICDistributor_STATUSR_RRD_Msk (0x1U /*<< GICDistributor_STATUSR_RRD_Pos*/) /*!< GICDistributor STATUSR: RRD Mask */ +#define GICDistributor_STATUSR_RRD(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_STATUSR_RRD_Pos*/)) & GICDistributor_STATUSR_RRD_Msk) + +#define GICDistributor_STATUSR_WRD_Pos 1U /*!< GICDistributor STATUSR: WRD Position */ +#define GICDistributor_STATUSR_WRD_Msk (0x1U << GICDistributor_STATUSR_WRD_Pos) /*!< GICDistributor STATUSR: WRD Mask */ +#define GICDistributor_STATUSR_WRD(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_STATUSR_WRD_Pos)) & GICDistributor_STATUSR_WRD_Msk) + +#define GICDistributor_STATUSR_RWOD_Pos 2U /*!< GICDistributor STATUSR: RWOD Position */ +#define GICDistributor_STATUSR_RWOD_Msk (0x1U << GICDistributor_STATUSR_RWOD_Pos) /*!< GICDistributor STATUSR: RWOD Mask */ +#define GICDistributor_STATUSR_RWOD(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_STATUSR_RWOD_Pos)) & GICDistributor_STATUSR_RWOD_Msk) + +#define GICDistributor_STATUSR_WROD_Pos 3U /*!< GICDistributor STATUSR: WROD Position */ +#define GICDistributor_STATUSR_WROD_Msk (0x1U << GICDistributor_STATUSR_WROD_Pos) /*!< GICDistributor STATUSR: WROD Mask */ +#define GICDistributor_STATUSR_WROD(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_STATUSR_WROD_Pos)) & GICDistributor_STATUSR_WROD_Msk) + +/* GICDistributor SETSPI_NSR Register */ +#define GICDistributor_SETSPI_NSR_INTID_Pos 0U /*!< GICDistributor SETSPI_NSR: INTID Position */ +#define GICDistributor_SETSPI_NSR_INTID_Msk (0x3FFU /*<< GICDistributor_SETSPI_NSR_INTID_Pos*/) /*!< GICDistributor SETSPI_NSR: INTID Mask */ +#define GICDistributor_SETSPI_NSR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_SETSPI_NSR_INTID_Pos*/)) & GICDistributor_SETSPI_NSR_INTID_Msk) + +/* GICDistributor CLRSPI_NSR Register */ +#define GICDistributor_CLRSPI_NSR_INTID_Pos 0U /*!< GICDistributor CLRSPI_NSR: INTID Position */ +#define GICDistributor_CLRSPI_NSR_INTID_Msk (0x3FFU /*<< GICDistributor_CLRSPI_NSR_INTID_Pos*/) /*!< GICDistributor CLRSPI_NSR: INTID Mask */ +#define GICDistributor_CLRSPI_NSR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_CLRSPI_NSR_INTID_Pos*/)) & GICDistributor_CLRSPI_NSR_INTID_Msk) + +/* GICDistributor SETSPI_SR Register */ +#define GICDistributor_SETSPI_SR_INTID_Pos 0U /*!< GICDistributor SETSPI_SR: INTID Position */ +#define GICDistributor_SETSPI_SR_INTID_Msk (0x3FFU /*<< GICDistributor_SETSPI_SR_INTID_Pos*/) /*!< GICDistributor SETSPI_SR: INTID Mask */ +#define GICDistributor_SETSPI_SR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_SETSPI_SR_INTID_Pos*/)) & GICDistributor_SETSPI_SR_INTID_Msk) + +/* GICDistributor CLRSPI_SR Register */ +#define GICDistributor_CLRSPI_SR_INTID_Pos 0U /*!< GICDistributor CLRSPI_SR: INTID Position */ +#define GICDistributor_CLRSPI_SR_INTID_Msk (0x3FFU /*<< GICDistributor_CLRSPI_SR_INTID_Pos*/) /*!< GICDistributor CLRSPI_SR: INTID Mask */ +#define GICDistributor_CLRSPI_SR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_CLRSPI_SR_INTID_Pos*/)) & GICDistributor_CLRSPI_SR_INTID_Msk) + +/* GICDistributor ITARGETSR Register */ +#define GICDistributor_ITARGETSR_CPU0_Pos 0U /*!< GICDistributor ITARGETSR: CPU0 Position */ +#define GICDistributor_ITARGETSR_CPU0_Msk (0x1U /*<< GICDistributor_ITARGETSR_CPU0_Pos*/) /*!< GICDistributor ITARGETSR: CPU0 Mask */ +#define GICDistributor_ITARGETSR_CPU0(x) (((uint8_t)(((uint8_t)(x)) /*<< GICDistributor_ITARGETSR_CPU0_Pos*/)) & GICDistributor_ITARGETSR_CPU0_Msk) + +#define GICDistributor_ITARGETSR_CPU1_Pos 1U /*!< GICDistributor ITARGETSR: CPU1 Position */ +#define GICDistributor_ITARGETSR_CPU1_Msk (0x1U << GICDistributor_ITARGETSR_CPU1_Pos) /*!< GICDistributor ITARGETSR: CPU1 Mask */ +#define GICDistributor_ITARGETSR_CPU1(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU1_Pos)) & GICDistributor_ITARGETSR_CPU1_Msk) + +#define GICDistributor_ITARGETSR_CPU2_Pos 2U /*!< GICDistributor ITARGETSR: CPU2 Position */ +#define GICDistributor_ITARGETSR_CPU2_Msk (0x1U << GICDistributor_ITARGETSR_CPU2_Pos) /*!< GICDistributor ITARGETSR: CPU2 Mask */ +#define GICDistributor_ITARGETSR_CPU2(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU2_Pos)) & GICDistributor_ITARGETSR_CPU2_Msk) + +#define GICDistributor_ITARGETSR_CPU3_Pos 3U /*!< GICDistributor ITARGETSR: CPU3 Position */ +#define GICDistributor_ITARGETSR_CPU3_Msk (0x1U << GICDistributor_ITARGETSR_CPU3_Pos) /*!< GICDistributor ITARGETSR: CPU3 Mask */ +#define GICDistributor_ITARGETSR_CPU3(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU3_Pos)) & GICDistributor_ITARGETSR_CPU3_Msk) + +#define GICDistributor_ITARGETSR_CPU4_Pos 4U /*!< GICDistributor ITARGETSR: CPU4 Position */ +#define GICDistributor_ITARGETSR_CPU4_Msk (0x1U << GICDistributor_ITARGETSR_CPU4_Pos) /*!< GICDistributor ITARGETSR: CPU4 Mask */ +#define GICDistributor_ITARGETSR_CPU4(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU4_Pos)) & GICDistributor_ITARGETSR_CPU4_Msk) + +#define GICDistributor_ITARGETSR_CPU5_Pos 5U /*!< GICDistributor ITARGETSR: CPU5 Position */ +#define GICDistributor_ITARGETSR_CPU5_Msk (0x1U << GICDistributor_ITARGETSR_CPU5_Pos) /*!< GICDistributor ITARGETSR: CPU5 Mask */ +#define GICDistributor_ITARGETSR_CPU5(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU5_Pos)) & GICDistributor_ITARGETSR_CPU5_Msk) + +#define GICDistributor_ITARGETSR_CPU6_Pos 6U /*!< GICDistributor ITARGETSR: CPU6 Position */ +#define GICDistributor_ITARGETSR_CPU6_Msk (0x1U << GICDistributor_ITARGETSR_CPU6_Pos) /*!< GICDistributor ITARGETSR: CPU6 Mask */ +#define GICDistributor_ITARGETSR_CPU6(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU6_Pos)) & GICDistributor_ITARGETSR_CPU6_Msk) + +#define GICDistributor_ITARGETSR_CPU7_Pos 7U /*!< GICDistributor ITARGETSR: CPU7 Position */ +#define GICDistributor_ITARGETSR_CPU7_Msk (0x1U << GICDistributor_ITARGETSR_CPU7_Pos) /*!< GICDistributor ITARGETSR: CPU7 Mask */ +#define GICDistributor_ITARGETSR_CPU7(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU7_Pos)) & GICDistributor_ITARGETSR_CPU7_Msk) + +/* GICDistributor SGIR Register */ +#define GICDistributor_SGIR_INTID_Pos 0U /*!< GICDistributor SGIR: INTID Position */ +#define GICDistributor_SGIR_INTID_Msk (0x7U /*<< GICDistributor_SGIR_INTID_Pos*/) /*!< GICDistributor SGIR: INTID Mask */ +#define GICDistributor_SGIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_SGIR_INTID_Pos*/)) & GICDistributor_SGIR_INTID_Msk) + +#define GICDistributor_SGIR_NSATT_Pos 15U /*!< GICDistributor SGIR: NSATT Position */ +#define GICDistributor_SGIR_NSATT_Msk (0x1U << GICDistributor_SGIR_NSATT_Pos) /*!< GICDistributor SGIR: NSATT Mask */ +#define GICDistributor_SGIR_NSATT(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_SGIR_NSATT_Pos)) & GICDistributor_SGIR_NSATT_Msk) + +#define GICDistributor_SGIR_CPUTargetList_Pos 16U /*!< GICDistributor SGIR: CPUTargetList Position */ +#define GICDistributor_SGIR_CPUTargetList_Msk (0xFFU << GICDistributor_SGIR_CPUTargetList_Pos) /*!< GICDistributor SGIR: CPUTargetList Mask */ +#define GICDistributor_SGIR_CPUTargetList(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_SGIR_CPUTargetList_Pos)) & GICDistributor_SGIR_CPUTargetList_Msk) + +#define GICDistributor_SGIR_TargetFilterList_Pos 24U /*!< GICDistributor SGIR: TargetFilterList Position */ +#define GICDistributor_SGIR_TargetFilterList_Msk (0x3U << GICDistributor_SGIR_TargetFilterList_Pos) /*!< GICDistributor SGIR: TargetFilterList Mask */ +#define GICDistributor_SGIR_TargetFilterList(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_SGIR_TargetFilterList_Pos)) & GICDistributor_SGIR_TargetFilterList_Msk) + +/* GICDistributor IROUTER Register */ +#define GICDistributor_IROUTER_Aff0_Pos 0UL /*!< GICDistributor IROUTER: Aff0 Position */ +#define GICDistributor_IROUTER_Aff0_Msk (0xFFUL /*<< GICDistributor_IROUTER_Aff0_Pos*/) /*!< GICDistributor IROUTER: Aff0 Mask */ +#define GICDistributor_IROUTER_Aff0(x) (((uint64_t)(((uint64_t)(x)) /*<< GICDistributor_IROUTER_Aff0_Pos*/)) & GICDistributor_IROUTER_Aff0_Msk) + +#define GICDistributor_IROUTER_Aff1_Pos 8UL /*!< GICDistributor IROUTER: Aff1 Position */ +#define GICDistributor_IROUTER_Aff1_Msk (0xFFUL << GICDistributor_IROUTER_Aff1_Pos) /*!< GICDistributor IROUTER: Aff1 Mask */ +#define GICDistributor_IROUTER_Aff1(x) (((uint64_t)(((uint64_t)(x)) << GICDistributor_IROUTER_Aff1_Pos)) & GICDistributor_IROUTER_Aff1_Msk) + +#define GICDistributor_IROUTER_Aff2_Pos 16UL /*!< GICDistributor IROUTER: Aff2 Position */ +#define GICDistributor_IROUTER_Aff2_Msk (0xFFUL << GICDistributor_IROUTER_Aff2_Pos) /*!< GICDistributor IROUTER: Aff2 Mask */ +#define GICDistributor_IROUTER_Aff2(x) (((uint64_t)(((uint64_t)(x)) << GICDistributor_IROUTER_Aff2_Pos)) & GICDistributor_IROUTER_Aff2_Msk) + +#define GICDistributor_IROUTER_IRM_Pos 31UL /*!< GICDistributor IROUTER: IRM Position */ +#define GICDistributor_IROUTER_IRM_Msk (0xFFUL << GICDistributor_IROUTER_IRM_Pos) /*!< GICDistributor IROUTER: IRM Mask */ +#define GICDistributor_IROUTER_IRM(x) (((uint64_t)(((uint64_t)(x)) << GICDistributor_IROUTER_IRM_Pos)) & GICDistributor_IROUTER_IRM_Msk) + +#define GICDistributor_IROUTER_Aff3_Pos 32UL /*!< GICDistributor IROUTER: Aff3 Position */ +#define GICDistributor_IROUTER_Aff3_Msk (0xFFUL << GICDistributor_IROUTER_Aff3_Pos) /*!< GICDistributor IROUTER: Aff3 Mask */ +#define GICDistributor_IROUTER_Aff3(x) (((uint64_t)(((uint64_t)(x)) << GICDistributor_IROUTER_Aff3_Pos)) & GICDistributor_IROUTER_Aff3_Msk) + + + +/** \brief Structure type to access the Generic Interrupt Controller Interface (GICC) +*/ +typedef struct +{ + __IOM uint32_t CTLR; /*!< \brief Offset: 0x000 (R/W) CPU Interface Control Register */ + __IOM uint32_t PMR; /*!< \brief Offset: 0x004 (R/W) Interrupt Priority Mask Register */ + __IOM uint32_t BPR; /*!< \brief Offset: 0x008 (R/W) Binary Point Register */ + __IM uint32_t IAR; /*!< \brief Offset: 0x00C (R/ ) Interrupt Acknowledge Register */ + __OM uint32_t EOIR; /*!< \brief Offset: 0x010 ( /W) End Of Interrupt Register */ + __IM uint32_t RPR; /*!< \brief Offset: 0x014 (R/ ) Running Priority Register */ + __IM uint32_t HPPIR; /*!< \brief Offset: 0x018 (R/ ) Highest Priority Pending Interrupt Register */ + __IOM uint32_t ABPR; /*!< \brief Offset: 0x01C (R/W) Aliased Binary Point Register */ + __IM uint32_t AIAR; /*!< \brief Offset: 0x020 (R/ ) Aliased Interrupt Acknowledge Register */ + __OM uint32_t AEOIR; /*!< \brief Offset: 0x024 ( /W) Aliased End Of Interrupt Register */ + __IM uint32_t AHPPIR; /*!< \brief Offset: 0x028 (R/ ) Aliased Highest Priority Pending Interrupt Register */ + __IOM uint32_t STATUSR; /*!< \brief Offset: 0x02C (R/W) Error Reporting Status Register, optional */ + RESERVED(1[40], uint32_t) + __IOM uint32_t APR[4]; /*!< \brief Offset: 0x0D0 (R/W) Active Priority Register */ + __IOM uint32_t NSAPR[4]; /*!< \brief Offset: 0x0E0 (R/W) Non-secure Active Priority Register */ + RESERVED(2[3], uint32_t) + __IM uint32_t IIDR; /*!< \brief Offset: 0x0FC (R/ ) CPU Interface Identification Register */ + RESERVED(3[960], uint32_t) + __OM uint32_t DIR; /*!< \brief Offset: 0x1000( /W) Deactivate Interrupt Register */ +} GICInterface_Type; + +#define GICInterface ((GICInterface_Type *) GIC_INTERFACE_BASE ) /*!< \brief GIC Interface register set access pointer */ + +/* GICInterface CTLR Register */ +#define GICInterface_CTLR_Enable_Pos 0U /*!< PTIM CTLR: Enable Position */ +#define GICInterface_CTLR_Enable_Msk (0x1U /*<< GICInterface_CTLR_Enable_Pos*/) /*!< PTIM CTLR: Enable Mask */ +#define GICInterface_CTLR_Enable(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_CTLR_Enable_Pos*/)) & GICInterface_CTLR_Enable_Msk) + +/* GICInterface PMR Register */ +#define GICInterface_PMR_Priority_Pos 0U /*!< PTIM PMR: Priority Position */ +#define GICInterface_PMR_Priority_Msk (0xFFU /*<< GICInterface_PMR_Priority_Pos*/) /*!< PTIM PMR: Priority Mask */ +#define GICInterface_PMR_Priority(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_PMR_Priority_Pos*/)) & GICInterface_PMR_Priority_Msk) + +/* GICInterface BPR Register */ +#define GICInterface_BPR_Binary_Point_Pos 0U /*!< PTIM BPR: Binary_Point Position */ +#define GICInterface_BPR_Binary_Point_Msk (0x7U /*<< GICInterface_BPR_Binary_Point_Pos*/) /*!< PTIM BPR: Binary_Point Mask */ +#define GICInterface_BPR_Binary_Point(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_BPR_Binary_Point_Pos*/)) & GICInterface_BPR_Binary_Point_Msk) + +/* GICInterface IAR Register */ +#define GICInterface_IAR_INTID_Pos 0U /*!< PTIM IAR: INTID Position */ +#define GICInterface_IAR_INTID_Msk (0xFFFFFFU /*<< GICInterface_IAR_INTID_Pos*/) /*!< PTIM IAR: INTID Mask */ +#define GICInterface_IAR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_IAR_INTID_Pos*/)) & GICInterface_IAR_INTID_Msk) + +/* GICInterface EOIR Register */ +#define GICInterface_EOIR_INTID_Pos 0U /*!< PTIM EOIR: INTID Position */ +#define GICInterface_EOIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_EOIR_INTID_Pos*/) /*!< PTIM EOIR: INTID Mask */ +#define GICInterface_EOIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_EOIR_INTID_Pos*/)) & GICInterface_EOIR_INTID_Msk) + +/* GICInterface RPR Register */ +#define GICInterface_RPR_INTID_Pos 0U /*!< PTIM RPR: INTID Position */ +#define GICInterface_RPR_INTID_Msk (0xFFU /*<< GICInterface_RPR_INTID_Pos*/) /*!< PTIM RPR: INTID Mask */ +#define GICInterface_RPR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_RPR_INTID_Pos*/)) & GICInterface_RPR_INTID_Msk) + +/* GICInterface HPPIR Register */ +#define GICInterface_HPPIR_INTID_Pos 0U /*!< PTIM HPPIR: INTID Position */ +#define GICInterface_HPPIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_HPPIR_INTID_Pos*/) /*!< PTIM HPPIR: INTID Mask */ +#define GICInterface_HPPIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_HPPIR_INTID_Pos*/)) & GICInterface_HPPIR_INTID_Msk) + +/* GICInterface ABPR Register */ +#define GICInterface_ABPR_Binary_Point_Pos 0U /*!< PTIM ABPR: Binary_Point Position */ +#define GICInterface_ABPR_Binary_Point_Msk (0x7U /*<< GICInterface_ABPR_Binary_Point_Pos*/) /*!< PTIM ABPR: Binary_Point Mask */ +#define GICInterface_ABPR_Binary_Point(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_ABPR_Binary_Point_Pos*/)) & GICInterface_ABPR_Binary_Point_Msk) + +/* GICInterface AIAR Register */ +#define GICInterface_AIAR_INTID_Pos 0U /*!< PTIM AIAR: INTID Position */ +#define GICInterface_AIAR_INTID_Msk (0xFFFFFFU /*<< GICInterface_AIAR_INTID_Pos*/) /*!< PTIM AIAR: INTID Mask */ +#define GICInterface_AIAR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_AIAR_INTID_Pos*/)) & GICInterface_AIAR_INTID_Msk) + +/* GICInterface AEOIR Register */ +#define GICInterface_AEOIR_INTID_Pos 0U /*!< PTIM AEOIR: INTID Position */ +#define GICInterface_AEOIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_AEOIR_INTID_Pos*/) /*!< PTIM AEOIR: INTID Mask */ +#define GICInterface_AEOIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_AEOIR_INTID_Pos*/)) & GICInterface_AEOIR_INTID_Msk) + +/* GICInterface AHPPIR Register */ +#define GICInterface_AHPPIR_INTID_Pos 0U /*!< PTIM AHPPIR: INTID Position */ +#define GICInterface_AHPPIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_AHPPIR_INTID_Pos*/) /*!< PTIM AHPPIR: INTID Mask */ +#define GICInterface_AHPPIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_AHPPIR_INTID_Pos*/)) & GICInterface_AHPPIR_INTID_Msk) + +/* GICInterface STATUSR Register */ +#define GICInterface_STATUSR_RRD_Pos 0U /*!< GICInterface STATUSR: RRD Position */ +#define GICInterface_STATUSR_RRD_Msk (0x1U /*<< GICInterface_STATUSR_RRD_Pos*/) /*!< GICInterface STATUSR: RRD Mask */ +#define GICInterface_STATUSR_RRD(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_STATUSR_RRD_Pos*/)) & GICInterface_STATUSR_RRD_Msk) + +#define GICInterface_STATUSR_WRD_Pos 1U /*!< GICInterface STATUSR: WRD Position */ +#define GICInterface_STATUSR_WRD_Msk (0x1U << GICInterface_STATUSR_WRD_Pos) /*!< GICInterface STATUSR: WRD Mask */ +#define GICInterface_STATUSR_WRD(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_STATUSR_WRD_Pos)) & GICInterface_STATUSR_WRD_Msk) + +#define GICInterface_STATUSR_RWOD_Pos 2U /*!< GICInterface STATUSR: RWOD Position */ +#define GICInterface_STATUSR_RWOD_Msk (0x1U << GICInterface_STATUSR_RWOD_Pos) /*!< GICInterface STATUSR: RWOD Mask */ +#define GICInterface_STATUSR_RWOD(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_STATUSR_RWOD_Pos)) & GICInterface_STATUSR_RWOD_Msk) + +#define GICInterface_STATUSR_WROD_Pos 3U /*!< GICInterface STATUSR: WROD Position */ +#define GICInterface_STATUSR_WROD_Msk (0x1U << GICInterface_STATUSR_WROD_Pos) /*!< GICInterface STATUSR: WROD Mask */ +#define GICInterface_STATUSR_WROD(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_STATUSR_WROD_Pos)) & GICInterface_STATUSR_WROD_Msk) + +#define GICInterface_STATUSR_ASV_Pos 4U /*!< GICInterface STATUSR: ASV Position */ +#define GICInterface_STATUSR_ASV_Msk (0x1U << GICInterface_STATUSR_ASV_Pos) /*!< GICInterface STATUSR: ASV Mask */ +#define GICInterface_STATUSR_ASV(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_STATUSR_ASV_Pos)) & GICInterface_STATUSR_ASV_Msk) + +/* GICInterface IIDR Register */ +#define GICInterface_IIDR_Implementer_Pos 0U /*!< GICInterface IIDR: Implementer Position */ +#define GICInterface_IIDR_Implementer_Msk (0xFFFU /*<< GICInterface_IIDR_Implementer_Pos*/) /*!< GICInterface IIDR: Implementer Mask */ +#define GICInterface_IIDR_Implementer(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_IIDR_Implementer_Pos*/)) & GICInterface_IIDR_Implementer_Msk) + +#define GICInterface_IIDR_Revision_Pos 12U /*!< GICInterface IIDR: Revision Position */ +#define GICInterface_IIDR_Revision_Msk (0xFU << GICInterface_IIDR_Revision_Pos) /*!< GICInterface IIDR: Revision Mask */ +#define GICInterface_IIDR_Revision(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_IIDR_Revision_Pos)) & GICInterface_IIDR_Revision_Msk) + +#define GICInterface_IIDR_Arch_version_Pos 16U /*!< GICInterface IIDR: Arch_version Position */ +#define GICInterface_IIDR_Arch_version_Msk (0xFU << GICInterface_IIDR_Arch_version_Pos) /*!< GICInterface IIDR: Arch_version Mask */ +#define GICInterface_IIDR_Arch_version(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_IIDR_Arch_version_Pos)) & GICInterface_IIDR_Arch_version_Msk) + +#define GICInterface_IIDR_ProductID_Pos 20U /*!< GICInterface IIDR: ProductID Position */ +#define GICInterface_IIDR_ProductID_Msk (0xFFFU << GICInterface_IIDR_ProductID_Pos) /*!< GICInterface IIDR: ProductID Mask */ +#define GICInterface_IIDR_ProductID(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_IIDR_ProductID_Pos)) & GICInterface_IIDR_ProductID_Msk) + +/* GICInterface DIR Register */ +#define GICInterface_DIR_INTID_Pos 0U /*!< PTIM DIR: INTID Position */ +#define GICInterface_DIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_DIR_INTID_Pos*/) /*!< PTIM DIR: INTID Mask */ +#define GICInterface_DIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_DIR_INTID_Pos*/)) & GICInterface_DIR_INTID_Msk) +#endif /* (__GIC_PRESENT == 1U) || defined(DOXYGEN) */ + +#if (defined(__TIM_PRESENT) && (__TIM_PRESENT == 1U)) || \ + defined(DOXYGEN) +#if ((__CORTEX_A == 5U) || (__CORTEX_A == 9U)) || defined(DOXYGEN) +/** \brief Structure type to access the Private Timer +*/ +typedef struct +{ + __IOM uint32_t LOAD; //!< \brief Offset: 0x000 (R/W) Private Timer Load Register + __IOM uint32_t COUNTER; //!< \brief Offset: 0x004 (R/W) Private Timer Counter Register + __IOM uint32_t CONTROL; //!< \brief Offset: 0x008 (R/W) Private Timer Control Register + __IOM uint32_t ISR; //!< \brief Offset: 0x00C (R/W) Private Timer Interrupt Status Register + RESERVED(0[4], uint32_t) + __IOM uint32_t WLOAD; //!< \brief Offset: 0x020 (R/W) Watchdog Load Register + __IOM uint32_t WCOUNTER; //!< \brief Offset: 0x024 (R/W) Watchdog Counter Register + __IOM uint32_t WCONTROL; //!< \brief Offset: 0x028 (R/W) Watchdog Control Register + __IOM uint32_t WISR; //!< \brief Offset: 0x02C (R/W) Watchdog Interrupt Status Register + __IOM uint32_t WRESET; //!< \brief Offset: 0x030 (R/W) Watchdog Reset Status Register + __OM uint32_t WDISABLE; //!< \brief Offset: 0x034 ( /W) Watchdog Disable Register +} Timer_Type; +#define PTIM ((Timer_Type *) TIMER_BASE ) /*!< \brief Timer register struct */ + +/* PTIM Control Register */ +#define PTIM_CONTROL_Enable_Pos 0U /*!< PTIM CONTROL: Enable Position */ +#define PTIM_CONTROL_Enable_Msk (0x1U /*<< PTIM_CONTROL_Enable_Pos*/) /*!< PTIM CONTROL: Enable Mask */ +#define PTIM_CONTROL_Enable(x) (((uint32_t)(((uint32_t)(x)) /*<< PTIM_CONTROL_Enable_Pos*/)) & PTIM_CONTROL_Enable_Msk) + +#define PTIM_CONTROL_AutoReload_Pos 1U /*!< PTIM CONTROL: Auto Reload Position */ +#define PTIM_CONTROL_AutoReload_Msk (0x1U << PTIM_CONTROL_AutoReload_Pos) /*!< PTIM CONTROL: Auto Reload Mask */ +#define PTIM_CONTROL_AutoReload(x) (((uint32_t)(((uint32_t)(x)) << PTIM_CONTROL_AutoReload_Pos)) & PTIM_CONTROL_AutoReload_Msk) + +#define PTIM_CONTROL_IRQenable_Pos 2U /*!< PTIM CONTROL: IRQ Enabel Position */ +#define PTIM_CONTROL_IRQenable_Msk (0x1U << PTIM_CONTROL_IRQenable_Pos) /*!< PTIM CONTROL: IRQ Enabel Mask */ +#define PTIM_CONTROL_IRQenable(x) (((uint32_t)(((uint32_t)(x)) << PTIM_CONTROL_IRQenable_Pos)) & PTIM_CONTROL_IRQenable_Msk) + +#define PTIM_CONTROL_Prescaler_Pos 8U /*!< PTIM CONTROL: Prescaler Position */ +#define PTIM_CONTROL_Prescaler_Msk (0xFFU << PTIM_CONTROL_Prescaler_Pos) /*!< PTIM CONTROL: Prescaler Mask */ +#define PTIM_CONTROL_Prescaler(x) (((uint32_t)(((uint32_t)(x)) << PTIM_CONTROL_Prescaler_Pos)) & PTIM_CONTROL_Prescaler_Msk) + +/* WCONTROL Watchdog Control Register */ +#define PTIM_WCONTROL_Enable_Pos 0U /*!< PTIM WCONTROL: Enable Position */ +#define PTIM_WCONTROL_Enable_Msk (0x1U /*<< PTIM_WCONTROL_Enable_Pos*/) /*!< PTIM WCONTROL: Enable Mask */ +#define PTIM_WCONTROL_Enable(x) (((uint32_t)(((uint32_t)(x)) /*<< PTIM_WCONTROL_Enable_Pos*/)) & PTIM_WCONTROL_Enable_Msk) + +#define PTIM_WCONTROL_AutoReload_Pos 1U /*!< PTIM WCONTROL: Auto Reload Position */ +#define PTIM_WCONTROL_AutoReload_Msk (0x1U << PTIM_WCONTROL_AutoReload_Pos) /*!< PTIM WCONTROL: Auto Reload Mask */ +#define PTIM_WCONTROL_AutoReload(x) (((uint32_t)(((uint32_t)(x)) << PTIM_WCONTROL_AutoReload_Pos)) & PTIM_WCONTROL_AutoReload_Msk) + +#define PTIM_WCONTROL_IRQenable_Pos 2U /*!< PTIM WCONTROL: IRQ Enable Position */ +#define PTIM_WCONTROL_IRQenable_Msk (0x1U << PTIM_WCONTROL_IRQenable_Pos) /*!< PTIM WCONTROL: IRQ Enable Mask */ +#define PTIM_WCONTROL_IRQenable(x) (((uint32_t)(((uint32_t)(x)) << PTIM_WCONTROL_IRQenable_Pos)) & PTIM_WCONTROL_IRQenable_Msk) + +#define PTIM_WCONTROL_Mode_Pos 3U /*!< PTIM WCONTROL: Watchdog Mode Position */ +#define PTIM_WCONTROL_Mode_Msk (0x1U << PTIM_WCONTROL_Mode_Pos) /*!< PTIM WCONTROL: Watchdog Mode Mask */ +#define PTIM_WCONTROL_Mode(x) (((uint32_t)(((uint32_t)(x)) << PTIM_WCONTROL_Mode_Pos)) & PTIM_WCONTROL_Mode_Msk) + +#define PTIM_WCONTROL_Presacler_Pos 8U /*!< PTIM WCONTROL: Prescaler Position */ +#define PTIM_WCONTROL_Presacler_Msk (0xFFU << PTIM_WCONTROL_Presacler_Pos) /*!< PTIM WCONTROL: Prescaler Mask */ +#define PTIM_WCONTROL_Presacler(x) (((uint32_t)(((uint32_t)(x)) << PTIM_WCONTROL_Presacler_Pos)) & PTIM_WCONTROL_Presacler_Msk) + +/* WISR Watchdog Interrupt Status Register */ +#define PTIM_WISR_EventFlag_Pos 0U /*!< PTIM WISR: Event Flag Position */ +#define PTIM_WISR_EventFlag_Msk (0x1U /*<< PTIM_WISR_EventFlag_Pos*/) /*!< PTIM WISR: Event Flag Mask */ +#define PTIM_WISR_EventFlag(x) (((uint32_t)(((uint32_t)(x)) /*<< PTIM_WISR_EventFlag_Pos*/)) & PTIM_WISR_EventFlag_Msk) + +/* WRESET Watchdog Reset Status */ +#define PTIM_WRESET_ResetFlag_Pos 0U /*!< PTIM WRESET: Reset Flag Position */ +#define PTIM_WRESET_ResetFlag_Msk (0x1U /*<< PTIM_WRESET_ResetFlag_Pos*/) /*!< PTIM WRESET: Reset Flag Mask */ +#define PTIM_WRESET_ResetFlag(x) (((uint32_t)(((uint32_t)(x)) /*<< PTIM_WRESET_ResetFlag_Pos*/)) & PTIM_WRESET_ResetFlag_Msk) + +#endif /* ((__CORTEX_A == 5U) || (__CORTEX_A == 9U)) || defined(DOXYGEN) */ +#endif /* (__TIM_PRESENT == 1U) || defined(DOXYGEN) */ + + /******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - L1 Cache Functions + - L2C-310 Cache Controller Functions + - PL1 Timer Functions + - GIC Functions + - MMU Functions + ******************************************************************************/ + +/* ########################## L1 Cache functions ################################# */ + +/** \brief Enable Caches by setting I and C bits in SCTLR register. +*/ +__STATIC_FORCEINLINE void L1C_EnableCaches(void) { + __set_SCTLR( __get_SCTLR() | SCTLR_I_Msk | SCTLR_C_Msk); + __ISB(); +} + +/** \brief Disable Caches by clearing I and C bits in SCTLR register. +*/ +__STATIC_FORCEINLINE void L1C_DisableCaches(void) { + __set_SCTLR( __get_SCTLR() & (~SCTLR_I_Msk) & (~SCTLR_C_Msk)); + __ISB(); +} + +/** \brief Enable Branch Prediction by setting Z bit in SCTLR register. +*/ +__STATIC_FORCEINLINE void L1C_EnableBTAC(void) { + __set_SCTLR( __get_SCTLR() | SCTLR_Z_Msk); + __ISB(); +} + +/** \brief Disable Branch Prediction by clearing Z bit in SCTLR register. +*/ +__STATIC_FORCEINLINE void L1C_DisableBTAC(void) { + __set_SCTLR( __get_SCTLR() & (~SCTLR_Z_Msk)); + __ISB(); +} + +/** \brief Invalidate entire branch predictor array +*/ +__STATIC_FORCEINLINE void L1C_InvalidateBTAC(void) { + __set_BPIALL(0); + __DSB(); //ensure completion of the invalidation + __ISB(); //ensure instruction fetch path sees new state +} + +/** \brief Clean instruction cache line by address. +* \param [in] va Pointer to instructions to clear the cache for. +*/ +__STATIC_FORCEINLINE void L1C_InvalidateICacheMVA(void *va) { + __set_ICIMVAC((uint32_t)va); + __DSB(); //ensure completion of the invalidation + __ISB(); //ensure instruction fetch path sees new I cache state +} + +/** \brief Invalidate the whole instruction cache +*/ +__STATIC_FORCEINLINE void L1C_InvalidateICacheAll(void) { + __set_ICIALLU(0); + __DSB(); //ensure completion of the invalidation + __ISB(); //ensure instruction fetch path sees new I cache state +} + +/** \brief Clean data cache line by address. +* \param [in] va Pointer to data to clear the cache for. +*/ +__STATIC_FORCEINLINE void L1C_CleanDCacheMVA(void *va) { + __set_DCCMVAC((uint32_t)va); + __DMB(); //ensure the ordering of data cache maintenance operations and their effects +} + +/** \brief Invalidate data cache line by address. +* \param [in] va Pointer to data to invalidate the cache for. +*/ +__STATIC_FORCEINLINE void L1C_InvalidateDCacheMVA(void *va) { + __set_DCIMVAC((uint32_t)va); + __DMB(); //ensure the ordering of data cache maintenance operations and their effects +} + +/** \brief Clean and Invalidate data cache by address. +* \param [in] va Pointer to data to invalidate the cache for. +*/ +__STATIC_FORCEINLINE void L1C_CleanInvalidateDCacheMVA(void *va) { + __set_DCCIMVAC((uint32_t)va); + __DMB(); //ensure the ordering of data cache maintenance operations and their effects +} + +/** \brief Calculate log2 rounded up +* - log(0) => 0 +* - log(1) => 0 +* - log(2) => 1 +* - log(3) => 2 +* - log(4) => 2 +* - log(5) => 3 +* : : +* - log(16) => 4 +* - log(32) => 5 +* : : +* \param [in] n input value parameter +* \return log2(n) +*/ +__STATIC_FORCEINLINE uint8_t __log2_up(uint32_t n) +{ + if (n < 2U) { + return 0U; + } + uint8_t log = 0U; + uint32_t t = n; + while(t > 1U) + { + log++; + t >>= 1U; + } + if (n & 1U) { log++; } + return log; +} + +/** \brief Apply cache maintenance to given cache level. +* \param [in] level cache level to be maintained +* \param [in] maint 0 - invalidate, 1 - clean, otherwise - invalidate and clean +*/ +__STATIC_FORCEINLINE void __L1C_MaintainDCacheSetWay(uint32_t level, uint32_t maint) +{ + uint32_t Dummy; + uint32_t ccsidr; + uint32_t num_sets; + uint32_t num_ways; + uint32_t shift_way; + uint32_t log2_linesize; + uint8_t log2_num_ways; + + Dummy = level << 1U; + /* set csselr, select ccsidr register */ + __set_CSSELR(Dummy); + /* get current ccsidr register */ + ccsidr = __get_CCSIDR(); + num_sets = ((ccsidr & 0x0FFFE000U) >> 13U) + 1U; + num_ways = ((ccsidr & 0x00001FF8U) >> 3U) + 1U; + log2_linesize = (ccsidr & 0x00000007U) + 2U + 2U; + log2_num_ways = __log2_up(num_ways); + if (log2_num_ways > 32U) { + return; // FATAL ERROR + } + shift_way = 32U - log2_num_ways; + for(int32_t way = num_ways-1; way >= 0; way--) + { + for(int32_t set = num_sets-1; set >= 0; set--) + { + Dummy = (level << 1U) | (((uint32_t)set) << log2_linesize) | (((uint32_t)way) << shift_way); + switch (maint) + { + case 0U: __set_DCISW(Dummy); break; + case 1U: __set_DCCSW(Dummy); break; + default: __set_DCCISW(Dummy); break; + } + } + } + __DMB(); +} + +/** \brief Clean and Invalidate the entire data or unified cache +* \param [in] op 0 - invalidate, 1 - clean, otherwise - invalidate and clean +*/ +__STATIC_FORCEINLINE void L1C_CleanInvalidateCache(uint32_t op) { + uint32_t clidr; + uint32_t cache_type; + clidr = __get_CLIDR(); + for(uint32_t i = 0U; i<7U; i++) + { + cache_type = (clidr >> i*3U) & 0x7UL; + if ((cache_type >= 2U) && (cache_type <= 4U)) + { + __L1C_MaintainDCacheSetWay(i, op); + } + } +} + +/** \brief Invalidate the whole data cache. +*/ +__STATIC_FORCEINLINE void L1C_InvalidateDCacheAll(void) { + L1C_CleanInvalidateCache(0); +} + +/** \brief Clean the whole data cache. + */ +__STATIC_FORCEINLINE void L1C_CleanDCacheAll(void) { + L1C_CleanInvalidateCache(1); +} + +/** \brief Clean and invalidate the whole data cache. + */ +__STATIC_FORCEINLINE void L1C_CleanInvalidateDCacheAll(void) { + L1C_CleanInvalidateCache(2); +} + +/* ########################## L2 Cache functions ################################# */ +#if (defined(__L2C_PRESENT) && (__L2C_PRESENT == 1U)) || \ + defined(DOXYGEN) +/** \brief Cache Sync operation by writing CACHE_SYNC register. +*/ +__STATIC_INLINE void L2C_Sync(void) +{ + L2C_310->CACHE_SYNC = 0x0; +} + +/** \brief Read cache controller cache ID from CACHE_ID register. + * \return L2C_310_TypeDef::CACHE_ID + */ +__STATIC_INLINE int L2C_GetID (void) +{ + return L2C_310->CACHE_ID; +} + +/** \brief Read cache controller cache type from CACHE_TYPE register. +* \return L2C_310_TypeDef::CACHE_TYPE +*/ +__STATIC_INLINE int L2C_GetType (void) +{ + return L2C_310->CACHE_TYPE; +} + +/** \brief Invalidate all cache by way +*/ +__STATIC_INLINE void L2C_InvAllByWay (void) +{ + unsigned int assoc; + + if (L2C_310->AUX_CNT & (1U << 16U)) { + assoc = 16U; + } else { + assoc = 8U; + } + + L2C_310->INV_WAY = (1U << assoc) - 1U; + while(L2C_310->INV_WAY & ((1U << assoc) - 1U)); //poll invalidate + + L2C_Sync(); +} + +/** \brief Clean and Invalidate all cache by way +*/ +__STATIC_INLINE void L2C_CleanInvAllByWay (void) +{ + unsigned int assoc; + + if (L2C_310->AUX_CNT & (1U << 16U)) { + assoc = 16U; + } else { + assoc = 8U; + } + + L2C_310->CLEAN_INV_WAY = (1U << assoc) - 1U; + while(L2C_310->CLEAN_INV_WAY & ((1U << assoc) - 1U)); //poll invalidate + + L2C_Sync(); +} + +/** \brief Enable Level 2 Cache +*/ +__STATIC_INLINE void L2C_Enable(void) +{ + L2C_310->CONTROL = 0; + L2C_310->INTERRUPT_CLEAR = 0x000001FFuL; + L2C_310->DEBUG_CONTROL = 0; + L2C_310->DATA_LOCK_0_WAY = 0; + L2C_310->CACHE_SYNC = 0; + L2C_310->CONTROL = 0x01; + L2C_Sync(); +} + +/** \brief Disable Level 2 Cache +*/ +__STATIC_INLINE void L2C_Disable(void) +{ + L2C_310->CONTROL = 0x00; + L2C_Sync(); +} + +/** \brief Invalidate cache by physical address +* \param [in] pa Pointer to data to invalidate cache for. +*/ +__STATIC_INLINE void L2C_InvPa (void *pa) +{ + L2C_310->INV_LINE_PA = (unsigned int)pa; + L2C_Sync(); +} + +/** \brief Clean cache by physical address +* \param [in] pa Pointer to data to invalidate cache for. +*/ +__STATIC_INLINE void L2C_CleanPa (void *pa) +{ + L2C_310->CLEAN_LINE_PA = (unsigned int)pa; + L2C_Sync(); +} + +/** \brief Clean and invalidate cache by physical address +* \param [in] pa Pointer to data to invalidate cache for. +*/ +__STATIC_INLINE void L2C_CleanInvPa (void *pa) +{ + L2C_310->CLEAN_INV_LINE_PA = (unsigned int)pa; + L2C_Sync(); +} +#endif + +/* ########################## GIC functions ###################################### */ +#if (defined(__GIC_PRESENT) && (__GIC_PRESENT == 1U)) || \ + defined(DOXYGEN) + +/** \brief Enable the interrupt distributor using the GIC's CTLR register. +*/ +__STATIC_INLINE void GIC_EnableDistributor(void) +{ + GICDistributor->CTLR |= 1U; +} + +/** \brief Disable the interrupt distributor using the GIC's CTLR register. +*/ +__STATIC_INLINE void GIC_DisableDistributor(void) +{ + GICDistributor->CTLR &=~1U; +} + +/** \brief Read the GIC's TYPER register. +* \return GICDistributor_Type::TYPER +*/ +__STATIC_INLINE uint32_t GIC_DistributorInfo(void) +{ + return (GICDistributor->TYPER); +} + +/** \brief Reads the GIC's IIDR register. +* \return GICDistributor_Type::IIDR +*/ +__STATIC_INLINE uint32_t GIC_DistributorImplementer(void) +{ + return (GICDistributor->IIDR); +} + +/** \brief Sets the GIC's ITARGETSR register for the given interrupt. +* \param [in] IRQn Interrupt to be configured. +* \param [in] cpu_target CPU interfaces to assign this interrupt to. +*/ +__STATIC_INLINE void GIC_SetTarget(IRQn_Type IRQn, uint32_t cpu_target) +{ + uint32_t mask = GICDistributor->ITARGETSR[IRQn / 4U] & ~(0xFFUL << ((IRQn % 4U) * 8U)); + GICDistributor->ITARGETSR[IRQn / 4U] = mask | ((cpu_target & 0xFFUL) << ((IRQn % 4U) * 8U)); +} + +/** \brief Read the GIC's ITARGETSR register. +* \param [in] IRQn Interrupt to acquire the configuration for. +* \return GICDistributor_Type::ITARGETSR +*/ +__STATIC_INLINE uint32_t GIC_GetTarget(IRQn_Type IRQn) +{ + return (GICDistributor->ITARGETSR[IRQn / 4U] >> ((IRQn % 4U) * 8U)) & 0xFFUL; +} + +/** \brief Enable the CPU's interrupt interface. +*/ +__STATIC_INLINE void GIC_EnableInterface(void) +{ + GICInterface->CTLR |= 1U; //enable interface +} + +/** \brief Disable the CPU's interrupt interface. +*/ +__STATIC_INLINE void GIC_DisableInterface(void) +{ + GICInterface->CTLR &=~1U; //disable distributor +} + +/** \brief Read the CPU's IAR register. +* \return GICInterface_Type::IAR +*/ +__STATIC_INLINE IRQn_Type GIC_AcknowledgePending(void) +{ + return (IRQn_Type)(GICInterface->IAR); +} + +/** \brief Writes the given interrupt number to the CPU's EOIR register. +* \param [in] IRQn The interrupt to be signaled as finished. +*/ +__STATIC_INLINE void GIC_EndInterrupt(IRQn_Type IRQn) +{ + GICInterface->EOIR = IRQn; +} + +/** \brief Enables the given interrupt using GIC's ISENABLER register. +* \param [in] IRQn The interrupt to be enabled. +*/ +__STATIC_INLINE void GIC_EnableIRQ(IRQn_Type IRQn) +{ + GICDistributor->ISENABLER[IRQn / 32U] = 1U << (IRQn % 32U); +} + +/** \brief Get interrupt enable status using GIC's ISENABLER register. +* \param [in] IRQn The interrupt to be queried. +* \return 0 - interrupt is not enabled, 1 - interrupt is enabled. +*/ +__STATIC_INLINE uint32_t GIC_GetEnableIRQ(IRQn_Type IRQn) +{ + return (GICDistributor->ISENABLER[IRQn / 32U] >> (IRQn % 32U)) & 1UL; +} + +/** \brief Disables the given interrupt using GIC's ICENABLER register. +* \param [in] IRQn The interrupt to be disabled. +*/ +__STATIC_INLINE void GIC_DisableIRQ(IRQn_Type IRQn) +{ + GICDistributor->ICENABLER[IRQn / 32U] = 1U << (IRQn % 32U); +} + +/** \brief Get interrupt pending status from GIC's ISPENDR register. +* \param [in] IRQn The interrupt to be queried. +* \return 0 - interrupt is not pending, 1 - interrupt is pendig. +*/ +__STATIC_INLINE uint32_t GIC_GetPendingIRQ(IRQn_Type IRQn) +{ + uint32_t pend; + + if (IRQn >= 16U) { + pend = (GICDistributor->ISPENDR[IRQn / 32U] >> (IRQn % 32U)) & 1UL; + } else { + // INTID 0-15 Software Generated Interrupt + pend = (GICDistributor->SPENDSGIR[IRQn / 4U] >> ((IRQn % 4U) * 8U)) & 0xFFUL; + // No CPU identification offered + if (pend != 0U) { + pend = 1U; + } else { + pend = 0U; + } + } + + return (pend); +} + +/** \brief Sets the given interrupt as pending using GIC's ISPENDR register. +* \param [in] IRQn The interrupt to be enabled. +*/ +__STATIC_INLINE void GIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if (IRQn >= 16U) { + GICDistributor->ISPENDR[IRQn / 32U] = 1U << (IRQn % 32U); + } else { + // INTID 0-15 Software Generated Interrupt + // Forward the interrupt to the CPU interface that requested it + GICDistributor->SGIR = (IRQn | 0x02000000U); + } +} + +/** \brief Clears the given interrupt from being pending using GIC's ICPENDR register. +* \param [in] IRQn The interrupt to be enabled. +*/ +__STATIC_INLINE void GIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if (IRQn >= 16U) { + GICDistributor->ICPENDR[IRQn / 32U] = 1U << (IRQn % 32U); + } else { + // INTID 0-15 Software Generated Interrupt + GICDistributor->CPENDSGIR[IRQn / 4U] = 1U << ((IRQn % 4U) * 8U); + } +} + +/** \brief Sets the interrupt configuration using GIC's ICFGR register. +* \param [in] IRQn The interrupt to be configured. +* \param [in] int_config Int_config field value. Bit 0: Reserved (0 - N-N model, 1 - 1-N model for some GIC before v1) +* Bit 1: 0 - level sensitive, 1 - edge triggered +*/ +__STATIC_INLINE void GIC_SetConfiguration(IRQn_Type IRQn, uint32_t int_config) +{ + uint32_t icfgr = GICDistributor->ICFGR[IRQn / 16U]; /* read current register content */ + uint32_t shift = (IRQn % 16U) << 1U; /* calculate shift value */ + + int_config &= 3U; /* only 2 bits are valid */ + icfgr &= (~(3U << shift)); /* clear bits to change */ + icfgr |= ( int_config << shift); /* set new configuration */ + + GICDistributor->ICFGR[IRQn / 16U] = icfgr; /* write new register content */ +} + +/** \brief Get the interrupt configuration from the GIC's ICFGR register. +* \param [in] IRQn Interrupt to acquire the configuration for. +* \return Int_config field value. Bit 0: Reserved (0 - N-N model, 1 - 1-N model for some GIC before v1) +* Bit 1: 0 - level sensitive, 1 - edge triggered +*/ +__STATIC_INLINE uint32_t GIC_GetConfiguration(IRQn_Type IRQn) +{ + return (GICDistributor->ICFGR[IRQn / 16U] >> ((IRQn % 16U) >> 1U)); +} + +/** \brief Set the priority for the given interrupt in the GIC's IPRIORITYR register. +* \param [in] IRQn The interrupt to be configured. +* \param [in] priority The priority for the interrupt, lower values denote higher priorities. +*/ +__STATIC_INLINE void GIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + uint32_t mask = GICDistributor->IPRIORITYR[IRQn / 4U] & ~(0xFFUL << ((IRQn % 4U) * 8U)); + GICDistributor->IPRIORITYR[IRQn / 4U] = mask | ((priority & 0xFFUL) << ((IRQn % 4U) * 8U)); +} + +/** \brief Read the current interrupt priority from GIC's IPRIORITYR register. +* \param [in] IRQn The interrupt to be queried. +*/ +__STATIC_INLINE uint32_t GIC_GetPriority(IRQn_Type IRQn) +{ + return (GICDistributor->IPRIORITYR[IRQn / 4U] >> ((IRQn % 4U) * 8U)) & 0xFFUL; +} + +/** \brief Set the interrupt priority mask using CPU's PMR register. +* \param [in] priority Priority mask to be set. +*/ +__STATIC_INLINE void GIC_SetInterfacePriorityMask(uint32_t priority) +{ + GICInterface->PMR = priority & 0xFFUL; //set priority mask +} + +/** \brief Read the current interrupt priority mask from CPU's PMR register. +* \result GICInterface_Type::PMR +*/ +__STATIC_INLINE uint32_t GIC_GetInterfacePriorityMask(void) +{ + return GICInterface->PMR; +} + +/** \brief Configures the group priority and subpriority split point using CPU's BPR register. +* \param [in] binary_point Amount of bits used as subpriority. +*/ +__STATIC_INLINE void GIC_SetBinaryPoint(uint32_t binary_point) +{ + GICInterface->BPR = binary_point & 7U; //set binary point +} + +/** \brief Read the current group priority and subpriority split point from CPU's BPR register. +* \return GICInterface_Type::BPR +*/ +__STATIC_INLINE uint32_t GIC_GetBinaryPoint(void) +{ + return GICInterface->BPR; +} + +/** \brief Get the status for a given interrupt. +* \param [in] IRQn The interrupt to get status for. +* \return 0 - not pending/active, 1 - pending, 2 - active, 3 - pending and active +*/ +__STATIC_INLINE uint32_t GIC_GetIRQStatus(IRQn_Type IRQn) +{ + uint32_t pending, active; + + active = ((GICDistributor->ISACTIVER[IRQn / 32U]) >> (IRQn % 32U)) & 1UL; + pending = ((GICDistributor->ISPENDR[IRQn / 32U]) >> (IRQn % 32U)) & 1UL; + + return ((active<<1U) | pending); +} + +/** \brief Generate a software interrupt using GIC's SGIR register. +* \param [in] IRQn Software interrupt to be generated. +* \param [in] target_list List of CPUs the software interrupt should be forwarded to. +* \param [in] filter_list Filter to be applied to determine interrupt receivers. +*/ +__STATIC_INLINE void GIC_SendSGI(IRQn_Type IRQn, uint32_t target_list, uint32_t filter_list) +{ + GICDistributor->SGIR = ((filter_list & 3U) << 24U) | ((target_list & 0xFFUL) << 16U) | (IRQn & 0x0FUL); +} + +/** \brief Get the interrupt number of the highest interrupt pending from CPU's HPPIR register. +* \return GICInterface_Type::HPPIR +*/ +__STATIC_INLINE uint32_t GIC_GetHighPendingIRQ(void) +{ + return GICInterface->HPPIR; +} + +/** \brief Provides information about the implementer and revision of the CPU interface. +* \return GICInterface_Type::IIDR +*/ +__STATIC_INLINE uint32_t GIC_GetInterfaceId(void) +{ + return GICInterface->IIDR; +} + +/** \brief Set the interrupt group from the GIC's IGROUPR register. +* \param [in] IRQn The interrupt to be queried. +* \param [in] group Interrupt group number: 0 - Group 0, 1 - Group 1 +*/ +__STATIC_INLINE void GIC_SetGroup(IRQn_Type IRQn, uint32_t group) +{ + uint32_t igroupr = GICDistributor->IGROUPR[IRQn / 32U]; + uint32_t shift = (IRQn % 32U); + + igroupr &= (~(1U << shift)); + igroupr |= ( (group & 1U) << shift); + + GICDistributor->IGROUPR[IRQn / 32U] = igroupr; +} +#define GIC_SetSecurity GIC_SetGroup + +/** \brief Get the interrupt group from the GIC's IGROUPR register. +* \param [in] IRQn The interrupt to be queried. +* \return 0 - Group 0, 1 - Group 1 +*/ +__STATIC_INLINE uint32_t GIC_GetGroup(IRQn_Type IRQn) +{ + return (GICDistributor->IGROUPR[IRQn / 32U] >> (IRQn % 32U)) & 1UL; +} +#define GIC_GetSecurity GIC_GetGroup + +/** \brief Initialize the interrupt distributor. +*/ +__STATIC_INLINE void GIC_DistInit(void) +{ + uint32_t i; + uint32_t num_irq = 0U; + uint32_t priority_field; + + //A reset sets all bits in the IGROUPRs corresponding to the SPIs to 0, + //configuring all of the interrupts as Secure. + + //Disable interrupt forwarding + GIC_DisableDistributor(); + //Get the maximum number of interrupts that the GIC supports + num_irq = 32U * ((GIC_DistributorInfo() & 0x1FU) + 1U); + + /* Priority level is implementation defined. + To determine the number of priority bits implemented write 0xFF to an IPRIORITYR + priority field and read back the value stored.*/ + GIC_SetPriority((IRQn_Type)0U, 0xFFU); + priority_field = GIC_GetPriority((IRQn_Type)0U); + + for (i = 32U; i < num_irq; i++) + { + //Disable the SPI interrupt + GIC_DisableIRQ((IRQn_Type)i); + //Set level-sensitive (and N-N model) + GIC_SetConfiguration((IRQn_Type)i, 0U); + //Set priority + GIC_SetPriority((IRQn_Type)i, priority_field/2U); + //Set target list to CPU0 + GIC_SetTarget((IRQn_Type)i, 1U); + } + //Enable distributor + GIC_EnableDistributor(); +} + +/** \brief Initialize the CPU's interrupt interface +*/ +__STATIC_INLINE void GIC_CPUInterfaceInit(void) +{ + uint32_t i; + uint32_t priority_field; + + //A reset sets all bits in the IGROUPRs corresponding to the SPIs to 0, + //configuring all of the interrupts as Secure. + + //Disable interrupt forwarding + GIC_DisableInterface(); + + /* Priority level is implementation defined. + To determine the number of priority bits implemented write 0xFF to an IPRIORITYR + priority field and read back the value stored.*/ + GIC_SetPriority((IRQn_Type)0U, 0xFFU); + priority_field = GIC_GetPriority((IRQn_Type)0U); + + //SGI and PPI + for (i = 0U; i < 32U; i++) + { + if(i > 15U) { + //Set level-sensitive (and N-N model) for PPI + GIC_SetConfiguration((IRQn_Type)i, 0U); + } + //Disable SGI and PPI interrupts + GIC_DisableIRQ((IRQn_Type)i); + //Set priority + GIC_SetPriority((IRQn_Type)i, priority_field/2U); + } + //Enable interface + GIC_EnableInterface(); + //Set binary point to 0 + GIC_SetBinaryPoint(0U); + //Set priority mask + GIC_SetInterfacePriorityMask(0xFFU); +} + +/** \brief Initialize and enable the GIC +*/ +__STATIC_INLINE void GIC_Enable(void) +{ + GIC_DistInit(); + GIC_CPUInterfaceInit(); //per CPU +} +#endif + +/* ########################## Generic Timer functions ############################ */ +#if (defined(__TIM_PRESENT) && (__TIM_PRESENT == 1U)) || \ + defined(DOXYGEN) + +/* PL1 Physical Timer */ +#if (__CORTEX_A == 7U) || defined(DOXYGEN) + +/** \brief Physical Timer Control register */ +typedef union +{ + struct + { + uint32_t ENABLE:1; /*!< \brief bit: 0 Enables the timer. */ + uint32_t IMASK:1; /*!< \brief bit: 1 Timer output signal mask bit. */ + uint32_t ISTATUS:1; /*!< \brief bit: 2 The status of the timer. */ + RESERVED(0:29, uint32_t) + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} CNTP_CTL_Type; + +/** \brief Configures the frequency the timer shall run at. +* \param [in] value The timer frequency in Hz. +*/ +__STATIC_INLINE void PL1_SetCounterFrequency(uint32_t value) +{ + __set_CNTFRQ(value); + __ISB(); +} + +/** \brief Sets the reset value of the timer. +* \param [in] value The value the timer is loaded with. +*/ +__STATIC_INLINE void PL1_SetLoadValue(uint32_t value) +{ + __set_CNTP_TVAL(value); + __ISB(); +} + +/** \brief Get the current counter value. +* \return Current counter value. +*/ +__STATIC_INLINE uint32_t PL1_GetCurrentValue(void) +{ + return(__get_CNTP_TVAL()); +} + +/** \brief Get the current physical counter value. +* \return Current physical counter value. +*/ +__STATIC_INLINE uint64_t PL1_GetCurrentPhysicalValue(void) +{ + return(__get_CNTPCT()); +} + +/** \brief Set the physical compare value. +* \param [in] value New physical timer compare value. +*/ +__STATIC_INLINE void PL1_SetPhysicalCompareValue(uint64_t value) +{ + __set_CNTP_CVAL(value); + __ISB(); +} + +/** \brief Get the physical compare value. +* \return Physical compare value. +*/ +__STATIC_INLINE uint64_t PL1_GetPhysicalCompareValue(void) +{ + return(__get_CNTP_CVAL()); +} + +/** \brief Configure the timer by setting the control value. +* \param [in] value New timer control value. +*/ +__STATIC_INLINE void PL1_SetControl(uint32_t value) +{ + __set_CNTP_CTL(value); + __ISB(); +} + +/** \brief Get the control value. +* \return Control value. +*/ +__STATIC_INLINE uint32_t PL1_GetControl(void) +{ + return(__get_CNTP_CTL()); +} + +/******************************* VIRTUAL TIMER *******************************/ +/** \brief Virtual Timer Control register */ + +/** \brief Sets the reset value of the virtual timer. +* \param [in] value The value the virtual timer is loaded with. +*/ +__STATIC_INLINE void VL1_SetCurrentTimerValue(uint32_t value) +{ + __set_CNTV_TVAL(value); + __ISB(); +} + +/** \brief Get the current virtual timer value. +* \return Current virtual timer value. +*/ +__STATIC_INLINE uint32_t VL1_GetCurrentTimerValue(void) +{ + return(__get_CNTV_TVAL()); +} + +/** \brief Get the current virtual count value. +* \return Current virtual count value. +*/ +__STATIC_INLINE uint64_t VL1_GetCurrentCountValue(void) +{ + return(__get_CNTVCT()); +} + +/** \brief Set the virtual timer compare value. +* \param [in] value New virtual timer compare value. +*/ +__STATIC_INLINE void VL1_SetTimerCompareValue(uint64_t value) +{ + __set_CNTV_CVAL(value); + __ISB(); +} + +/** \brief Get the virtual timer compare value. +* \return Virtual timer compare value. +*/ +__STATIC_INLINE uint64_t VL1_GetTimerCompareValue(void) +{ + return(__get_CNTV_CVAL()); +} + +/** \brief Configure the virtual timer by setting the control value. +* \param [in] value New virtual timer control value. +*/ +__STATIC_INLINE void VL1_SetControl(uint32_t value) +{ + __set_CNTV_CTL(value); + __ISB(); +} + +/** \brief Get the virtual timer control value. +* \return Virtual timer control value. +*/ +__STATIC_INLINE uint32_t VL1_GetControl(void) +{ + return(__get_CNTV_CTL()); +} +/***************************** VIRTUAL TIMER END *****************************/ +#endif + +/* Private Timer */ +#if ((__CORTEX_A == 5U) || (__CORTEX_A == 9U)) || defined(DOXYGEN) +/** \brief Set the load value to timers LOAD register. +* \param [in] value The load value to be set. +*/ +__STATIC_INLINE void PTIM_SetLoadValue(uint32_t value) +{ + PTIM->LOAD = value; +} + +/** \brief Get the load value from timers LOAD register. +* \return Timer_Type::LOAD +*/ +__STATIC_INLINE uint32_t PTIM_GetLoadValue(void) +{ + return(PTIM->LOAD); +} + +/** \brief Set current counter value from its COUNTER register. +*/ +__STATIC_INLINE void PTIM_SetCurrentValue(uint32_t value) +{ + PTIM->COUNTER = value; +} + +/** \brief Get current counter value from timers COUNTER register. +* \result Timer_Type::COUNTER +*/ +__STATIC_INLINE uint32_t PTIM_GetCurrentValue(void) +{ + return(PTIM->COUNTER); +} + +/** \brief Configure the timer using its CONTROL register. +* \param [in] value The new configuration value to be set. +*/ +__STATIC_INLINE void PTIM_SetControl(uint32_t value) +{ + PTIM->CONTROL = value; +} + +/** ref Timer_Type::CONTROL Get the current timer configuration from its CONTROL register. +* \return Timer_Type::CONTROL +*/ +__STATIC_INLINE uint32_t PTIM_GetControl(void) +{ + return(PTIM->CONTROL); +} + +/** ref Timer_Type::CONTROL Get the event flag in timers ISR register. +* \return 0 - flag is not set, 1- flag is set +*/ +__STATIC_INLINE uint32_t PTIM_GetEventFlag(void) +{ + return (PTIM->ISR & 1UL); +} + +/** ref Timer_Type::CONTROL Clears the event flag in timers ISR register. +*/ +__STATIC_INLINE void PTIM_ClearEventFlag(void) +{ + PTIM->ISR = 1; +} +#endif +#endif + +/* ########################## MMU functions ###################################### */ + +#define SECTION_DESCRIPTOR (0x2) +#define SECTION_MASK (0xFFFFFFFC) + +#define SECTION_TEXCB_MASK (0xFFFF8FF3) +#define SECTION_B_SHIFT (2) +#define SECTION_C_SHIFT (3) +#define SECTION_TEX0_SHIFT (12) +#define SECTION_TEX1_SHIFT (13) +#define SECTION_TEX2_SHIFT (14) + +#define SECTION_XN_MASK (0xFFFFFFEF) +#define SECTION_XN_SHIFT (4) + +#define SECTION_DOMAIN_MASK (0xFFFFFE1F) +#define SECTION_DOMAIN_SHIFT (5) + +#define SECTION_P_MASK (0xFFFFFDFF) +#define SECTION_P_SHIFT (9) + +#define SECTION_AP_MASK (0xFFFF73FF) +#define SECTION_AP_SHIFT (10) +#define SECTION_AP2_SHIFT (15) + +#define SECTION_S_MASK (0xFFFEFFFF) +#define SECTION_S_SHIFT (16) + +#define SECTION_NG_MASK (0xFFFDFFFF) +#define SECTION_NG_SHIFT (17) + +#define SECTION_NS_MASK (0xFFF7FFFF) +#define SECTION_NS_SHIFT (19) + +#define PAGE_L1_DESCRIPTOR (0x1) +#define PAGE_L1_MASK (0xFFFFFFFC) + +#define PAGE_L2_4K_DESC (0x2) +#define PAGE_L2_4K_MASK (0xFFFFFFFD) + +#define PAGE_L2_64K_DESC (0x1) +#define PAGE_L2_64K_MASK (0xFFFFFFFC) + +#define PAGE_4K_TEXCB_MASK (0xFFFFFE33) +#define PAGE_4K_B_SHIFT (2) +#define PAGE_4K_C_SHIFT (3) +#define PAGE_4K_TEX0_SHIFT (6) +#define PAGE_4K_TEX1_SHIFT (7) +#define PAGE_4K_TEX2_SHIFT (8) + +#define PAGE_64K_TEXCB_MASK (0xFFFF8FF3) +#define PAGE_64K_B_SHIFT (2) +#define PAGE_64K_C_SHIFT (3) +#define PAGE_64K_TEX0_SHIFT (12) +#define PAGE_64K_TEX1_SHIFT (13) +#define PAGE_64K_TEX2_SHIFT (14) + +#define PAGE_TEXCB_MASK (0xFFFF8FF3) +#define PAGE_B_SHIFT (2) +#define PAGE_C_SHIFT (3) +#define PAGE_TEX_SHIFT (12) + +#define PAGE_XN_4K_MASK (0xFFFFFFFE) +#define PAGE_XN_4K_SHIFT (0) +#define PAGE_XN_64K_MASK (0xFFFF7FFF) +#define PAGE_XN_64K_SHIFT (15) + +#define PAGE_DOMAIN_MASK (0xFFFFFE1F) +#define PAGE_DOMAIN_SHIFT (5) + +#define PAGE_P_MASK (0xFFFFFDFF) +#define PAGE_P_SHIFT (9) + +#define PAGE_AP_MASK (0xFFFFFDCF) +#define PAGE_AP_SHIFT (4) +#define PAGE_AP2_SHIFT (9) + +#define PAGE_S_MASK (0xFFFFFBFF) +#define PAGE_S_SHIFT (10) + +#define PAGE_NG_MASK (0xFFFFF7FF) +#define PAGE_NG_SHIFT (11) + +#define PAGE_NS_MASK (0xFFFFFFF7) +#define PAGE_NS_SHIFT (3) + +#define OFFSET_1M (0x00100000) +#define OFFSET_64K (0x00010000) +#define OFFSET_4K (0x00001000) + +#define DESCRIPTOR_FAULT (0x00000000) + +/* Attributes enumerations */ + +/* Region size attributes */ +typedef enum +{ + SECTION, + PAGE_4k, + PAGE_64k, +} mmu_region_size_Type; + +/* Region type attributes */ +typedef enum +{ + NORMAL, + DEVICE, + SHARED_DEVICE, + NON_SHARED_DEVICE, + STRONGLY_ORDERED +} mmu_memory_Type; + +/* Region cacheability attributes */ +typedef enum +{ + NON_CACHEABLE, + WB_WA, + WT, + WB_NO_WA, +} mmu_cacheability_Type; + +/* Region parity check attributes */ +typedef enum +{ + ECC_DISABLED, + ECC_ENABLED, +} mmu_ecc_check_Type; + +/* Region execution attributes */ +typedef enum +{ + EXECUTE, + NON_EXECUTE, +} mmu_execute_Type; + +/* Region global attributes */ +typedef enum +{ + GLOBAL, + NON_GLOBAL, +} mmu_global_Type; + +/* Region shareability attributes */ +typedef enum +{ + NON_SHARED, + SHARED, +} mmu_shared_Type; + +/* Region security attributes */ +typedef enum +{ + SECURE, + NON_SECURE, +} mmu_secure_Type; + +/* Region access attributes */ +typedef enum +{ + NO_ACCESS, + RW, + READ, +} mmu_access_Type; + +/* Memory Region definition */ +typedef struct RegionStruct { + mmu_region_size_Type rg_t; + mmu_memory_Type mem_t; + uint8_t domain; + mmu_cacheability_Type inner_norm_t; + mmu_cacheability_Type outer_norm_t; + mmu_ecc_check_Type e_t; + mmu_execute_Type xn_t; + mmu_global_Type g_t; + mmu_secure_Type sec_t; + mmu_access_Type priv_t; + mmu_access_Type user_t; + mmu_shared_Type sh_t; + +} mmu_region_attributes_Type; + +//Following macros define the descriptors and attributes +//Sect_Normal. Outer & inner wb/wa, non-shareable, executable, rw, domain 0 +#define section_normal(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = WB_WA; \ + region.outer_norm_t = WB_WA; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Normal_NC. Outer & inner non-cacheable, non-shareable, executable, rw, domain 0 +#define section_normal_nc(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Normal_Cod. Outer & inner wb/wa, non-shareable, executable, ro, domain 0 +#define section_normal_cod(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = WB_WA; \ + region.outer_norm_t = WB_WA; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = EXECUTE; \ + region.priv_t = READ; \ + region.user_t = READ; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Normal_RO. Sect_Normal_Cod, but not executable +#define section_normal_ro(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = WB_WA; \ + region.outer_norm_t = WB_WA; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = READ; \ + region.user_t = READ; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Normal_RW. Sect_Normal_Cod, but writeable and not executable +#define section_normal_rw(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = WB_WA; \ + region.outer_norm_t = WB_WA; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); +//Sect_SO. Strongly-ordered (therefore shareable), not executable, rw, domain 0, base addr 0 +#define section_so(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = STRONGLY_ORDERED; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Device_RO. Device, non-shareable, non-executable, ro, domain 0, base addr 0 +#define section_device_ro(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = STRONGLY_ORDERED; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = READ; \ + region.user_t = READ; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Device_RW. Sect_Device_RO, but writeable +#define section_device_rw(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = STRONGLY_ORDERED; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); +//Page_4k_Device_RW. Shared device, not executable, rw, domain 0 +#define page4k_device_rw(descriptor_l1, descriptor_l2, region) region.rg_t = PAGE_4k; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = SHARED_DEVICE; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetPageDescriptor(&descriptor_l1, &descriptor_l2, region); + +//Page_64k_Device_RW. Shared device, not executable, rw, domain 0 +#define page64k_device_rw(descriptor_l1, descriptor_l2, region) region.rg_t = PAGE_64k; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = SHARED_DEVICE; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetPageDescriptor(&descriptor_l1, &descriptor_l2, region); + +/** \brief Set section execution-never attribute + + \param [out] descriptor_l1 L1 descriptor. + \param [in] xn Section execution-never attribute : EXECUTE , NON_EXECUTE. + + \return 0 +*/ +__STATIC_INLINE int MMU_XNSection(uint32_t *descriptor_l1, mmu_execute_Type xn) +{ + *descriptor_l1 &= SECTION_XN_MASK; + *descriptor_l1 |= ((xn & 0x1) << SECTION_XN_SHIFT); + return 0; +} + +/** \brief Set section domain + + \param [out] descriptor_l1 L1 descriptor. + \param [in] domain Section domain + + \return 0 +*/ +__STATIC_INLINE int MMU_DomainSection(uint32_t *descriptor_l1, uint8_t domain) +{ + *descriptor_l1 &= SECTION_DOMAIN_MASK; + *descriptor_l1 |= ((domain & 0xF) << SECTION_DOMAIN_SHIFT); + return 0; +} + +/** \brief Set section parity check + + \param [out] descriptor_l1 L1 descriptor. + \param [in] p_bit Parity check: ECC_DISABLED, ECC_ENABLED + + \return 0 +*/ +__STATIC_INLINE int MMU_PSection(uint32_t *descriptor_l1, mmu_ecc_check_Type p_bit) +{ + *descriptor_l1 &= SECTION_P_MASK; + *descriptor_l1 |= ((p_bit & 0x1) << SECTION_P_SHIFT); + return 0; +} + +/** \brief Set section access privileges + + \param [out] descriptor_l1 L1 descriptor. + \param [in] user User Level Access: NO_ACCESS, RW, READ + \param [in] priv Privilege Level Access: NO_ACCESS, RW, READ + \param [in] afe Access flag enable + + \return 0 +*/ +__STATIC_INLINE int MMU_APSection(uint32_t *descriptor_l1, mmu_access_Type user, mmu_access_Type priv, uint32_t afe) +{ + uint32_t ap = 0; + + if (afe == 0) { //full access + if ((priv == NO_ACCESS) && (user == NO_ACCESS)) { ap = 0x0; } + else if ((priv == RW) && (user == NO_ACCESS)) { ap = 0x1; } + else if ((priv == RW) && (user == READ)) { ap = 0x2; } + else if ((priv == RW) && (user == RW)) { ap = 0x3; } + else if ((priv == READ) && (user == NO_ACCESS)) { ap = 0x5; } + else if ((priv == READ) && (user == READ)) { ap = 0x7; } + } + + else { //Simplified access + if ((priv == RW) && (user == NO_ACCESS)) { ap = 0x1; } + else if ((priv == RW) && (user == RW)) { ap = 0x3; } + else if ((priv == READ) && (user == NO_ACCESS)) { ap = 0x5; } + else if ((priv == READ) && (user == READ)) { ap = 0x7; } + } + + *descriptor_l1 &= SECTION_AP_MASK; + *descriptor_l1 |= (ap & 0x3) << SECTION_AP_SHIFT; + *descriptor_l1 |= ((ap & 0x4)>>2) << SECTION_AP2_SHIFT; + + return 0; +} + +/** \brief Set section shareability + + \param [out] descriptor_l1 L1 descriptor. + \param [in] s_bit Section shareability: NON_SHARED, SHARED + + \return 0 +*/ +__STATIC_INLINE int MMU_SharedSection(uint32_t *descriptor_l1, mmu_shared_Type s_bit) +{ + *descriptor_l1 &= SECTION_S_MASK; + *descriptor_l1 |= ((s_bit & 0x1) << SECTION_S_SHIFT); + return 0; +} + +/** \brief Set section Global attribute + + \param [out] descriptor_l1 L1 descriptor. + \param [in] g_bit Section attribute: GLOBAL, NON_GLOBAL + + \return 0 +*/ +__STATIC_INLINE int MMU_GlobalSection(uint32_t *descriptor_l1, mmu_global_Type g_bit) +{ + *descriptor_l1 &= SECTION_NG_MASK; + *descriptor_l1 |= ((g_bit & 0x1) << SECTION_NG_SHIFT); + return 0; +} + +/** \brief Set section Security attribute + + \param [out] descriptor_l1 L1 descriptor. + \param [in] s_bit Section Security attribute: SECURE, NON_SECURE + + \return 0 +*/ +__STATIC_INLINE int MMU_SecureSection(uint32_t *descriptor_l1, mmu_secure_Type s_bit) +{ + *descriptor_l1 &= SECTION_NS_MASK; + *descriptor_l1 |= ((s_bit & 0x1) << SECTION_NS_SHIFT); + return 0; +} + +/* Page 4k or 64k */ +/** \brief Set 4k/64k page execution-never attribute + + \param [out] descriptor_l2 L2 descriptor. + \param [in] xn Page execution-never attribute : EXECUTE , NON_EXECUTE. + \param [in] page Page size: PAGE_4k, PAGE_64k, + + \return 0 +*/ +__STATIC_INLINE int MMU_XNPage(uint32_t *descriptor_l2, mmu_execute_Type xn, mmu_region_size_Type page) +{ + if (page == PAGE_4k) + { + *descriptor_l2 &= PAGE_XN_4K_MASK; + *descriptor_l2 |= ((xn & 0x1) << PAGE_XN_4K_SHIFT); + } + else + { + *descriptor_l2 &= PAGE_XN_64K_MASK; + *descriptor_l2 |= ((xn & 0x1) << PAGE_XN_64K_SHIFT); + } + return 0; +} + +/** \brief Set 4k/64k page domain + + \param [out] descriptor_l1 L1 descriptor. + \param [in] domain Page domain + + \return 0 +*/ +__STATIC_INLINE int MMU_DomainPage(uint32_t *descriptor_l1, uint8_t domain) +{ + *descriptor_l1 &= PAGE_DOMAIN_MASK; + *descriptor_l1 |= ((domain & 0xf) << PAGE_DOMAIN_SHIFT); + return 0; +} + +/** \brief Set 4k/64k page parity check + + \param [out] descriptor_l1 L1 descriptor. + \param [in] p_bit Parity check: ECC_DISABLED, ECC_ENABLED + + \return 0 +*/ +__STATIC_INLINE int MMU_PPage(uint32_t *descriptor_l1, mmu_ecc_check_Type p_bit) +{ + *descriptor_l1 &= SECTION_P_MASK; + *descriptor_l1 |= ((p_bit & 0x1) << SECTION_P_SHIFT); + return 0; +} + +/** \brief Set 4k/64k page access privileges + + \param [out] descriptor_l2 L2 descriptor. + \param [in] user User Level Access: NO_ACCESS, RW, READ + \param [in] priv Privilege Level Access: NO_ACCESS, RW, READ + \param [in] afe Access flag enable + + \return 0 +*/ +__STATIC_INLINE int MMU_APPage(uint32_t *descriptor_l2, mmu_access_Type user, mmu_access_Type priv, uint32_t afe) +{ + uint32_t ap = 0; + + if (afe == 0) { //full access + if ((priv == NO_ACCESS) && (user == NO_ACCESS)) { ap = 0x0; } + else if ((priv == RW) && (user == NO_ACCESS)) { ap = 0x1; } + else if ((priv == RW) && (user == READ)) { ap = 0x2; } + else if ((priv == RW) && (user == RW)) { ap = 0x3; } + else if ((priv == READ) && (user == NO_ACCESS)) { ap = 0x5; } + else if ((priv == READ) && (user == READ)) { ap = 0x6; } + } + + else { //Simplified access + if ((priv == RW) && (user == NO_ACCESS)) { ap = 0x1; } + else if ((priv == RW) && (user == RW)) { ap = 0x3; } + else if ((priv == READ) && (user == NO_ACCESS)) { ap = 0x5; } + else if ((priv == READ) && (user == READ)) { ap = 0x7; } + } + + *descriptor_l2 &= PAGE_AP_MASK; + *descriptor_l2 |= (ap & 0x3) << PAGE_AP_SHIFT; + *descriptor_l2 |= ((ap & 0x4)>>2) << PAGE_AP2_SHIFT; + + return 0; +} + +/** \brief Set 4k/64k page shareability + + \param [out] descriptor_l2 L2 descriptor. + \param [in] s_bit 4k/64k page shareability: NON_SHARED, SHARED + + \return 0 +*/ +__STATIC_INLINE int MMU_SharedPage(uint32_t *descriptor_l2, mmu_shared_Type s_bit) +{ + *descriptor_l2 &= PAGE_S_MASK; + *descriptor_l2 |= ((s_bit & 0x1) << PAGE_S_SHIFT); + return 0; +} + +/** \brief Set 4k/64k page Global attribute + + \param [out] descriptor_l2 L2 descriptor. + \param [in] g_bit 4k/64k page attribute: GLOBAL, NON_GLOBAL + + \return 0 +*/ +__STATIC_INLINE int MMU_GlobalPage(uint32_t *descriptor_l2, mmu_global_Type g_bit) +{ + *descriptor_l2 &= PAGE_NG_MASK; + *descriptor_l2 |= ((g_bit & 0x1) << PAGE_NG_SHIFT); + return 0; +} + +/** \brief Set 4k/64k page Security attribute + + \param [out] descriptor_l1 L1 descriptor. + \param [in] s_bit 4k/64k page Security attribute: SECURE, NON_SECURE + + \return 0 +*/ +__STATIC_INLINE int MMU_SecurePage(uint32_t *descriptor_l1, mmu_secure_Type s_bit) +{ + *descriptor_l1 &= PAGE_NS_MASK; + *descriptor_l1 |= ((s_bit & 0x1) << PAGE_NS_SHIFT); + return 0; +} + +/** \brief Set Section memory attributes + + \param [out] descriptor_l1 L1 descriptor. + \param [in] mem Section memory type: NORMAL, DEVICE, SHARED_DEVICE, NON_SHARED_DEVICE, STRONGLY_ORDERED + \param [in] outer Outer cacheability: NON_CACHEABLE, WB_WA, WT, WB_NO_WA, + \param [in] inner Inner cacheability: NON_CACHEABLE, WB_WA, WT, WB_NO_WA, + + \return 0 +*/ +__STATIC_INLINE int MMU_MemorySection(uint32_t *descriptor_l1, mmu_memory_Type mem, mmu_cacheability_Type outer, mmu_cacheability_Type inner) +{ + *descriptor_l1 &= SECTION_TEXCB_MASK; + + if (STRONGLY_ORDERED == mem) + { + return 0; + } + else if (SHARED_DEVICE == mem) + { + *descriptor_l1 |= (1 << SECTION_B_SHIFT); + } + else if (NON_SHARED_DEVICE == mem) + { + *descriptor_l1 |= (1 << SECTION_TEX1_SHIFT); + } + else if (NORMAL == mem) + { + *descriptor_l1 |= 1 << SECTION_TEX2_SHIFT; + switch(inner) + { + case NON_CACHEABLE: + break; + case WB_WA: + *descriptor_l1 |= (1 << SECTION_B_SHIFT); + break; + case WT: + *descriptor_l1 |= 1 << SECTION_C_SHIFT; + break; + case WB_NO_WA: + *descriptor_l1 |= (1 << SECTION_B_SHIFT) | (1 << SECTION_C_SHIFT); + break; + } + switch(outer) + { + case NON_CACHEABLE: + break; + case WB_WA: + *descriptor_l1 |= (1 << SECTION_TEX0_SHIFT); + break; + case WT: + *descriptor_l1 |= 1 << SECTION_TEX1_SHIFT; + break; + case WB_NO_WA: + *descriptor_l1 |= (1 << SECTION_TEX0_SHIFT) | (1 << SECTION_TEX0_SHIFT); + break; + } + } + return 0; +} + +/** \brief Set 4k/64k page memory attributes + + \param [out] descriptor_l2 L2 descriptor. + \param [in] mem 4k/64k page memory type: NORMAL, DEVICE, SHARED_DEVICE, NON_SHARED_DEVICE, STRONGLY_ORDERED + \param [in] outer Outer cacheability: NON_CACHEABLE, WB_WA, WT, WB_NO_WA, + \param [in] inner Inner cacheability: NON_CACHEABLE, WB_WA, WT, WB_NO_WA, + \param [in] page Page size + + \return 0 +*/ +__STATIC_INLINE int MMU_MemoryPage(uint32_t *descriptor_l2, mmu_memory_Type mem, mmu_cacheability_Type outer, mmu_cacheability_Type inner, mmu_region_size_Type page) +{ + *descriptor_l2 &= PAGE_4K_TEXCB_MASK; + + if (page == PAGE_64k) + { + //same as section + MMU_MemorySection(descriptor_l2, mem, outer, inner); + } + else + { + if (STRONGLY_ORDERED == mem) + { + return 0; + } + else if (SHARED_DEVICE == mem) + { + *descriptor_l2 |= (1 << PAGE_4K_B_SHIFT); + } + else if (NON_SHARED_DEVICE == mem) + { + *descriptor_l2 |= (1 << PAGE_4K_TEX1_SHIFT); + } + else if (NORMAL == mem) + { + *descriptor_l2 |= 1 << PAGE_4K_TEX2_SHIFT; + switch(inner) + { + case NON_CACHEABLE: + break; + case WB_WA: + *descriptor_l2 |= (1 << PAGE_4K_B_SHIFT); + break; + case WT: + *descriptor_l2 |= 1 << PAGE_4K_C_SHIFT; + break; + case WB_NO_WA: + *descriptor_l2 |= (1 << PAGE_4K_B_SHIFT) | (1 << PAGE_4K_C_SHIFT); + break; + } + switch(outer) + { + case NON_CACHEABLE: + break; + case WB_WA: + *descriptor_l2 |= (1 << PAGE_4K_TEX0_SHIFT); + break; + case WT: + *descriptor_l2 |= 1 << PAGE_4K_TEX1_SHIFT; + break; + case WB_NO_WA: + *descriptor_l2 |= (1 << PAGE_4K_TEX0_SHIFT) | (1 << PAGE_4K_TEX0_SHIFT); + break; + } + } + } + + return 0; +} + +/** \brief Create a L1 section descriptor + + \param [out] descriptor L1 descriptor + \param [in] reg Section attributes + + \return 0 +*/ +__STATIC_INLINE int MMU_GetSectionDescriptor(uint32_t *descriptor, mmu_region_attributes_Type reg) +{ + *descriptor = 0; + + MMU_MemorySection(descriptor, reg.mem_t, reg.outer_norm_t, reg.inner_norm_t); + MMU_XNSection(descriptor,reg.xn_t); + MMU_DomainSection(descriptor, reg.domain); + MMU_PSection(descriptor, reg.e_t); + MMU_APSection(descriptor, reg.user_t, reg.priv_t, 1); + MMU_SharedSection(descriptor,reg.sh_t); + MMU_GlobalSection(descriptor,reg.g_t); + MMU_SecureSection(descriptor,reg.sec_t); + *descriptor &= SECTION_MASK; + *descriptor |= SECTION_DESCRIPTOR; + + return 0; +} + + +/** \brief Create a L1 and L2 4k/64k page descriptor + + \param [out] descriptor L1 descriptor + \param [out] descriptor2 L2 descriptor + \param [in] reg 4k/64k page attributes + + \return 0 +*/ +__STATIC_INLINE int MMU_GetPageDescriptor(uint32_t *descriptor, uint32_t *descriptor2, mmu_region_attributes_Type reg) +{ + *descriptor = 0; + *descriptor2 = 0; + + switch (reg.rg_t) + { + case PAGE_4k: + MMU_MemoryPage(descriptor2, reg.mem_t, reg.outer_norm_t, reg.inner_norm_t, PAGE_4k); + MMU_XNPage(descriptor2, reg.xn_t, PAGE_4k); + MMU_DomainPage(descriptor, reg.domain); + MMU_PPage(descriptor, reg.e_t); + MMU_APPage(descriptor2, reg.user_t, reg.priv_t, 1); + MMU_SharedPage(descriptor2,reg.sh_t); + MMU_GlobalPage(descriptor2,reg.g_t); + MMU_SecurePage(descriptor,reg.sec_t); + *descriptor &= PAGE_L1_MASK; + *descriptor |= PAGE_L1_DESCRIPTOR; + *descriptor2 &= PAGE_L2_4K_MASK; + *descriptor2 |= PAGE_L2_4K_DESC; + break; + + case PAGE_64k: + MMU_MemoryPage(descriptor2, reg.mem_t, reg.outer_norm_t, reg.inner_norm_t, PAGE_64k); + MMU_XNPage(descriptor2, reg.xn_t, PAGE_64k); + MMU_DomainPage(descriptor, reg.domain); + MMU_PPage(descriptor, reg.e_t); + MMU_APPage(descriptor2, reg.user_t, reg.priv_t, 1); + MMU_SharedPage(descriptor2,reg.sh_t); + MMU_GlobalPage(descriptor2,reg.g_t); + MMU_SecurePage(descriptor,reg.sec_t); + *descriptor &= PAGE_L1_MASK; + *descriptor |= PAGE_L1_DESCRIPTOR; + *descriptor2 &= PAGE_L2_64K_MASK; + *descriptor2 |= PAGE_L2_64K_DESC; + break; + + case SECTION: + //error + break; + } + + return 0; +} + +/** \brief Create a 1MB Section + + \param [in] ttb Translation table base address + \param [in] base_address Section base address + \param [in] count Number of sections to create + \param [in] descriptor_l1 L1 descriptor (region attributes) + +*/ +__STATIC_INLINE void MMU_TTSection(uint32_t *ttb, uint32_t base_address, uint32_t count, uint32_t descriptor_l1) +{ + uint32_t offset; + uint32_t entry; + uint32_t i; + + offset = base_address >> 20; + entry = (base_address & 0xFFF00000) | descriptor_l1; + + //4 bytes aligned + ttb = ttb + offset; + + for (i = 0; i < count; i++ ) + { + //4 bytes aligned + *ttb++ = entry; + entry += OFFSET_1M; + } +} + +/** \brief Create a 4k page entry + + \param [in] ttb L1 table base address + \param [in] base_address 4k base address + \param [in] count Number of 4k pages to create + \param [in] descriptor_l1 L1 descriptor (region attributes) + \param [in] ttb_l2 L2 table base address + \param [in] descriptor_l2 L2 descriptor (region attributes) + +*/ +__STATIC_INLINE void MMU_TTPage4k(uint32_t *ttb, uint32_t base_address, uint32_t count, uint32_t descriptor_l1, uint32_t *ttb_l2, uint32_t descriptor_l2 ) +{ + + uint32_t offset, offset2; + uint32_t entry, entry2; + uint32_t i; + + offset = base_address >> 20; + entry = ((int)ttb_l2 & 0xFFFFFC00) | descriptor_l1; + + //4 bytes aligned + ttb += offset; + //create l1_entry + *ttb = entry; + + offset2 = (base_address & 0xff000) >> 12; + ttb_l2 += offset2; + entry2 = (base_address & 0xFFFFF000) | descriptor_l2; + for (i = 0; i < count; i++ ) + { + //4 bytes aligned + *ttb_l2++ = entry2; + entry2 += OFFSET_4K; + } +} + +/** \brief Create a 64k page entry + + \param [in] ttb L1 table base address + \param [in] base_address 64k base address + \param [in] count Number of 64k pages to create + \param [in] descriptor_l1 L1 descriptor (region attributes) + \param [in] ttb_l2 L2 table base address + \param [in] descriptor_l2 L2 descriptor (region attributes) + +*/ +__STATIC_INLINE void MMU_TTPage64k(uint32_t *ttb, uint32_t base_address, uint32_t count, uint32_t descriptor_l1, uint32_t *ttb_l2, uint32_t descriptor_l2 ) +{ + uint32_t offset, offset2; + uint32_t entry, entry2; + uint32_t i,j; + + + offset = base_address >> 20; + entry = ((int)ttb_l2 & 0xFFFFFC00) | descriptor_l1; + + //4 bytes aligned + ttb += offset; + //create l1_entry + *ttb = entry; + + offset2 = (base_address & 0xff000) >> 12; + ttb_l2 += offset2; + entry2 = (base_address & 0xFFFF0000) | descriptor_l2; + for (i = 0; i < count; i++ ) + { + //create 16 entries + for (j = 0; j < 16; j++) + { + //4 bytes aligned + *ttb_l2++ = entry2; + } + entry2 += OFFSET_64K; + } +} + +/** \brief Enable MMU +*/ +__STATIC_INLINE void MMU_Enable(void) +{ + // Set M bit 0 to enable the MMU + // Set AFE bit to enable simplified access permissions model + // Clear TRE bit to disable TEX remap and A bit to disable strict alignment fault checking + __set_SCTLR( (__get_SCTLR() & ~(1 << 28) & ~(1 << 1)) | 1 | (1 << 29)); + __ISB(); +} + +/** \brief Disable MMU +*/ +__STATIC_INLINE void MMU_Disable(void) +{ + // Clear M bit 0 to disable the MMU + __set_SCTLR( __get_SCTLR() & ~1); + __ISB(); +} + +/** \brief Invalidate entire unified TLB +*/ + +__STATIC_INLINE void MMU_InvalidateTLB(void) +{ + __set_TLBIALL(0); + __DSB(); //ensure completion of the invalidation + __ISB(); //ensure instruction fetch path sees new state +} + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CA_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h new file mode 100644 index 000000000000..eeb599fc77f0 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h @@ -0,0 +1,967 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M0 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M0 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0 definitions */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000U + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/* NVIC_GetActive not available for Cortex-M0 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + *(vectors + (int32_t)IRQn) = vector; /* use pointer arithmetic to access vector */ + /* ARM Application Note 321 states that the M0 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + return *(vectors + (int32_t)IRQn); /* use pointer arithmetic to access vector */ +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h new file mode 100644 index 000000000000..1ee9457560f0 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h @@ -0,0 +1,1103 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex-M0+ + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0+ definitions */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000U + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0+ header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/* NVIC_GetActive not available for Cortex-M0+ */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +#else + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + *(vectors + (int32_t)IRQn) = vector; /* use pointer arithmetic to access vector */ +#endif + /* ARM Application Note 321 states that the M0+ does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +#else + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + return *(vectors + (int32_t)IRQn); /* use pointer arithmetic to access vector */ +#endif +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h new file mode 100644 index 000000000000..d41cf05b3369 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h @@ -0,0 +1,992 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M1 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM1_H_GENERIC +#define __CORE_CM1_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M1 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM1 definitions */ + +#define __CORTEX_M (1U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM1_H_DEPENDANT +#define __CORE_CM1_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM1_REV + #define __CM1_REV 0x0100U + #warning "__CM1_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M1 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_ITCMUAEN_Pos 4U /*!< ACTLR: Instruction TCM Upper Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMUAEN_Msk (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos) /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */ + +#define SCnSCB_ACTLR_ITCMLAEN_Pos 3U /*!< ACTLR: Instruction TCM Lower Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMLAEN_Msk (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos) /*!< ACTLR: Instruction TCM Lower Alias Enable Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M1 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M1 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M1 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)0x0U; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h new file mode 100644 index 000000000000..d6337a4848bc --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h @@ -0,0 +1,2253 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M23 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM23_H_GENERIC +#define __CORE_CM23_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M23 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM23 definitions */ + +#define __CORTEX_M (23U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM23_H_DEPENDANT +#define __CORE_CM23_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM23_REV + #define __CM23_REV 0x0000U + #warning "__CM23_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT not defined in device header file; using default!" + #endif + +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M23 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED14[992U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/** \brief MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Mask */ + +/** \brief MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/** \brief MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/** \brief SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/** \brief SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/** \brief SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/** \brief SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/** \brief SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/** \brief DIB SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/** \brief DIB Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/** \brief DIB SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/** \brief DIB SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_DWTENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_DWTENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/* NVIC_SetPriorityGrouping not available for Cortex-M23 */ +/* NVIC_GetPriorityGrouping not available for Cortex-M23 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + + #include "m-profile/armv8m_mpu.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h new file mode 100644 index 000000000000..624b9f69b02c --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h @@ -0,0 +1,2045 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M3 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M3 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM3 definitions */ + +#define __CORTEX_M (3U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200U + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IPR[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */ +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1U]; +#endif +} SCnSCB_Type; + +/** \brief SCnSCB Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ +#endif + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ +} ITM_Type; + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Lock Status Register Definitions */ +#define ITM_LSR_BYTEACC_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_BYTEACC_Msk (1UL << ITM_LSR_BYTEACC_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_ACCESS_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_ACCESS_Msk (1UL << ITM_LSR_ACCESS_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_PRESENT_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_PRESENT_Msk (1UL /*<< ITM_LSR_PRESENT_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration ETM Data Register Definitions (FIFO0) */ +#define TPIU_FIFO0_ITM_ATVALID_Pos 29U /*!< TPIU FIFO0: ITM_ATVALID Position */ +#define TPIU_FIFO0_ITM_ATVALID_Msk (1UL << TPIU_FIFO0_ITM_ATVALID_Pos) /*!< TPIU FIFO0: ITM_ATVALID Mask */ + +#define TPIU_FIFO0_ITM_bytecount_Pos 27U /*!< TPIU FIFO0: ITM_bytecount Position */ +#define TPIU_FIFO0_ITM_bytecount_Msk (0x3UL << TPIU_FIFO0_ITM_bytecount_Pos) /*!< TPIU FIFO0: ITM_bytecount Mask */ + +#define TPIU_FIFO0_ETM_ATVALID_Pos 26U /*!< TPIU FIFO0: ETM_ATVALID Position */ +#define TPIU_FIFO0_ETM_ATVALID_Msk (1UL << TPIU_FIFO0_ETM_ATVALID_Pos) /*!< TPIU FIFO0: ETM_ATVALID Mask */ + +#define TPIU_FIFO0_ETM_bytecount_Pos 24U /*!< TPIU FIFO0: ETM_bytecount Position */ +#define TPIU_FIFO0_ETM_bytecount_Msk (0x3UL << TPIU_FIFO0_ETM_bytecount_Pos) /*!< TPIU FIFO0: ETM_bytecount Mask */ + +#define TPIU_FIFO0_ETM2_Pos 16U /*!< TPIU FIFO0: ETM2 Position */ +#define TPIU_FIFO0_ETM2_Msk (0xFFUL << TPIU_FIFO0_ETM2_Pos) /*!< TPIU FIFO0: ETM2 Mask */ + +#define TPIU_FIFO0_ETM1_Pos 8U /*!< TPIU FIFO0: ETM1 Position */ +#define TPIU_FIFO0_ETM1_Msk (0xFFUL << TPIU_FIFO0_ETM1_Pos) /*!< TPIU FIFO0: ETM1 Mask */ + +#define TPIU_FIFO0_ETM0_Pos 0U /*!< TPIU FIFO0: ETM0 Position */ +#define TPIU_FIFO0_ETM0_Msk (0xFFUL /*<< TPIU_FIFO0_ETM0_Pos*/) /*!< TPIU FIFO0: ETM0 Mask */ + +/** \brief TPIU ITATBCTR2 Register Definitions */ +#define TPIU_ITATBCTR2_ATREADY2_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2 Position */ +#define TPIU_ITATBCTR2_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2 Mask */ + +#define TPIU_ITATBCTR2_ATREADY1_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1 Position */ +#define TPIU_ITATBCTR2_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1 Mask */ + +/** \brief TPIU Integration ITM Data Register Definitions (FIFO1) */ +#define TPIU_FIFO1_ITM_ATVALID_Pos 29U /*!< TPIU FIFO1: ITM_ATVALID Position */ +#define TPIU_FIFO1_ITM_ATVALID_Msk (1UL << TPIU_FIFO1_ITM_ATVALID_Pos) /*!< TPIU FIFO1: ITM_ATVALID Mask */ + +#define TPIU_FIFO1_ITM_bytecount_Pos 27U /*!< TPIU FIFO1: ITM_bytecount Position */ +#define TPIU_FIFO1_ITM_bytecount_Msk (0x3UL << TPIU_FIFO1_ITM_bytecount_Pos) /*!< TPIU FIFO1: ITM_bytecount Mask */ + +#define TPIU_FIFO1_ETM_ATVALID_Pos 26U /*!< TPIU FIFO1: ETM_ATVALID Position */ +#define TPIU_FIFO1_ETM_ATVALID_Msk (1UL << TPIU_FIFO1_ETM_ATVALID_Pos) /*!< TPIU FIFO1: ETM_ATVALID Mask */ + +#define TPIU_FIFO1_ETM_bytecount_Pos 24U /*!< TPIU FIFO1: ETM_bytecount Position */ +#define TPIU_FIFO1_ETM_bytecount_Msk (0x3UL << TPIU_FIFO1_ETM_bytecount_Pos) /*!< TPIU FIFO1: ETM_bytecount Mask */ + +#define TPIU_FIFO1_ITM2_Pos 16U /*!< TPIU FIFO1: ITM2 Position */ +#define TPIU_FIFO1_ITM2_Msk (0xFFUL << TPIU_FIFO1_ITM2_Pos) /*!< TPIU FIFO1: ITM2 Mask */ + +#define TPIU_FIFO1_ITM1_Pos 8U /*!< TPIU FIFO1: ITM1 Position */ +#define TPIU_FIFO1_ITM1_Msk (0xFFUL << TPIU_FIFO1_ITM1_Pos) /*!< TPIU FIFO1: ITM1 Mask */ + +#define TPIU_FIFO1_ITM0_Pos 0U /*!< TPIU FIFO1: ITM0 Position */ +#define TPIU_FIFO1_ITM0_Msk (0xFFUL /*<< TPIU_FIFO1_ITM0_Pos*/) /*!< TPIU FIFO1: ITM0 Mask */ + +/** \brief TPIU ITATBCTR0 Register Definitions */ +#define TPIU_ITATBCTR0_ATREADY2_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2 Position */ +#define TPIU_ITATBCTR0_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2 Mask */ + +#define TPIU_ITATBCTR0_ATREADY1_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1 Position */ +#define TPIU_ITATBCTR0_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1 Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_MinBufSz_Pos 6U /*!< TPIU DEVID: MinBufSz Position */ +#define TPIU_DEVID_MinBufSz_Msk (0x7UL << TPIU_DEVID_MinBufSz_Pos) /*!< TPIU DEVID: MinBufSz Mask */ + +#define TPIU_DEVID_AsynClkIn_Pos 5U /*!< TPIU DEVID: AsynClkIn Position */ +#define TPIU_DEVID_AsynClkIn_Msk (1UL << TPIU_DEVID_AsynClkIn_Pos) /*!< TPIU DEVID: AsynClkIn Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ +#define DCB_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M3 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h new file mode 100644 index 000000000000..5f7d9b1575c5 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h @@ -0,0 +1,3245 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M33 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM33_H_GENERIC +#define __CORE_CM33_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M33 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM33 definitions */ + +#define __CORTEX_M (33U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM33_H_DEPENDANT +#define __CORE_CM33_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM33_REV + #define __CM33_REV 0x0000U + #warning "__CM33_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M33 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/** \brief SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/** \brief SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/** \brief SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/** \brief SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/** \brief SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/** \brief SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/** \brief SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED14[984U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/** \brief MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Mask */ + +/** \brief MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/** \brief MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/** \brief SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/** \brief SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/** \brief SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/** \brief SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/** \brief SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/** \brief SAU Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/** \brief FPU Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/** \brief FPU Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/** \brief FPU Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/** \brief DIB SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/** \brief DIB Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/** \brief DIB SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/** \brief DIB SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + + #include "m-profile/armv8m_mpu.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h new file mode 100644 index 000000000000..def2589fadb1 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h @@ -0,0 +1,3245 @@ +/* + * Copyright (c) 2018-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M35P Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM35P_H_GENERIC +#define __CORE_CM35P_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M35P + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM35 definitions */ + +#define __CORTEX_M (35U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM35P_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM35P_H_DEPENDANT +#define __CORE_CM35P_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM35P_REV + #define __CM35P_REV 0x0000U + #warning "__CM35P_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M35P */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/** \brief SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/** \brief SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/** \brief SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/** \brief SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/** \brief SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/** \brief SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/** \brief SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED14[984U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/** \brief MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Mask */ + +/** \brief MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/** \brief MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/** \brief SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/** \brief SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/** \brief SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/** \brief SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/** \brief SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/** \brief SAU Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/** \brief FPU Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/** \brief FPU Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/** \brief FPU Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/** \brief DIB SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/** \brief DIB Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/** \brief DIB SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/** \brief DIB SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + + #include "m-profile/armv8m_mpu.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM35P_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h new file mode 100644 index 000000000000..8354ccfbcffd --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h @@ -0,0 +1,2237 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M4 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M4 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM4 definitions */ + +#define __CORTEX_M (4U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000U + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IPR[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ +} ITM_Type; + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Lock Status Register Definitions */ +#define ITM_LSR_BYTEACC_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_BYTEACC_Msk (1UL << ITM_LSR_BYTEACC_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_ACCESS_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_ACCESS_Msk (1UL << ITM_LSR_ACCESS_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_PRESENT_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_PRESENT_Msk (1UL /*<< ITM_LSR_PRESENT_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration ETM Data Register Definitions (FIFO0) */ +#define TPIU_FIFO0_ITM_ATVALID_Pos 29U /*!< TPIU FIFO0: ITM_ATVALID Position */ +#define TPIU_FIFO0_ITM_ATVALID_Msk (1UL << TPIU_FIFO0_ITM_ATVALID_Pos) /*!< TPIU FIFO0: ITM_ATVALID Mask */ + +#define TPIU_FIFO0_ITM_bytecount_Pos 27U /*!< TPIU FIFO0: ITM_bytecount Position */ +#define TPIU_FIFO0_ITM_bytecount_Msk (0x3UL << TPIU_FIFO0_ITM_bytecount_Pos) /*!< TPIU FIFO0: ITM_bytecount Mask */ + +#define TPIU_FIFO0_ETM_ATVALID_Pos 26U /*!< TPIU FIFO0: ETM_ATVALID Position */ +#define TPIU_FIFO0_ETM_ATVALID_Msk (1UL << TPIU_FIFO0_ETM_ATVALID_Pos) /*!< TPIU FIFO0: ETM_ATVALID Mask */ + +#define TPIU_FIFO0_ETM_bytecount_Pos 24U /*!< TPIU FIFO0: ETM_bytecount Position */ +#define TPIU_FIFO0_ETM_bytecount_Msk (0x3UL << TPIU_FIFO0_ETM_bytecount_Pos) /*!< TPIU FIFO0: ETM_bytecount Mask */ + +#define TPIU_FIFO0_ETM2_Pos 16U /*!< TPIU FIFO0: ETM2 Position */ +#define TPIU_FIFO0_ETM2_Msk (0xFFUL << TPIU_FIFO0_ETM2_Pos) /*!< TPIU FIFO0: ETM2 Mask */ + +#define TPIU_FIFO0_ETM1_Pos 8U /*!< TPIU FIFO0: ETM1 Position */ +#define TPIU_FIFO0_ETM1_Msk (0xFFUL << TPIU_FIFO0_ETM1_Pos) /*!< TPIU FIFO0: ETM1 Mask */ + +#define TPIU_FIFO0_ETM0_Pos 0U /*!< TPIU FIFO0: ETM0 Position */ +#define TPIU_FIFO0_ETM0_Msk (0xFFUL /*<< TPIU_FIFO0_ETM0_Pos*/) /*!< TPIU FIFO0: ETM0 Mask */ + +/** \brief TPIU ITATBCTR2 Register Definitions */ +#define TPIU_ITATBCTR2_ATREADY2_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2 Position */ +#define TPIU_ITATBCTR2_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2 Mask */ + +#define TPIU_ITATBCTR2_ATREADY1_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1 Position */ +#define TPIU_ITATBCTR2_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1 Mask */ + +/** \brief TPIU Integration ITM Data Register Definitions (FIFO1) */ +#define TPIU_FIFO1_ITM_ATVALID_Pos 29U /*!< TPIU FIFO1: ITM_ATVALID Position */ +#define TPIU_FIFO1_ITM_ATVALID_Msk (1UL << TPIU_FIFO1_ITM_ATVALID_Pos) /*!< TPIU FIFO1: ITM_ATVALID Mask */ + +#define TPIU_FIFO1_ITM_bytecount_Pos 27U /*!< TPIU FIFO1: ITM_bytecount Position */ +#define TPIU_FIFO1_ITM_bytecount_Msk (0x3UL << TPIU_FIFO1_ITM_bytecount_Pos) /*!< TPIU FIFO1: ITM_bytecount Mask */ + +#define TPIU_FIFO1_ETM_ATVALID_Pos 26U /*!< TPIU FIFO1: ETM_ATVALID Position */ +#define TPIU_FIFO1_ETM_ATVALID_Msk (1UL << TPIU_FIFO1_ETM_ATVALID_Pos) /*!< TPIU FIFO1: ETM_ATVALID Mask */ + +#define TPIU_FIFO1_ETM_bytecount_Pos 24U /*!< TPIU FIFO1: ETM_bytecount Position */ +#define TPIU_FIFO1_ETM_bytecount_Msk (0x3UL << TPIU_FIFO1_ETM_bytecount_Pos) /*!< TPIU FIFO1: ETM_bytecount Mask */ + +#define TPIU_FIFO1_ITM2_Pos 16U /*!< TPIU FIFO1: ITM2 Position */ +#define TPIU_FIFO1_ITM2_Msk (0xFFUL << TPIU_FIFO1_ITM2_Pos) /*!< TPIU FIFO1: ITM2 Mask */ + +#define TPIU_FIFO1_ITM1_Pos 8U /*!< TPIU FIFO1: ITM1 Position */ +#define TPIU_FIFO1_ITM1_Msk (0xFFUL << TPIU_FIFO1_ITM1_Pos) /*!< TPIU FIFO1: ITM1 Mask */ + +#define TPIU_FIFO1_ITM0_Pos 0U /*!< TPIU FIFO1: ITM0 Position */ +#define TPIU_FIFO1_ITM0_Msk (0xFFUL /*<< TPIU_FIFO1_ITM0_Pos*/) /*!< TPIU FIFO1: ITM0 Mask */ + +/** \brief TPIU ITATBCTR0 Register Definitions */ +#define TPIU_ITATBCTR0_ATREADY2_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2 Position */ +#define TPIU_ITATBCTR0_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2 Mask */ + +#define TPIU_ITATBCTR0_ATREADY1_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1 Position */ +#define TPIU_ITATBCTR0_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1 Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_MinBufSz_Pos 6U /*!< TPIU DEVID: MinBufSz Position */ +#define TPIU_DEVID_MinBufSz_Msk (0x7UL << TPIU_DEVID_MinBufSz_Pos) /*!< TPIU DEVID: MinBufSz Mask */ + +#define TPIU_DEVID_AsynClkIn_Pos 5U /*!< TPIU DEVID: AsynClkIn Position */ +#define TPIU_DEVID_AsynClkIn_Msk (1UL << TPIU_DEVID_AsynClkIn_Pos) /*!< TPIU DEVID: AsynClkIn Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/** \brief FPU Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/** \brief FPU Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/** \brief FPU Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ +#define DCB_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M4 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h new file mode 100644 index 000000000000..a6195940426b --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h @@ -0,0 +1,4783 @@ +/* + * Copyright (c) 2018-2024 Arm Limited. Copyright (c) 2024 Arm Technology (China) Co., Ltd. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M52 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM52_H_GENERIC +#define __CORE_CM52_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M52 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM52 definitions */ + +#define __CORTEX_M (52U) /*!< Cortex-M Core */ + +#if defined ( __CC_ARM ) + #error Legacy Arm Compiler does not support Armv8.1-M target architecture. +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM52_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM52_H_DEPENDANT +#define __CORE_CM52_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM52_REV + #define __CM52_REV 0x0002U + #warning "__CM52_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #if __FPU_PRESENT != 0U + #ifndef __FPU_DP + #define __FPU_DP 0U + #warning "__FPU_DP not defined in device header file; using default!" + #endif + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __UCACHE_PRESENT + #define __UCACHE_PRESENT 0U + #warning "__UCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __PMU_PRESENT + #define __PMU_PRESENT 0U + #warning "__PMU_PRESENT not defined in device header file; using default!" + #endif + + #if __PMU_PRESENT != 0U + #ifndef __PMU_NUM_EVENTCNT + #define __PMU_NUM_EVENTCNT 8U + #warning "__PMU_NUM_EVENTCNT not defined in device header file; using default!" + #elif (__PMU_NUM_EVENTCNT > 8 || __PMU_NUM_EVENTCNT < 2) + #error "__PMU_NUM_EVENTCNT is out of range in device header file!" */ + #endif + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M52 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core EWIC Register + - Core EWIC Interrupt Status Access Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core PMU Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:1; /*!< bit: 20 Reserved */ + uint32_t B:1; /*!< bit: 21 BTI active (read 0) */ + uint32_t _reserved2:2; /*!< bit: 22..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_B_Pos 21U /*!< xPSR: B Position */ +#define xPSR_B_Msk (1UL << xPSR_B_Pos) /*!< xPSR: B Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t BTI_EN:1; /*!< bit: 4 Privileged branch target identification enable */ + uint32_t UBTI_EN:1; /*!< bit: 5 Unprivileged branch target identification enable */ + uint32_t PAC_EN:1; /*!< bit: 6 Privileged pointer authentication enable */ + uint32_t UPAC_EN:1; /*!< bit: 7 Unprivileged pointer authentication enable */ + uint32_t _reserved1:24; /*!< bit: 8..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_UPAC_EN_Pos 7U /*!< CONTROL: UPAC_EN Position */ +#define CONTROL_UPAC_EN_Msk (1UL << CONTROL_UPAC_EN_Pos) /*!< CONTROL: UPAC_EN Mask */ + +#define CONTROL_PAC_EN_Pos 6U /*!< CONTROL: PAC_EN Position */ +#define CONTROL_PAC_EN_Msk (1UL << CONTROL_PAC_EN_Pos) /*!< CONTROL: PAC_EN Mask */ + +#define CONTROL_UBTI_EN_Pos 5U /*!< CONTROL: UBTI_EN Position */ +#define CONTROL_UBTI_EN_Msk (1UL << CONTROL_UBTI_EN_Pos) /*!< CONTROL: UBTI_EN Mask */ + +#define CONTROL_BTI_EN_Pos 4U /*!< CONTROL: BTI_EN Position */ +#define CONTROL_BTI_EN_Msk (1UL << CONTROL_BTI_EN_Pos) /*!< CONTROL: BTI_EN Mask */ + +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED0[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED1[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ + uint32_t RESERVED2[14U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED3[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED4[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_IESB_Pos 5U /*!< SCB AIRCR: Implicit ESB Enable Position */ +#define SCB_AIRCR_IESB_Msk (1UL << SCB_AIRCR_IESB_Pos) /*!< SCB AIRCR: Implicit ESB Enable Mask */ + +#define SCB_AIRCR_DIT_Pos 4U /*!< SCB AIRCR: Data Independent Timing Position */ +#define SCB_AIRCR_DIT_Msk (1UL << SCB_AIRCR_DIT_Pos) /*!< SCB AIRCR: Data Independent Timing Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_TRD_Pos 20U /*!< SCB CCR: TRD Position */ +#define SCB_CCR_TRD_Msk (1UL << SCB_CCR_TRD_Pos) /*!< SCB CCR: TRD Mask */ + +#define SCB_CCR_LOB_Pos 19U /*!< SCB CCR: LOB Position */ +#define SCB_CCR_LOB_Msk (1UL << SCB_CCR_LOB_Pos) /*!< SCB CCR: LOB Mask */ + +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/** \brief SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CP7_Pos 7U /*!< SCB NSACR: CP7 Position */ +#define SCB_NSACR_CP7_Msk (1UL << SCB_NSACR_CP7_Pos) /*!< SCB NSACR: CP7 Mask */ + +#define SCB_NSACR_CP6_Pos 6U /*!< SCB NSACR: CP6 Position */ +#define SCB_NSACR_CP6_Msk (1UL << SCB_NSACR_CP6_Pos) /*!< SCB NSACR: CP6 Mask */ + +#define SCB_NSACR_CP5_Pos 5U /*!< SCB NSACR: CP5 Position */ +#define SCB_NSACR_CP5_Msk (1UL << SCB_NSACR_CP5_Pos) /*!< SCB NSACR: CP5 Mask */ + +#define SCB_NSACR_CP4_Pos 4U /*!< SCB NSACR: CP4 Position */ +#define SCB_NSACR_CP4_Msk (1UL << SCB_NSACR_CP4_Pos) /*!< SCB NSACR: CP4 Mask */ + +#define SCB_NSACR_CP3_Pos 3U /*!< SCB NSACR: CP3 Position */ +#define SCB_NSACR_CP3_Msk (1UL << SCB_NSACR_CP3_Pos) /*!< SCB NSACR: CP3 Mask */ + +#define SCB_NSACR_CP2_Pos 2U /*!< SCB NSACR: CP2 Position */ +#define SCB_NSACR_CP2_Msk (1UL << SCB_NSACR_CP2_Pos) /*!< SCB NSACR: CP2 Mask */ + +#define SCB_NSACR_CP1_Pos 1U /*!< SCB NSACR: CP1 Position */ +#define SCB_NSACR_CP1_Msk (1UL << SCB_NSACR_CP1_Pos) /*!< SCB NSACR: CP1 Mask */ + +#define SCB_NSACR_CP0_Pos 0U /*!< SCB NSACR: CP0 Position */ +#define SCB_NSACR_CP0_Msk (1UL /*<< SCB_NSACR_CP0_Pos*/) /*!< SCB NSACR: CP0 Mask */ + +/** \brief SCB Debug Feature Register 0 Definitions */ +#define SCB_ID_DFR_UDE_Pos 28U /*!< SCB ID_DFR: UDE Position */ +#define SCB_ID_DFR_UDE_Msk (0xFUL << SCB_ID_DFR_UDE_Pos) /*!< SCB ID_DFR: UDE Mask */ + +#define SCB_ID_DFR_MProfDbg_Pos 20U /*!< SCB ID_DFR: MProfDbg Position */ +#define SCB_ID_DFR_MProfDbg_Msk (0xFUL << SCB_ID_DFR_MProfDbg_Pos) /*!< SCB ID_DFR: MProfDbg Mask */ + +/** \brief SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +#define SCB_CLIDR_CTYPE1_Pos 0U +#define SCB_CLIDR_CTYPE1_Msk (7UL << SCB_CLIDR_CTYPE1_Pos) + +/** \brief SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/** \brief SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/** \brief SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/** \brief SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/** \brief SCB RAS Fault Status Register Definitions */ +#define SCB_RFSR_V_Pos 31U /*!< SCB RFSR: V Position */ +#define SCB_RFSR_V_Msk (1UL << SCB_RFSR_V_Pos) /*!< SCB RFSR: V Mask */ + +#define SCB_RFSR_IS_Pos 16U /*!< SCB RFSR: IS Position */ +#define SCB_RFSR_IS_Msk (0x7FFFUL << SCB_RFSR_IS_Pos) /*!< SCB RFSR: IS Mask */ + +#define SCB_RFSR_UET_Pos 0U /*!< SCB RFSR: UET Position */ +#define SCB_RFSR_UET_Msk (3UL /*<< SCB_RFSR_UET_Pos*/) /*!< SCB RFSR: UET Mask */ + +/** \brief SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + + +/** \brief SCB U-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_UC_WAY_Pos 31U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_UC_WAY_Msk (1UL << SCB_DCISW_UC_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_UC_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_UC_SET_Msk (0x3FFUL << SCB_DCISW_UC_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB U-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_UC_WAY_Pos 31U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_UC_WAY_Msk (1UL << SCB_DCCSW_UC_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_UC_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_UC_SET_Msk (0x3FFUL << SCB_DCCSW_UC_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB U-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_UC_WAY_Pos 31U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_UC_WAY_Msk (1UL << SCB_DCCISW_UC_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_UC_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_UC_SET_Msk (0x3FFUL << SCB_DCCISW_UC_SET_Pos) /*!< SCB DCCISW: Set Mask */ + + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ICB Implementation Control Block register (ICB) + \brief Type definitions for the Implementation Control Block Register + @{ + */ + +/** + \brief Structure type to access the Implementation Control Block (ICB). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} ICB_Type; + +/** \brief ICB Auxiliary Control Register Definitions */ +#define ICB_ACTLR_DISCRITAXIRUW_Pos 27U /*!< ACTLR: DISCRITAXIRUW Position */ +#define ICB_ACTLR_DISCRITAXIRUW_Msk (1UL << ICB_ACTLR_DISCRITAXIRUW_Pos) /*!< ACTLR: DISCRITAXIRUW Mask */ + +#define ICB_ACTLR_DISDI_Pos 16U /*!< ACTLR: DISDI Position */ +#define ICB_ACTLR_DISDI_Msk (3UL << ICB_ACTLR_DISDI_Pos) /*!< ACTLR: DISDI Mask */ + +#define ICB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define ICB_ACTLR_DISCRITAXIRUR_Msk (1UL << ICB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define ICB_ACTLR_EVENTBUSEN_Pos 14U /*!< ACTLR: EVENTBUSEN Position */ +#define ICB_ACTLR_EVENTBUSEN_Msk (1UL << ICB_ACTLR_EVENTBUSEN_Pos) /*!< ACTLR: EVENTBUSEN Mask */ + +#define ICB_ACTLR_EVENTBUSEN_S_Pos 13U /*!< ACTLR: EVENTBUSEN_S Position */ +#define ICB_ACTLR_EVENTBUSEN_S_Msk (1UL << ICB_ACTLR_EVENTBUSEN_S_Pos) /*!< ACTLR: EVENTBUSEN_S Mask */ + +#define ICB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define ICB_ACTLR_DISITMATBFLUSH_Msk (1UL << ICB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define ICB_ACTLR_DISNWAMODE_Pos 11U /*!< ACTLR: DISNWAMODE Position */ +#define ICB_ACTLR_DISNWAMODE_Msk (1UL << ICB_ACTLR_DISNWAMODE_Pos) /*!< ACTLR: DISNWAMODE Mask */ + +#define ICB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define ICB_ACTLR_FPEXCODIS_Msk (1UL << ICB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define ICB_ACTLR_DISOLAP_Pos 7U /*!< ACTLR: DISOLAP Position */ +#define ICB_ACTLR_DISOLAP_Msk (1UL << ICB_ACTLR_DISOLAP_Pos) /*!< ACTLR: DISOLAP Mask */ + +#define ICB_ACTLR_DISOLAPS_Pos 6U /*!< ACTLR: DISOLAPS Position */ +#define ICB_ACTLR_DISOLAPS_Msk (1UL << ICB_ACTLR_DISOLAPS_Pos) /*!< ACTLR: DISOLAPS Mask */ + +#define ICB_ACTLR_DISLOBR_Pos 5U /*!< ACTLR: DISLOBR Position */ +#define ICB_ACTLR_DISLOBR_Msk (1UL << ICB_ACTLR_DISLOBR_Pos) /*!< ACTLR: DISLOBR Mask */ + +#define ICB_ACTLR_DISLO_Pos 4U /*!< ACTLR: DISLO Position */ +#define ICB_ACTLR_DISLO_Msk (1UL << ICB_ACTLR_DISLO_Pos) /*!< ACTLR: DISLO Mask */ + +#define ICB_ACTLR_DISLOLEP_Pos 3U /*!< ACTLR: DISLOLEP Position */ +#define ICB_ACTLR_DISLOLEP_Msk (1UL << ICB_ACTLR_DISLOLEP_Pos) /*!< ACTLR: DISLOLEP Mask */ + +#define ICB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define ICB_ACTLR_DISFOLD_Msk (1UL << ICB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +/** \brief ICB Interrupt Controller Type Register Definitions */ +#define ICB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define ICB_ICTR_INTLINESNUM_Msk (0xFUL /*<< ICB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_ICB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + __IOM uint32_t VMASK1; /*!< Offset: 0x03C (R/W) Comparator Value Mask 1 */ + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + __IOM uint32_t VMASK3; /*!< Offset: 0x05C (R/W) Comparator Value Mask 3 */ + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED14[968U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup MemSysCtl_Type Memory System Control Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Memory System Control Registers (MEMSYSCTL) + @{ + */ + +/** + \brief Structure type to access the Memory System Control Registers (MEMSYSCTL). + */ +typedef struct +{ + __IOM uint32_t MSCR; /*!< Offset: 0x000 (R/W) Memory System Control Register */ + uint32_t RESERVED1[3U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x010 (R/W) ITCM Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x014 (R/W) DTCM Control Register */ + __IOM uint32_t PAHBCR; /*!< Offset: 0x018 (R/W) P-AHB Control Register */ + uint32_t RESERVED2[313U]; + __IOM uint32_t ITGU_CTRL; /*!< Offset: 0x500 (R/W) ITGU Control Register */ + __IOM uint32_t ITGU_CFG; /*!< Offset: 0x504 (R/W) ITGU Configuration Register */ + uint32_t RESERVED3[2U]; + __IOM uint32_t ITGU_LUT[16U]; /*!< Offset: 0x510 (R/W) ITGU Look Up Table Register */ + uint32_t RESERVED4[44U]; + __IOM uint32_t DTGU_CTRL; /*!< Offset: 0x600 (R/W) DTGU Control Registers */ + __IOM uint32_t DTGU_CFG; /*!< Offset: 0x604 (R/W) DTGU Configuration Register */ + uint32_t RESERVED5[2U]; + __IOM uint32_t DTGU_LUT[16U]; /*!< Offset: 0x610 (R/W) DTGU Look Up Table Register */ +} MemSysCtl_Type; + +/** \brief MemSysCtl Memory System Control Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_TECCCHKDIS_Pos 4U /*!< MEMSYSCTL MSCR: TECCCHKDIS Position */ +#define MEMSYSCTL_MSCR_TECCCHKDIS_Msk (1UL << MEMSYSCTL_MSCR_TECCCHKDIS_Pos) /*!< MEMSYSCTL MSCR: TECCCHKDIS Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/** \brief MemSysCtl ITCM Control Register Definitions */ +#define MEMSYSCTL_ITCMCR_SZ_Pos 3U /*!< MEMSYSCTL ITCMCR: SZ Position */ +#define MEMSYSCTL_ITCMCR_SZ_Msk (0xFUL << MEMSYSCTL_ITCMCR_SZ_Pos) /*!< MEMSYSCTL ITCMCR: SZ Mask */ + +#define MEMSYSCTL_ITCMCR_EN_Pos 0U /*!< MEMSYSCTL ITCMCR: EN Position */ +#define MEMSYSCTL_ITCMCR_EN_Msk (1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/** \brief MemSysCtl DTCM Control Register Definitions */ +#define MEMSYSCTL_DTCMCR_SZ_Pos 3U /*!< MEMSYSCTL DTCMCR: SZ Position */ +#define MEMSYSCTL_DTCMCR_SZ_Msk (0xFUL << MEMSYSCTL_DTCMCR_SZ_Pos) /*!< MEMSYSCTL DTCMCR: SZ Mask */ + +#define MEMSYSCTL_DTCMCR_EN_Pos 0U /*!< MEMSYSCTL DTCMCR: EN Position */ +#define MEMSYSCTL_DTCMCR_EN_Msk (1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/** \brief MemSysCtl P-AHB Control Register Definitions */ +#define MEMSYSCTL_PAHBCR_SZ_Pos 1U /*!< MEMSYSCTL PAHBCR: SZ Position */ +#define MEMSYSCTL_PAHBCR_SZ_Msk (0x7UL << MEMSYSCTL_PAHBCR_SZ_Pos) /*!< MEMSYSCTL PAHBCR: SZ Mask */ + +#define MEMSYSCTL_PAHBCR_EN_Pos 0U /*!< MEMSYSCTL PAHBCR: EN Position */ +#define MEMSYSCTL_PAHBCR_EN_Msk (1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/** \brief MemSysCtl ITGU Control Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (1UL << MEMSYSCTL_ITGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL ITGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL ITGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Msk (1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl ITGU Configuration Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (1UL << MEMSYSCTL_ITGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL ITGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL ITGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_ITGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL ITGU_CFG: BLKSZ Mask */ + +/** \brief MemSysCtl DTGU Control Registers Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (1UL << MEMSYSCTL_DTGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL DTGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL DTGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Msk (1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl DTGU Configuration Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (1UL << MEMSYSCTL_DTGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL DTGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL DTGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_DTGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL DTGU_CFG: BLKSZ Mask */ + +/*@}*/ /* end of group MemSysCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup DCAR_Type Direct Cache Access Registers + \brief Type definitions for the Direct Cache Access Registers (DCAR) + @{ + */ + +/** + \brief Structure type to access the Direct Cache Access Registers (DCAR). + */ +typedef struct +{ + __IM uint32_t DCADCRR; /*!< Offset: 0x000 (R/W) Direct Cache Access Data Cache Read Register */ + __IM uint32_t DCAICRR; /*!< Offset: 0x004 (R/W) Direct Cache Access Instruction Cache Read Register */ + uint32_t RESERVED1[2]; + __IOM uint32_t DCADCLR; /*!< Offset: 0x010 (R/W) Direct Cache Access Data Cache Location Registers */ + __IOM uint32_t DCAICLR; /*!< Offset: 0x014 (R/W) Direct Cache Access Instruction Cache Location Registers */ +} DCAR_Type; + +/*@}*/ /* end of group DCAR_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PwrModCtl_Type Power Mode Control Registers + \brief Type definitions for the Power Mode Control Registers (PWRMODCTL) + @{ + */ + +/** + \brief Structure type to access the Power Mode Control Registers (PWRMODCTL). + */ +typedef struct +{ + __IOM uint32_t CPDLPSTATE; /*!< Offset: 0x000 (R/W) Core Power Domain Low Power State Register */ + __IOM uint32_t DPDLPSTATE; /*!< Offset: 0x004 (R/W) Debug Power Domain Low Power State Register */ +} PwrModCtl_Type; + +/** \brief PwrModCtl Core Power Domain Low Power State Register Definitions */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos 8U /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos 0U /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk (0x3UL /*<< PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos*/) /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Mask */ + +/** \brief PwrModCtl Debug Power Domain Low Power State Register Definitions */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos 0U /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Position */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Msk (0x3UL /*<< PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos*/) /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Mask */ + +/*@}*/ /* end of group PwrModCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_Type External Wakeup Interrupt Controller Registers + \brief Type definitions for the External Wakeup Interrupt Controller Registers (EWIC) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller Registers (EWIC). + */ +typedef struct +{ + __IOM uint32_t EWIC_CR; /*!< Offset: 0x000 (R/W) EWIC Control Register */ + __IOM uint32_t EWIC_ASCR; /*!< Offset: 0x004 (R/W) EWIC Automatic Sequence Control Register */ + __OM uint32_t EWIC_CLRMASK; /*!< Offset: 0x008 ( /W) EWIC Clear Mask Register */ + __IM uint32_t EWIC_NUMID; /*!< Offset: 0x00C (R/ ) EWIC Event Number ID Register */ + uint32_t RESERVED0[124U]; + __IOM uint32_t EWIC_MASKA; /*!< Offset: 0x200 (R/W) EWIC MaskA Register */ + __IOM uint32_t EWIC_MASKn[15]; /*!< Offset: 0x204 (R/W) EWIC Maskn Registers */ + uint32_t RESERVED1[112U]; + __IM uint32_t EWIC_PENDA; /*!< Offset: 0x400 (R/ ) EWIC PendA Event Register */ + __IOM uint32_t EWIC_PENDn[15]; /*!< Offset: 0x404 (R/W) EWIC Pendn Event Registers */ + uint32_t RESERVED2[112U]; + __IM uint32_t EWIC_PSR; /*!< Offset: 0x600 (R/ ) EWIC Pend Summary Register */ +} EWIC_Type; + +/** \brief EWIC Control Register Definitions */ +#define EWIC_EWIC_CR_EN_Pos 0U /*!< EWIC EWIC_CR: EN Position */ +#define EWIC_EWIC_CR_EN_Msk (1UL /*<< EWIC_EWIC_CR_EN_Pos*/) /*!< EWIC EWIC_CR: EN Mask */ + +/** \brief EWIC Automatic Sequence Control Register Definitions */ +#define EWIC_EWIC_ASCR_ASPU_Pos 1U /*!< EWIC EWIC_ASCR: ASPU Position */ +#define EWIC_EWIC_ASCR_ASPU_Msk (1UL << EWIC_EWIC_ASCR_ASPU_Pos) /*!< EWIC EWIC_ASCR: ASPU Mask */ + +#define EWIC_EWIC_ASCR_ASPD_Pos 0U /*!< EWIC EWIC_ASCR: ASPD Position */ +#define EWIC_EWIC_ASCR_ASPD_Msk (1UL /*<< EWIC_EWIC_ASCR_ASPD_Pos*/) /*!< EWIC EWIC_ASCR: ASPD Mask */ + +/** \brief EWIC Event Number ID Register Definitions */ +#define EWIC_EWIC_NUMID_NUMEVENT_Pos 0U /*!< EWIC_NUMID: NUMEVENT Position */ +#define EWIC_EWIC_NUMID_NUMEVENT_Msk (0xFFFFUL /*<< EWIC_EWIC_NUMID_NUMEVENT_Pos*/) /*!< EWIC_NUMID: NUMEVENT Mask */ + +/** \brief EWIC Mask A Register Definitions */ +#define EWIC_EWIC_MASKA_EDBGREQ_Pos 2U /*!< EWIC EWIC_MASKA: EDBGREQ Position */ +#define EWIC_EWIC_MASKA_EDBGREQ_Msk (1UL << EWIC_EWIC_MASKA_EDBGREQ_Pos) /*!< EWIC EWIC_MASKA: EDBGREQ Mask */ + +#define EWIC_EWIC_MASKA_NMI_Pos 1U /*!< EWIC EWIC_MASKA: NMI Position */ +#define EWIC_EWIC_MASKA_NMI_Msk (1UL << EWIC_EWIC_MASKA_NMI_Pos) /*!< EWIC EWIC_MASKA: NMI Mask */ + +#define EWIC_EWIC_MASKA_EVENT_Pos 0U /*!< EWIC EWIC_MASKA: EVENT Position */ +#define EWIC_EWIC_MASKA_EVENT_Msk (1UL /*<< EWIC_EWIC_MASKA_EVENT_Pos*/) /*!< EWIC EWIC_MASKA: EVENT Mask */ + +/** \brief EWIC Mask n Register Definitions */ +#define EWIC_EWIC_MASKn_IRQ_Pos 0U /*!< EWIC EWIC_MASKn: IRQ Position */ +#define EWIC_EWIC_MASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_MASKn_IRQ_Pos*/) /*!< EWIC EWIC_MASKn: IRQ Mask */ + +/** \brief EWIC Pend A Register Definitions */ +#define EWIC_EWIC_PENDA_EDBGREQ_Pos 2U /*!< EWIC EWIC_PENDA: EDBGREQ Position */ +#define EWIC_EWIC_PENDA_EDBGREQ_Msk (1UL << EWIC_EWIC_PENDA_EDBGREQ_Pos) /*!< EWIC EWIC_PENDA: EDBGREQ Mask */ + +#define EWIC_EWIC_PENDA_NMI_Pos 1U /*!< EWIC EWIC_PENDA: NMI Position */ +#define EWIC_EWIC_PENDA_NMI_Msk (1UL << EWIC_EWIC_PENDA_NMI_Pos) /*!< EWIC EWIC_PENDA: NMI Mask */ + +#define EWIC_EWIC_PENDA_EVENT_Pos 0U /*!< EWIC EWIC_PENDA: EVENT Position */ +#define EWIC_EWIC_PENDA_EVENT_Msk (1UL /*<< EWIC_EWIC_PENDA_EVENT_Pos*/) /*!< EWIC EWIC_PENDA: EVENT Mask */ + +/** \brief EWIC Pend n Register Definitions */ +#define EWIC_EWIC_PENDn_IRQ_Pos 0U /*!< EWIC EWIC_PENDn: IRQ Position */ +#define EWIC_EWIC_PENDn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_PENDn_IRQ_Pos*/) /*!< EWIC EWIC_PENDn: IRQ Mask */ + +/** \brief EWIC Pend Summary Register Definitions */ +#define EWIC_EWIC_PSR_NZ_Pos 1U /*!< EWIC EWIC_PSR: NZ Position */ +#define EWIC_EWIC_PSR_NZ_Msk (0x7FFFUL << EWIC_EWIC_PSR_NZ_Pos) /*!< EWIC EWIC_PSR: NZ Mask */ + +#define EWIC_EWIC_PSR_NZA_Pos 0U /*!< EWIC EWIC_PSR: NZA Position */ +#define EWIC_EWIC_PSR_NZA_Msk (1UL /*<< EWIC_EWIC_PSR_NZA_Pos*/) /*!< EWIC EWIC_PSR: NZA Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_ISA_Type External Wakeup Interrupt Controller (EWIC) interrupt status access registers + \brief Type definitions for the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/ ) Event Mask A Register */ + __IM uint32_t EVENTMASKn[15]; /*!< Offset: 0x084 (R/ ) Event Mask Register */ +} EWIC_ISA_Type; + +/** \brief EWIC_ISA Event Set Pending Register Definitions */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTSPR: EDBGREQ Position */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTSPR_EDBGREQ_Pos) /*!< EWIC_ISA EVENTSPR: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTSPR_NMI_Pos 1U /*!< EWIC_ISA EVENTSPR: NMI Position */ +#define EWIC_ISA_EVENTSPR_NMI_Msk (1UL << EWIC_ISA_EVENTSPR_NMI_Pos) /*!< EWIC_ISA EVENTSPR: NMI Mask */ + +#define EWIC_ISA_EVENTSPR_EVENT_Pos 0U /*!< EWIC_ISA EVENTSPR: EVENT Position */ +#define EWIC_ISA_EVENTSPR_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTSPR_EVENT_Pos*/) /*!< EWIC_ISA EVENTSPR: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask A Register Definitions */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTMASKA: EDBGREQ Position */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC_ISA EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTMASKA_NMI_Pos 1U /*!< EWIC_ISA EVENTMASKA: NMI Position */ +#define EWIC_ISA_EVENTMASKA_NMI_Msk (1UL << EWIC_ISA_EVENTMASKA_NMI_Pos) /*!< EWIC_ISA EVENTMASKA: NMI Mask */ + +#define EWIC_ISA_EVENTMASKA_EVENT_Pos 0U /*!< EWIC_ISA EVENTMASKA: EVENT Position */ +#define EWIC_ISA_EVENTMASKA_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTMASKA_EVENT_Pos*/) /*!< EWIC_ISA EVENTMASKA: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask n Register Definitions */ +#define EWIC_ISA_EVENTMASKn_IRQ_Pos 0U /*!< EWIC_ISA EVENTMASKn: IRQ Position */ +#define EWIC_ISA_EVENTMASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_ISA_EVENTMASKn_IRQ_Pos*/) /*!< EWIC_ISA EVENTMASKn: IRQ Mask */ + +/*@}*/ /* end of group EWIC_ISA_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup ErrBnk_Type Error Banking Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Error Banking Registers (ERRBNK) + @{ + */ + +/** + \brief Structure type to access the Error Banking Registers (ERRBNK). + */ +typedef struct +{ + __IOM uint32_t IEBR0; /*!< Offset: 0x000 (R/W) Instruction Cache Error Bank Register 0 */ + __IOM uint32_t IEBR1; /*!< Offset: 0x004 (R/W) Instruction Cache Error Bank Register 1 */ + uint32_t RESERVED0[2U]; + __IOM uint32_t DEBR0; /*!< Offset: 0x010 (R/W) Data Cache Error Bank Register 0 */ + __IOM uint32_t DEBR1; /*!< Offset: 0x014 (R/W) Data Cache Error Bank Register 1 */ + uint32_t RESERVED1[2U]; + __IOM uint32_t TEBR0; /*!< Offset: 0x020 (R/W) TCM Error Bank Register 0 */ + __IM uint32_t TEBRDATA0; /*!< Offset: 0x024 (RO) Storage for corrected data that is associated with an error.*/ + __IOM uint32_t TEBR1; /*!< Offset: 0x028 (R/W) TCM Error Bank Register 1 */ + __IM uint32_t TEBRDATA1; /*!< Offset: 0x02c (RO) Storage for corrected data that is associated with an error.*/ +} ErrBnk_Type; + +/** \brief ErrBnk Instruction Cache Error Bank Register 0 Definitions */ +#define ERRBNK_IEBR0_SWDEF_Pos 30U /*!< ERRBNK IEBR0: SWDEF Position */ +#define ERRBNK_IEBR0_SWDEF_Msk (0x3UL << ERRBNK_IEBR0_SWDEF_Pos) /*!< ERRBNK IEBR0: SWDEF Mask */ + +#define ERRBNK_IEBR0_BANK_Pos 16U /*!< ERRBNK IEBR0: BANK Position */ +#define ERRBNK_IEBR0_BANK_Msk (1UL << ERRBNK_IEBR0_BANK_Pos) /*!< ERRBNK IEBR0: BANK Mask */ + +#define ERRBNK_IEBR0_LOCATION_Pos 2U /*!< ERRBNK IEBR0: LOCATION Position */ +#define ERRBNK_IEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR0_LOCATION_Pos) /*!< ERRBNK IEBR0: LOCATION Mask */ + +#define ERRBNK_IEBR0_LOCKED_Pos 1U /*!< ERRBNK IEBR0: LOCKED Position */ +#define ERRBNK_IEBR0_LOCKED_Msk (1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/** \brief ErrBnk Instruction Cache Error Bank Register 1 Definitions */ +#define ERRBNK_IEBR1_SWDEF_Pos 30U /*!< ERRBNK IEBR1: SWDEF Position */ +#define ERRBNK_IEBR1_SWDEF_Msk (0x3UL << ERRBNK_IEBR1_SWDEF_Pos) /*!< ERRBNK IEBR1: SWDEF Mask */ + +#define ERRBNK_IEBR1_BANK_Pos 16U /*!< ERRBNK IEBR1: BANK Position */ +#define ERRBNK_IEBR1_BANK_Msk (1UL << ERRBNK_IEBR1_BANK_Pos) /*!< ERRBNK IEBR1: BANK Mask */ + +#define ERRBNK_IEBR1_LOCATION_Pos 2U /*!< ERRBNK IEBR1: LOCATION Position */ +#define ERRBNK_IEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR1_LOCATION_Pos) /*!< ERRBNK IEBR1: LOCATION Mask */ + +#define ERRBNK_IEBR1_LOCKED_Pos 1U /*!< ERRBNK IEBR1: LOCKED Position */ +#define ERRBNK_IEBR1_LOCKED_Msk (1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 0 Definitions */ +#define ERRBNK_DEBR0_SWDEF_Pos 30U /*!< ERRBNK DEBR0: SWDEF Position */ +#define ERRBNK_DEBR0_SWDEF_Msk (0x3UL << ERRBNK_DEBR0_SWDEF_Pos) /*!< ERRBNK DEBR0: SWDEF Mask */ + +#define ERRBNK_DEBR0_TYPE_Pos 17U /*!< ERRBNK DEBR0: TYPE Position */ +#define ERRBNK_DEBR0_TYPE_Msk (1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (1UL << ERRBNK_DEBR0_BANK_Pos) /*!< ERRBNK DEBR0: BANK Mask */ + +#define ERRBNK_DEBR0_LOCATION_Pos 2U /*!< ERRBNK DEBR0: LOCATION Position */ +#define ERRBNK_DEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR0_LOCATION_Pos) /*!< ERRBNK DEBR0: LOCATION Mask */ + +#define ERRBNK_DEBR0_LOCKED_Pos 1U /*!< ERRBNK DEBR0: LOCKED Position */ +#define ERRBNK_DEBR0_LOCKED_Msk (1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 1 Definitions */ +#define ERRBNK_DEBR1_SWDEF_Pos 30U /*!< ERRBNK DEBR1: SWDEF Position */ +#define ERRBNK_DEBR1_SWDEF_Msk (0x3UL << ERRBNK_DEBR1_SWDEF_Pos) /*!< ERRBNK DEBR1: SWDEF Mask */ + +#define ERRBNK_DEBR1_TYPE_Pos 17U /*!< ERRBNK DEBR1: TYPE Position */ +#define ERRBNK_DEBR1_TYPE_Msk (1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (1UL << ERRBNK_DEBR1_BANK_Pos) /*!< ERRBNK DEBR1: BANK Mask */ + +#define ERRBNK_DEBR1_LOCATION_Pos 2U /*!< ERRBNK DEBR1: LOCATION Position */ +#define ERRBNK_DEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR1_LOCATION_Pos) /*!< ERRBNK DEBR1: LOCATION Mask */ + +#define ERRBNK_DEBR1_LOCKED_Pos 1U /*!< ERRBNK DEBR1: LOCKED Position */ +#define ERRBNK_DEBR1_LOCKED_Msk (1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 0 Definitions */ +#define ERRBNK_TEBR0_SWDEF_Pos 30U /*!< ERRBNK TEBR0: SWDEF Position */ +#define ERRBNK_TEBR0_SWDEF_Msk (0x3UL << ERRBNK_TEBR0_SWDEF_Pos) /*!< ERRBNK TEBR0: SWDEF Mask */ + +#define ERRBNK_TEBR0_POISON_Pos 27U /*!< ERRBNK TEBR0: POISON Position */ +#define ERRBNK_TEBR0_POISON_Msk (1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 26U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x3UL << ERRBNK_TEBR0_BANK_Pos) /*!< ERRBNK TEBR0: BANK Mask */ + +#define ERRBNK_TEBR0_LOCATION_Pos 2U /*!< ERRBNK TEBR0: LOCATION Position */ +#define ERRBNK_TEBR0_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR0_LOCATION_Pos) /*!< ERRBNK TEBR0: LOCATION Mask */ + +#define ERRBNK_TEBR0_LOCKED_Pos 1U /*!< ERRBNK TEBR0: LOCKED Position */ +#define ERRBNK_TEBR0_LOCKED_Msk (1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 1 Definitions */ +#define ERRBNK_TEBR1_SWDEF_Pos 30U /*!< ERRBNK TEBR1: SWDEF Position */ +#define ERRBNK_TEBR1_SWDEF_Msk (0x3UL << ERRBNK_TEBR1_SWDEF_Pos) /*!< ERRBNK TEBR1: SWDEF Mask */ + +#define ERRBNK_TEBR1_POISON_Pos 27U /*!< ERRBNK TEBR1: POISON Position */ +#define ERRBNK_TEBR1_POISON_Msk (1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 26U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x3UL << ERRBNK_TEBR1_BANK_Pos) /*!< ERRBNK TEBR1: BANK Mask */ + +#define ERRBNK_TEBR1_LOCATION_Pos 2U /*!< ERRBNK TEBR1: LOCATION Position */ +#define ERRBNK_TEBR1_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR1_LOCATION_Pos) /*!< ERRBNK TEBR1: LOCATION Mask */ + +#define ERRBNK_TEBR1_LOCKED_Pos 1U /*!< ERRBNK TEBR1: LOCKED Position */ +#define ERRBNK_TEBR1_LOCKED_Msk (1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (1UL << /*ERRBNK_TEBR1_VALID_Pos*/) /*!< ERRBNK TEBR1: VALID Mask */ + +/*@}*/ /* end of group ErrBnk_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PrcCfgInf_Type Processor Configuration Information Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Processor Configuration Information Registerss (PRCCFGINF) + @{ + */ + +/** + \brief Structure type to access the Processor Configuration Information Registerss (PRCCFGINF). + */ +typedef struct +{ + __OM uint32_t CFGINFOSEL; /*!< Offset: 0x000 ( /W) Processor Configuration Information Selection Register */ + __IM uint32_t CFGINFORD; /*!< Offset: 0x004 (R/ ) Processor Configuration Information Read Data Register */ +} PrcCfgInf_Type; + +/** \brief PrcCfgInf Processor Configuration Information Selection Register Definitions */ + +/** \brief PrcCfgInf Processor Configuration Information Read Data Register Definitions */ + +/*@}*/ /* end of group PrcCfgInf_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup STL_Type Software Test Library Observation Registers + \brief Type definitions for the Software Test Library Observation Registerss (STL) + @{ + */ + +/** + \brief Structure type to access the Software Test Library Observation Registerss (STL). + */ +typedef struct +{ + __IM uint32_t STLNVICPENDOR; /*!< Offset: 0x000 (R/ ) NVIC Pending Priority Tree Register */ + __IM uint32_t STLNVICACTVOR; /*!< Offset: 0x004 (R/ ) NVIC Active Priority Tree Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t STLIDMPUSR; /*!< Offset: 0x010 ( /W) MPU Sample Register */ + __IM uint32_t STLIMPUOR; /*!< Offset: 0x014 (R/ ) MPU Region Hit Register */ + __IM uint32_t STLDMPUOR; /*!< Offset: 0x018 (R/ ) MPU Memory Attributes Register */ + +} STL_Type; + +/** \brief STL NVIC Pending Priority Tree Register Definitions */ +#define STL_STLNVICPENDOR_VALID_Pos 18U /*!< STL STLNVICPENDOR: VALID Position */ +#define STL_STLNVICPENDOR_VALID_Msk (1UL << STL_STLNVICPENDOR_VALID_Pos) /*!< STL STLNVICPENDOR: VALID Mask */ + +#define STL_STLNVICPENDOR_TARGET_Pos 17U /*!< STL STLNVICPENDOR: TARGET Position */ +#define STL_STLNVICPENDOR_TARGET_Msk (1UL << STL_STLNVICPENDOR_TARGET_Pos) /*!< STL STLNVICPENDOR: TARGET Mask */ + +#define STL_STLNVICPENDOR_PRIORITY_Pos 9U /*!< STL STLNVICPENDOR: PRIORITY Position */ +#define STL_STLNVICPENDOR_PRIORITY_Msk (0xFFUL << STL_STLNVICPENDOR_PRIORITY_Pos) /*!< STL STLNVICPENDOR: PRIORITY Mask */ + +#define STL_STLNVICPENDOR_INTNUM_Pos 0U /*!< STL STLNVICPENDOR: INTNUM Position */ +#define STL_STLNVICPENDOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICPENDOR_INTNUM_Pos*/) /*!< STL STLNVICPENDOR: INTNUM Mask */ + +/** \brief STL NVIC Active Priority Tree Register Definitions */ +#define STL_STLNVICACTVOR_VALID_Pos 18U /*!< STL STLNVICACTVOR: VALID Position */ +#define STL_STLNVICACTVOR_VALID_Msk (1UL << STL_STLNVICACTVOR_VALID_Pos) /*!< STL STLNVICACTVOR: VALID Mask */ + +#define STL_STLNVICACTVOR_TARGET_Pos 17U /*!< STL STLNVICACTVOR: TARGET Position */ +#define STL_STLNVICACTVOR_TARGET_Msk (1UL << STL_STLNVICACTVOR_TARGET_Pos) /*!< STL STLNVICACTVOR: TARGET Mask */ + +#define STL_STLNVICACTVOR_PRIORITY_Pos 9U /*!< STL STLNVICACTVOR: PRIORITY Position */ +#define STL_STLNVICACTVOR_PRIORITY_Msk (0xFFUL << STL_STLNVICACTVOR_PRIORITY_Pos) /*!< STL STLNVICACTVOR: PRIORITY Mask */ + +#define STL_STLNVICACTVOR_INTNUM_Pos 0U /*!< STL STLNVICACTVOR: INTNUM Position */ +#define STL_STLNVICACTVOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICACTVOR_INTNUM_Pos*/) /*!< STL STLNVICACTVOR: INTNUM Mask */ + +/** \brief STL MPU Sample Register Definitions */ +#define STL_STLIDMPUSR_ADDR_Pos 5U /*!< STL STLIDMPUSR: ADDR Position */ +#define STL_STLIDMPUSR_ADDR_Msk (0x7FFFFFFUL << STL_STLIDMPUSR_ADDR_Pos) /*!< STL STLIDMPUSR: ADDR Mask */ + +#define STL_STLIDMPUSR_INSTR_Pos 2U /*!< STL STLIDMPUSR: INSTR Position */ +#define STL_STLIDMPUSR_INSTR_Msk (1UL << STL_STLIDMPUSR_INSTR_Pos) /*!< STL STLIDMPUSR: INSTR Mask */ + +#define STL_STLIDMPUSR_DATA_Pos 1U /*!< STL STLIDMPUSR: DATA Position */ +#define STL_STLIDMPUSR_DATA_Msk (1UL << STL_STLIDMPUSR_DATA_Pos) /*!< STL STLIDMPUSR: DATA Mask */ + +/** \brief STL MPU Region Hit Register Definitions */ +#define STL_STLIMPUOR_HITREGION_Pos 9U /*!< STL STLIMPUOR: HITREGION Position */ +#define STL_STLIMPUOR_HITREGION_Msk (0xFFUL << STL_STLIMPUOR_HITREGION_Pos) /*!< STL STLIMPUOR: HITREGION Mask */ + +#define STL_STLIMPUOR_ATTR_Pos 0U /*!< STL STLIMPUOR: ATTR Position */ +#define STL_STLIMPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLIMPUOR_ATTR_Pos*/) /*!< STL STLIMPUOR: ATTR Mask */ + +/** \brief STL MPU Memory Attributes Register Definitions */ +#define STL_STLDMPUOR_HITREGION_Pos 9U /*!< STL STLDMPUOR: HITREGION Position */ +#define STL_STLDMPUOR_HITREGION_Msk (0xFFUL << STL_STLDMPUOR_HITREGION_Pos) /*!< STL STLDMPUOR: HITREGION Mask */ + +#define STL_STLDMPUOR_ATTR_Pos 0U /*!< STL STLDMPUOR: ATTR Position */ +#define STL_STLDMPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLDMPUOR_ATTR_Pos*/) /*!< STL STLDMPUOR: ATTR Mask */ + +/*@}*/ /* end of group STL_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU Claim Tag Set Register Definitions */ +#define TPIU_CLAIMSET_SET_Pos 0U /*!< TPIU CLAIMSET: SET Position */ +#define TPIU_CLAIMSET_SET_Msk (0xFUL /*<< TPIU_CLAIMSET_SET_Pos*/) /*!< TPIU CLAIMSET: SET Mask */ + +/** \brief TPIU Claim Tag Clear Register Definitions */ +#define TPIU_CLAIMCLR_CLR_Pos 0U /*!< TPIU CLAIMCLR: CLR Position */ +#define TPIU_CLAIMCLR_CLR_Msk (0xFUL /*<< TPIU_CLAIMCLR_CLR_Pos*/) /*!< TPIU CLAIMCLR: CLR Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) + \brief Type definitions for the Performance Monitoring Unit (PMU) + @{ + */ + +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x0 (R/W) Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) Event Type and Filter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED2[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ +} PMU_Type; + +/** \brief PMU Event Counter Registers (0-30) Definitions */ +#define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ +#define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ + +/** \brief PMU Event Type and Filter Registers (0-30) Definitions */ +#define PMU_EVTYPER_EVENTTOCNT_Pos 0U /*!< PMU EVTYPER: Event to Count Position */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ + +/** \brief PMU Count Enable Set Register Definitions */ +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENSET: Event Counter 0 Enable Set Position */ +#define PMU_CNTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENSET_CNT0_ENABLE_Pos*/) /*!< PMU CNTENSET: Event Counter 0 Enable Set Mask */ + +#define PMU_CNTENSET_CNT1_ENABLE_Pos 1U /*!< PMU CNTENSET: Event Counter 1 Enable Set Position */ +#define PMU_CNTENSET_CNT1_ENABLE_Msk (1UL << PMU_CNTENSET_CNT1_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 1 Enable Set Mask */ + +#define PMU_CNTENSET_CNT2_ENABLE_Pos 2U /*!< PMU CNTENSET: Event Counter 2 Enable Set Position */ +#define PMU_CNTENSET_CNT2_ENABLE_Msk (1UL << PMU_CNTENSET_CNT2_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 2 Enable Set Mask */ + +#define PMU_CNTENSET_CNT3_ENABLE_Pos 3U /*!< PMU CNTENSET: Event Counter 3 Enable Set Position */ +#define PMU_CNTENSET_CNT3_ENABLE_Msk (1UL << PMU_CNTENSET_CNT3_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 3 Enable Set Mask */ + +#define PMU_CNTENSET_CNT4_ENABLE_Pos 4U /*!< PMU CNTENSET: Event Counter 4 Enable Set Position */ +#define PMU_CNTENSET_CNT4_ENABLE_Msk (1UL << PMU_CNTENSET_CNT4_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 4 Enable Set Mask */ + +#define PMU_CNTENSET_CNT5_ENABLE_Pos 5U /*!< PMU CNTENSET: Event Counter 5 Enable Set Position */ +#define PMU_CNTENSET_CNT5_ENABLE_Msk (1UL << PMU_CNTENSET_CNT5_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 5 Enable Set Mask */ + +#define PMU_CNTENSET_CNT6_ENABLE_Pos 6U /*!< PMU CNTENSET: Event Counter 6 Enable Set Position */ +#define PMU_CNTENSET_CNT6_ENABLE_Msk (1UL << PMU_CNTENSET_CNT6_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 6 Enable Set Mask */ + +#define PMU_CNTENSET_CNT7_ENABLE_Pos 7U /*!< PMU CNTENSET: Event Counter 7 Enable Set Position */ +#define PMU_CNTENSET_CNT7_ENABLE_Msk (1UL << PMU_CNTENSET_CNT7_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 7 Enable Set Mask */ + +#define PMU_CNTENSET_CNT8_ENABLE_Pos 8U /*!< PMU CNTENSET: Event Counter 8 Enable Set Position */ +#define PMU_CNTENSET_CNT8_ENABLE_Msk (1UL << PMU_CNTENSET_CNT8_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 8 Enable Set Mask */ + +#define PMU_CNTENSET_CNT9_ENABLE_Pos 9U /*!< PMU CNTENSET: Event Counter 9 Enable Set Position */ +#define PMU_CNTENSET_CNT9_ENABLE_Msk (1UL << PMU_CNTENSET_CNT9_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 9 Enable Set Mask */ + +#define PMU_CNTENSET_CNT10_ENABLE_Pos 10U /*!< PMU CNTENSET: Event Counter 10 Enable Set Position */ +#define PMU_CNTENSET_CNT10_ENABLE_Msk (1UL << PMU_CNTENSET_CNT10_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 10 Enable Set Mask */ + +#define PMU_CNTENSET_CNT11_ENABLE_Pos 11U /*!< PMU CNTENSET: Event Counter 11 Enable Set Position */ +#define PMU_CNTENSET_CNT11_ENABLE_Msk (1UL << PMU_CNTENSET_CNT11_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 11 Enable Set Mask */ + +#define PMU_CNTENSET_CNT12_ENABLE_Pos 12U /*!< PMU CNTENSET: Event Counter 12 Enable Set Position */ +#define PMU_CNTENSET_CNT12_ENABLE_Msk (1UL << PMU_CNTENSET_CNT12_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 12 Enable Set Mask */ + +#define PMU_CNTENSET_CNT13_ENABLE_Pos 13U /*!< PMU CNTENSET: Event Counter 13 Enable Set Position */ +#define PMU_CNTENSET_CNT13_ENABLE_Msk (1UL << PMU_CNTENSET_CNT13_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 13 Enable Set Mask */ + +#define PMU_CNTENSET_CNT14_ENABLE_Pos 14U /*!< PMU CNTENSET: Event Counter 14 Enable Set Position */ +#define PMU_CNTENSET_CNT14_ENABLE_Msk (1UL << PMU_CNTENSET_CNT14_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 14 Enable Set Mask */ + +#define PMU_CNTENSET_CNT15_ENABLE_Pos 15U /*!< PMU CNTENSET: Event Counter 15 Enable Set Position */ +#define PMU_CNTENSET_CNT15_ENABLE_Msk (1UL << PMU_CNTENSET_CNT15_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 15 Enable Set Mask */ + +#define PMU_CNTENSET_CNT16_ENABLE_Pos 16U /*!< PMU CNTENSET: Event Counter 16 Enable Set Position */ +#define PMU_CNTENSET_CNT16_ENABLE_Msk (1UL << PMU_CNTENSET_CNT16_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 16 Enable Set Mask */ + +#define PMU_CNTENSET_CNT17_ENABLE_Pos 17U /*!< PMU CNTENSET: Event Counter 17 Enable Set Position */ +#define PMU_CNTENSET_CNT17_ENABLE_Msk (1UL << PMU_CNTENSET_CNT17_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 17 Enable Set Mask */ + +#define PMU_CNTENSET_CNT18_ENABLE_Pos 18U /*!< PMU CNTENSET: Event Counter 18 Enable Set Position */ +#define PMU_CNTENSET_CNT18_ENABLE_Msk (1UL << PMU_CNTENSET_CNT18_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 18 Enable Set Mask */ + +#define PMU_CNTENSET_CNT19_ENABLE_Pos 19U /*!< PMU CNTENSET: Event Counter 19 Enable Set Position */ +#define PMU_CNTENSET_CNT19_ENABLE_Msk (1UL << PMU_CNTENSET_CNT19_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 19 Enable Set Mask */ + +#define PMU_CNTENSET_CNT20_ENABLE_Pos 20U /*!< PMU CNTENSET: Event Counter 20 Enable Set Position */ +#define PMU_CNTENSET_CNT20_ENABLE_Msk (1UL << PMU_CNTENSET_CNT20_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 20 Enable Set Mask */ + +#define PMU_CNTENSET_CNT21_ENABLE_Pos 21U /*!< PMU CNTENSET: Event Counter 21 Enable Set Position */ +#define PMU_CNTENSET_CNT21_ENABLE_Msk (1UL << PMU_CNTENSET_CNT21_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 21 Enable Set Mask */ + +#define PMU_CNTENSET_CNT22_ENABLE_Pos 22U /*!< PMU CNTENSET: Event Counter 22 Enable Set Position */ +#define PMU_CNTENSET_CNT22_ENABLE_Msk (1UL << PMU_CNTENSET_CNT22_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 22 Enable Set Mask */ + +#define PMU_CNTENSET_CNT23_ENABLE_Pos 23U /*!< PMU CNTENSET: Event Counter 23 Enable Set Position */ +#define PMU_CNTENSET_CNT23_ENABLE_Msk (1UL << PMU_CNTENSET_CNT23_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 23 Enable Set Mask */ + +#define PMU_CNTENSET_CNT24_ENABLE_Pos 24U /*!< PMU CNTENSET: Event Counter 24 Enable Set Position */ +#define PMU_CNTENSET_CNT24_ENABLE_Msk (1UL << PMU_CNTENSET_CNT24_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 24 Enable Set Mask */ + +#define PMU_CNTENSET_CNT25_ENABLE_Pos 25U /*!< PMU CNTENSET: Event Counter 25 Enable Set Position */ +#define PMU_CNTENSET_CNT25_ENABLE_Msk (1UL << PMU_CNTENSET_CNT25_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 25 Enable Set Mask */ + +#define PMU_CNTENSET_CNT26_ENABLE_Pos 26U /*!< PMU CNTENSET: Event Counter 26 Enable Set Position */ +#define PMU_CNTENSET_CNT26_ENABLE_Msk (1UL << PMU_CNTENSET_CNT26_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 26 Enable Set Mask */ + +#define PMU_CNTENSET_CNT27_ENABLE_Pos 27U /*!< PMU CNTENSET: Event Counter 27 Enable Set Position */ +#define PMU_CNTENSET_CNT27_ENABLE_Msk (1UL << PMU_CNTENSET_CNT27_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 27 Enable Set Mask */ + +#define PMU_CNTENSET_CNT28_ENABLE_Pos 28U /*!< PMU CNTENSET: Event Counter 28 Enable Set Position */ +#define PMU_CNTENSET_CNT28_ENABLE_Msk (1UL << PMU_CNTENSET_CNT28_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 28 Enable Set Mask */ + +#define PMU_CNTENSET_CNT29_ENABLE_Pos 29U /*!< PMU CNTENSET: Event Counter 29 Enable Set Position */ +#define PMU_CNTENSET_CNT29_ENABLE_Msk (1UL << PMU_CNTENSET_CNT29_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 29 Enable Set Mask */ + +#define PMU_CNTENSET_CNT30_ENABLE_Pos 30U /*!< PMU CNTENSET: Event Counter 30 Enable Set Position */ +#define PMU_CNTENSET_CNT30_ENABLE_Msk (1UL << PMU_CNTENSET_CNT30_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 30 Enable Set Mask */ + +#define PMU_CNTENSET_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENSET: Cycle Counter Enable Set Position */ +#define PMU_CNTENSET_CCNTR_ENABLE_Msk (1UL << PMU_CNTENSET_CCNTR_ENABLE_Pos) /*!< PMU CNTENSET: Cycle Counter Enable Set Mask */ + +/** \brief PMU Count Enable Clear Register Definitions */ +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Position */ +#define PMU_CNTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU CNTENCLR: Event Counter 1 Enable Clear Position */ +#define PMU_CNTENCLR_CNT1_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT1_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 1 Enable Clear */ + +#define PMU_CNTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Position */ +#define PMU_CNTENCLR_CNT2_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT2_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Position */ +#define PMU_CNTENCLR_CNT3_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT3_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Position */ +#define PMU_CNTENCLR_CNT4_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT4_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Position */ +#define PMU_CNTENCLR_CNT5_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT5_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Position */ +#define PMU_CNTENCLR_CNT6_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT6_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Position */ +#define PMU_CNTENCLR_CNT7_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT7_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Position */ +#define PMU_CNTENCLR_CNT8_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT8_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Position */ +#define PMU_CNTENCLR_CNT9_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT9_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Position */ +#define PMU_CNTENCLR_CNT10_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT10_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Position */ +#define PMU_CNTENCLR_CNT11_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT11_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Position */ +#define PMU_CNTENCLR_CNT12_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT12_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Position */ +#define PMU_CNTENCLR_CNT13_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT13_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Position */ +#define PMU_CNTENCLR_CNT14_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT14_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Position */ +#define PMU_CNTENCLR_CNT15_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT15_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Position */ +#define PMU_CNTENCLR_CNT16_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT16_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Position */ +#define PMU_CNTENCLR_CNT17_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT17_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Position */ +#define PMU_CNTENCLR_CNT18_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT18_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Position */ +#define PMU_CNTENCLR_CNT19_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT19_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Position */ +#define PMU_CNTENCLR_CNT20_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT20_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Position */ +#define PMU_CNTENCLR_CNT21_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT21_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Position */ +#define PMU_CNTENCLR_CNT22_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT22_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Position */ +#define PMU_CNTENCLR_CNT23_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT23_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Position */ +#define PMU_CNTENCLR_CNT24_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT24_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Position */ +#define PMU_CNTENCLR_CNT25_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT25_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Position */ +#define PMU_CNTENCLR_CNT26_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT26_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Position */ +#define PMU_CNTENCLR_CNT27_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT27_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Position */ +#define PMU_CNTENCLR_CNT28_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT28_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Position */ +#define PMU_CNTENCLR_CNT29_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT29_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Position */ +#define PMU_CNTENCLR_CNT30_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT30_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Mask */ + +#define PMU_CNTENCLR_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENCLR: Cycle Counter Enable Clear Position */ +#define PMU_CNTENCLR_CCNTR_ENABLE_Msk (1UL << PMU_CNTENCLR_CCNTR_ENABLE_Pos) /*!< PMU CNTENCLR: Cycle Counter Enable Clear Mask */ + +/** \brief PMU Interrupt Enable Set Register Definitions */ +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENSET_CNT0_ENABLE_Pos*/) /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT1_ENABLE_Pos 1U /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT1_ENABLE_Msk (1UL << PMU_INTENSET_CNT1_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT2_ENABLE_Pos 2U /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT2_ENABLE_Msk (1UL << PMU_INTENSET_CNT2_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT3_ENABLE_Pos 3U /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT3_ENABLE_Msk (1UL << PMU_INTENSET_CNT3_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT4_ENABLE_Pos 4U /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT4_ENABLE_Msk (1UL << PMU_INTENSET_CNT4_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT5_ENABLE_Pos 5U /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT5_ENABLE_Msk (1UL << PMU_INTENSET_CNT5_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT6_ENABLE_Pos 6U /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT6_ENABLE_Msk (1UL << PMU_INTENSET_CNT6_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT7_ENABLE_Pos 7U /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT7_ENABLE_Msk (1UL << PMU_INTENSET_CNT7_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT8_ENABLE_Pos 8U /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT8_ENABLE_Msk (1UL << PMU_INTENSET_CNT8_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT9_ENABLE_Pos 9U /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT9_ENABLE_Msk (1UL << PMU_INTENSET_CNT9_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT10_ENABLE_Pos 10U /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT10_ENABLE_Msk (1UL << PMU_INTENSET_CNT10_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT11_ENABLE_Pos 11U /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT11_ENABLE_Msk (1UL << PMU_INTENSET_CNT11_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT12_ENABLE_Pos 12U /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT12_ENABLE_Msk (1UL << PMU_INTENSET_CNT12_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT13_ENABLE_Pos 13U /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT13_ENABLE_Msk (1UL << PMU_INTENSET_CNT13_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT14_ENABLE_Pos 14U /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT14_ENABLE_Msk (1UL << PMU_INTENSET_CNT14_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT15_ENABLE_Pos 15U /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT15_ENABLE_Msk (1UL << PMU_INTENSET_CNT15_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT16_ENABLE_Pos 16U /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT16_ENABLE_Msk (1UL << PMU_INTENSET_CNT16_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT17_ENABLE_Pos 17U /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT17_ENABLE_Msk (1UL << PMU_INTENSET_CNT17_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT18_ENABLE_Pos 18U /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT18_ENABLE_Msk (1UL << PMU_INTENSET_CNT18_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT19_ENABLE_Pos 19U /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT19_ENABLE_Msk (1UL << PMU_INTENSET_CNT19_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT20_ENABLE_Pos 20U /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT20_ENABLE_Msk (1UL << PMU_INTENSET_CNT20_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT21_ENABLE_Pos 21U /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT21_ENABLE_Msk (1UL << PMU_INTENSET_CNT21_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT22_ENABLE_Pos 22U /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT22_ENABLE_Msk (1UL << PMU_INTENSET_CNT22_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT23_ENABLE_Pos 23U /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT23_ENABLE_Msk (1UL << PMU_INTENSET_CNT23_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT24_ENABLE_Pos 24U /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT24_ENABLE_Msk (1UL << PMU_INTENSET_CNT24_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT25_ENABLE_Pos 25U /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT25_ENABLE_Msk (1UL << PMU_INTENSET_CNT25_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT26_ENABLE_Pos 26U /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT26_ENABLE_Msk (1UL << PMU_INTENSET_CNT26_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT27_ENABLE_Pos 27U /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT27_ENABLE_Msk (1UL << PMU_INTENSET_CNT27_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT28_ENABLE_Pos 28U /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT28_ENABLE_Msk (1UL << PMU_INTENSET_CNT28_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT29_ENABLE_Pos 29U /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT29_ENABLE_Msk (1UL << PMU_INTENSET_CNT29_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT30_ENABLE_Pos 30U /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT30_ENABLE_Msk (1UL << PMU_INTENSET_CNT30_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Position */ +#define PMU_INTENSET_CCYCNT_ENABLE_Msk (1UL << PMU_INTENSET_CYCCNT_ENABLE_Pos) /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Mask */ + +/** \brief PMU Interrupt Enable Clear Register Definitions */ +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT1_ENABLE_Msk (1UL << PMU_INTENCLR_CNT1_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear */ + +#define PMU_INTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT2_ENABLE_Msk (1UL << PMU_INTENCLR_CNT2_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT3_ENABLE_Msk (1UL << PMU_INTENCLR_CNT3_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT4_ENABLE_Msk (1UL << PMU_INTENCLR_CNT4_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT5_ENABLE_Msk (1UL << PMU_INTENCLR_CNT5_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT6_ENABLE_Msk (1UL << PMU_INTENCLR_CNT6_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT7_ENABLE_Msk (1UL << PMU_INTENCLR_CNT7_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT8_ENABLE_Msk (1UL << PMU_INTENCLR_CNT8_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT9_ENABLE_Msk (1UL << PMU_INTENCLR_CNT9_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT10_ENABLE_Msk (1UL << PMU_INTENCLR_CNT10_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT11_ENABLE_Msk (1UL << PMU_INTENCLR_CNT11_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT12_ENABLE_Msk (1UL << PMU_INTENCLR_CNT12_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT13_ENABLE_Msk (1UL << PMU_INTENCLR_CNT13_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT14_ENABLE_Msk (1UL << PMU_INTENCLR_CNT14_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT15_ENABLE_Msk (1UL << PMU_INTENCLR_CNT15_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT16_ENABLE_Msk (1UL << PMU_INTENCLR_CNT16_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT17_ENABLE_Msk (1UL << PMU_INTENCLR_CNT17_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT18_ENABLE_Msk (1UL << PMU_INTENCLR_CNT18_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT19_ENABLE_Msk (1UL << PMU_INTENCLR_CNT19_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT20_ENABLE_Msk (1UL << PMU_INTENCLR_CNT20_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT21_ENABLE_Msk (1UL << PMU_INTENCLR_CNT21_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT22_ENABLE_Msk (1UL << PMU_INTENCLR_CNT22_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT23_ENABLE_Msk (1UL << PMU_INTENCLR_CNT23_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT24_ENABLE_Msk (1UL << PMU_INTENCLR_CNT24_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT25_ENABLE_Msk (1UL << PMU_INTENCLR_CNT25_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT26_ENABLE_Msk (1UL << PMU_INTENCLR_CNT26_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT27_ENABLE_Msk (1UL << PMU_INTENCLR_CNT27_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT28_ENABLE_Msk (1UL << PMU_INTENCLR_CNT28_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT29_ENABLE_Msk (1UL << PMU_INTENCLR_CNT29_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT30_ENABLE_Msk (1UL << PMU_INTENCLR_CNT30_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CYCCNT_ENABLE_Msk (1UL << PMU_INTENCLR_CYCCNT_ENABLE_Pos) /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Mask */ + +/** \brief PMU Overflow Flag Status Set Register Definitions */ +#define PMU_OVSSET_CNT0_STATUS_Pos 0U /*!< PMU OVSSET: Event Counter 0 Overflow Set Position */ +#define PMU_OVSSET_CNT0_STATUS_Msk (1UL /*<< PMU_OVSSET_CNT0_STATUS_Pos*/) /*!< PMU OVSSET: Event Counter 0 Overflow Set Mask */ + +#define PMU_OVSSET_CNT1_STATUS_Pos 1U /*!< PMU OVSSET: Event Counter 1 Overflow Set Position */ +#define PMU_OVSSET_CNT1_STATUS_Msk (1UL << PMU_OVSSET_CNT1_STATUS_Pos) /*!< PMU OVSSET: Event Counter 1 Overflow Set Mask */ + +#define PMU_OVSSET_CNT2_STATUS_Pos 2U /*!< PMU OVSSET: Event Counter 2 Overflow Set Position */ +#define PMU_OVSSET_CNT2_STATUS_Msk (1UL << PMU_OVSSET_CNT2_STATUS_Pos) /*!< PMU OVSSET: Event Counter 2 Overflow Set Mask */ + +#define PMU_OVSSET_CNT3_STATUS_Pos 3U /*!< PMU OVSSET: Event Counter 3 Overflow Set Position */ +#define PMU_OVSSET_CNT3_STATUS_Msk (1UL << PMU_OVSSET_CNT3_STATUS_Pos) /*!< PMU OVSSET: Event Counter 3 Overflow Set Mask */ + +#define PMU_OVSSET_CNT4_STATUS_Pos 4U /*!< PMU OVSSET: Event Counter 4 Overflow Set Position */ +#define PMU_OVSSET_CNT4_STATUS_Msk (1UL << PMU_OVSSET_CNT4_STATUS_Pos) /*!< PMU OVSSET: Event Counter 4 Overflow Set Mask */ + +#define PMU_OVSSET_CNT5_STATUS_Pos 5U /*!< PMU OVSSET: Event Counter 5 Overflow Set Position */ +#define PMU_OVSSET_CNT5_STATUS_Msk (1UL << PMU_OVSSET_CNT5_STATUS_Pos) /*!< PMU OVSSET: Event Counter 5 Overflow Set Mask */ + +#define PMU_OVSSET_CNT6_STATUS_Pos 6U /*!< PMU OVSSET: Event Counter 6 Overflow Set Position */ +#define PMU_OVSSET_CNT6_STATUS_Msk (1UL << PMU_OVSSET_CNT6_STATUS_Pos) /*!< PMU OVSSET: Event Counter 6 Overflow Set Mask */ + +#define PMU_OVSSET_CNT7_STATUS_Pos 7U /*!< PMU OVSSET: Event Counter 7 Overflow Set Position */ +#define PMU_OVSSET_CNT7_STATUS_Msk (1UL << PMU_OVSSET_CNT7_STATUS_Pos) /*!< PMU OVSSET: Event Counter 7 Overflow Set Mask */ + +#define PMU_OVSSET_CNT8_STATUS_Pos 8U /*!< PMU OVSSET: Event Counter 8 Overflow Set Position */ +#define PMU_OVSSET_CNT8_STATUS_Msk (1UL << PMU_OVSSET_CNT8_STATUS_Pos) /*!< PMU OVSSET: Event Counter 8 Overflow Set Mask */ + +#define PMU_OVSSET_CNT9_STATUS_Pos 9U /*!< PMU OVSSET: Event Counter 9 Overflow Set Position */ +#define PMU_OVSSET_CNT9_STATUS_Msk (1UL << PMU_OVSSET_CNT9_STATUS_Pos) /*!< PMU OVSSET: Event Counter 9 Overflow Set Mask */ + +#define PMU_OVSSET_CNT10_STATUS_Pos 10U /*!< PMU OVSSET: Event Counter 10 Overflow Set Position */ +#define PMU_OVSSET_CNT10_STATUS_Msk (1UL << PMU_OVSSET_CNT10_STATUS_Pos) /*!< PMU OVSSET: Event Counter 10 Overflow Set Mask */ + +#define PMU_OVSSET_CNT11_STATUS_Pos 11U /*!< PMU OVSSET: Event Counter 11 Overflow Set Position */ +#define PMU_OVSSET_CNT11_STATUS_Msk (1UL << PMU_OVSSET_CNT11_STATUS_Pos) /*!< PMU OVSSET: Event Counter 11 Overflow Set Mask */ + +#define PMU_OVSSET_CNT12_STATUS_Pos 12U /*!< PMU OVSSET: Event Counter 12 Overflow Set Position */ +#define PMU_OVSSET_CNT12_STATUS_Msk (1UL << PMU_OVSSET_CNT12_STATUS_Pos) /*!< PMU OVSSET: Event Counter 12 Overflow Set Mask */ + +#define PMU_OVSSET_CNT13_STATUS_Pos 13U /*!< PMU OVSSET: Event Counter 13 Overflow Set Position */ +#define PMU_OVSSET_CNT13_STATUS_Msk (1UL << PMU_OVSSET_CNT13_STATUS_Pos) /*!< PMU OVSSET: Event Counter 13 Overflow Set Mask */ + +#define PMU_OVSSET_CNT14_STATUS_Pos 14U /*!< PMU OVSSET: Event Counter 14 Overflow Set Position */ +#define PMU_OVSSET_CNT14_STATUS_Msk (1UL << PMU_OVSSET_CNT14_STATUS_Pos) /*!< PMU OVSSET: Event Counter 14 Overflow Set Mask */ + +#define PMU_OVSSET_CNT15_STATUS_Pos 15U /*!< PMU OVSSET: Event Counter 15 Overflow Set Position */ +#define PMU_OVSSET_CNT15_STATUS_Msk (1UL << PMU_OVSSET_CNT15_STATUS_Pos) /*!< PMU OVSSET: Event Counter 15 Overflow Set Mask */ + +#define PMU_OVSSET_CNT16_STATUS_Pos 16U /*!< PMU OVSSET: Event Counter 16 Overflow Set Position */ +#define PMU_OVSSET_CNT16_STATUS_Msk (1UL << PMU_OVSSET_CNT16_STATUS_Pos) /*!< PMU OVSSET: Event Counter 16 Overflow Set Mask */ + +#define PMU_OVSSET_CNT17_STATUS_Pos 17U /*!< PMU OVSSET: Event Counter 17 Overflow Set Position */ +#define PMU_OVSSET_CNT17_STATUS_Msk (1UL << PMU_OVSSET_CNT17_STATUS_Pos) /*!< PMU OVSSET: Event Counter 17 Overflow Set Mask */ + +#define PMU_OVSSET_CNT18_STATUS_Pos 18U /*!< PMU OVSSET: Event Counter 18 Overflow Set Position */ +#define PMU_OVSSET_CNT18_STATUS_Msk (1UL << PMU_OVSSET_CNT18_STATUS_Pos) /*!< PMU OVSSET: Event Counter 18 Overflow Set Mask */ + +#define PMU_OVSSET_CNT19_STATUS_Pos 19U /*!< PMU OVSSET: Event Counter 19 Overflow Set Position */ +#define PMU_OVSSET_CNT19_STATUS_Msk (1UL << PMU_OVSSET_CNT19_STATUS_Pos) /*!< PMU OVSSET: Event Counter 19 Overflow Set Mask */ + +#define PMU_OVSSET_CNT20_STATUS_Pos 20U /*!< PMU OVSSET: Event Counter 20 Overflow Set Position */ +#define PMU_OVSSET_CNT20_STATUS_Msk (1UL << PMU_OVSSET_CNT20_STATUS_Pos) /*!< PMU OVSSET: Event Counter 20 Overflow Set Mask */ + +#define PMU_OVSSET_CNT21_STATUS_Pos 21U /*!< PMU OVSSET: Event Counter 21 Overflow Set Position */ +#define PMU_OVSSET_CNT21_STATUS_Msk (1UL << PMU_OVSSET_CNT21_STATUS_Pos) /*!< PMU OVSSET: Event Counter 21 Overflow Set Mask */ + +#define PMU_OVSSET_CNT22_STATUS_Pos 22U /*!< PMU OVSSET: Event Counter 22 Overflow Set Position */ +#define PMU_OVSSET_CNT22_STATUS_Msk (1UL << PMU_OVSSET_CNT22_STATUS_Pos) /*!< PMU OVSSET: Event Counter 22 Overflow Set Mask */ + +#define PMU_OVSSET_CNT23_STATUS_Pos 23U /*!< PMU OVSSET: Event Counter 23 Overflow Set Position */ +#define PMU_OVSSET_CNT23_STATUS_Msk (1UL << PMU_OVSSET_CNT23_STATUS_Pos) /*!< PMU OVSSET: Event Counter 23 Overflow Set Mask */ + +#define PMU_OVSSET_CNT24_STATUS_Pos 24U /*!< PMU OVSSET: Event Counter 24 Overflow Set Position */ +#define PMU_OVSSET_CNT24_STATUS_Msk (1UL << PMU_OVSSET_CNT24_STATUS_Pos) /*!< PMU OVSSET: Event Counter 24 Overflow Set Mask */ + +#define PMU_OVSSET_CNT25_STATUS_Pos 25U /*!< PMU OVSSET: Event Counter 25 Overflow Set Position */ +#define PMU_OVSSET_CNT25_STATUS_Msk (1UL << PMU_OVSSET_CNT25_STATUS_Pos) /*!< PMU OVSSET: Event Counter 25 Overflow Set Mask */ + +#define PMU_OVSSET_CNT26_STATUS_Pos 26U /*!< PMU OVSSET: Event Counter 26 Overflow Set Position */ +#define PMU_OVSSET_CNT26_STATUS_Msk (1UL << PMU_OVSSET_CNT26_STATUS_Pos) /*!< PMU OVSSET: Event Counter 26 Overflow Set Mask */ + +#define PMU_OVSSET_CNT27_STATUS_Pos 27U /*!< PMU OVSSET: Event Counter 27 Overflow Set Position */ +#define PMU_OVSSET_CNT27_STATUS_Msk (1UL << PMU_OVSSET_CNT27_STATUS_Pos) /*!< PMU OVSSET: Event Counter 27 Overflow Set Mask */ + +#define PMU_OVSSET_CNT28_STATUS_Pos 28U /*!< PMU OVSSET: Event Counter 28 Overflow Set Position */ +#define PMU_OVSSET_CNT28_STATUS_Msk (1UL << PMU_OVSSET_CNT28_STATUS_Pos) /*!< PMU OVSSET: Event Counter 28 Overflow Set Mask */ + +#define PMU_OVSSET_CNT29_STATUS_Pos 29U /*!< PMU OVSSET: Event Counter 29 Overflow Set Position */ +#define PMU_OVSSET_CNT29_STATUS_Msk (1UL << PMU_OVSSET_CNT29_STATUS_Pos) /*!< PMU OVSSET: Event Counter 29 Overflow Set Mask */ + +#define PMU_OVSSET_CNT30_STATUS_Pos 30U /*!< PMU OVSSET: Event Counter 30 Overflow Set Position */ +#define PMU_OVSSET_CNT30_STATUS_Msk (1UL << PMU_OVSSET_CNT30_STATUS_Pos) /*!< PMU OVSSET: Event Counter 30 Overflow Set Mask */ + +#define PMU_OVSSET_CYCCNT_STATUS_Pos 31U /*!< PMU OVSSET: Cycle Counter Overflow Set Position */ +#define PMU_OVSSET_CYCCNT_STATUS_Msk (1UL << PMU_OVSSET_CYCCNT_STATUS_Pos) /*!< PMU OVSSET: Cycle Counter Overflow Set Mask */ + +/** \brief PMU Overflow Flag Status Clear Register Definitions */ +#define PMU_OVSCLR_CNT0_STATUS_Pos 0U /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Position */ +#define PMU_OVSCLR_CNT0_STATUS_Msk (1UL /*<< PMU_OVSCLR_CNT0_STATUS_Pos*/) /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT1_STATUS_Pos 1U /*!< PMU OVSCLR: Event Counter 1 Overflow Clear Position */ +#define PMU_OVSCLR_CNT1_STATUS_Msk (1UL << PMU_OVSCLR_CNT1_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 1 Overflow Clear */ + +#define PMU_OVSCLR_CNT2_STATUS_Pos 2U /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Position */ +#define PMU_OVSCLR_CNT2_STATUS_Msk (1UL << PMU_OVSCLR_CNT2_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT3_STATUS_Pos 3U /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Position */ +#define PMU_OVSCLR_CNT3_STATUS_Msk (1UL << PMU_OVSCLR_CNT3_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT4_STATUS_Pos 4U /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Position */ +#define PMU_OVSCLR_CNT4_STATUS_Msk (1UL << PMU_OVSCLR_CNT4_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT5_STATUS_Pos 5U /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Position */ +#define PMU_OVSCLR_CNT5_STATUS_Msk (1UL << PMU_OVSCLR_CNT5_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT6_STATUS_Pos 6U /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Position */ +#define PMU_OVSCLR_CNT6_STATUS_Msk (1UL << PMU_OVSCLR_CNT6_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT7_STATUS_Pos 7U /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Position */ +#define PMU_OVSCLR_CNT7_STATUS_Msk (1UL << PMU_OVSCLR_CNT7_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT8_STATUS_Pos 8U /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Position */ +#define PMU_OVSCLR_CNT8_STATUS_Msk (1UL << PMU_OVSCLR_CNT8_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT9_STATUS_Pos 9U /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Position */ +#define PMU_OVSCLR_CNT9_STATUS_Msk (1UL << PMU_OVSCLR_CNT9_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT10_STATUS_Pos 10U /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Position */ +#define PMU_OVSCLR_CNT10_STATUS_Msk (1UL << PMU_OVSCLR_CNT10_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT11_STATUS_Pos 11U /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Position */ +#define PMU_OVSCLR_CNT11_STATUS_Msk (1UL << PMU_OVSCLR_CNT11_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT12_STATUS_Pos 12U /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Position */ +#define PMU_OVSCLR_CNT12_STATUS_Msk (1UL << PMU_OVSCLR_CNT12_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT13_STATUS_Pos 13U /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Position */ +#define PMU_OVSCLR_CNT13_STATUS_Msk (1UL << PMU_OVSCLR_CNT13_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT14_STATUS_Pos 14U /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Position */ +#define PMU_OVSCLR_CNT14_STATUS_Msk (1UL << PMU_OVSCLR_CNT14_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT15_STATUS_Pos 15U /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Position */ +#define PMU_OVSCLR_CNT15_STATUS_Msk (1UL << PMU_OVSCLR_CNT15_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT16_STATUS_Pos 16U /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Position */ +#define PMU_OVSCLR_CNT16_STATUS_Msk (1UL << PMU_OVSCLR_CNT16_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT17_STATUS_Pos 17U /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Position */ +#define PMU_OVSCLR_CNT17_STATUS_Msk (1UL << PMU_OVSCLR_CNT17_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT18_STATUS_Pos 18U /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Position */ +#define PMU_OVSCLR_CNT18_STATUS_Msk (1UL << PMU_OVSCLR_CNT18_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT19_STATUS_Pos 19U /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Position */ +#define PMU_OVSCLR_CNT19_STATUS_Msk (1UL << PMU_OVSCLR_CNT19_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT20_STATUS_Pos 20U /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Position */ +#define PMU_OVSCLR_CNT20_STATUS_Msk (1UL << PMU_OVSCLR_CNT20_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT21_STATUS_Pos 21U /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Position */ +#define PMU_OVSCLR_CNT21_STATUS_Msk (1UL << PMU_OVSCLR_CNT21_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT22_STATUS_Pos 22U /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Position */ +#define PMU_OVSCLR_CNT22_STATUS_Msk (1UL << PMU_OVSCLR_CNT22_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT23_STATUS_Pos 23U /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Position */ +#define PMU_OVSCLR_CNT23_STATUS_Msk (1UL << PMU_OVSCLR_CNT23_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT24_STATUS_Pos 24U /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Position */ +#define PMU_OVSCLR_CNT24_STATUS_Msk (1UL << PMU_OVSCLR_CNT24_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT25_STATUS_Pos 25U /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Position */ +#define PMU_OVSCLR_CNT25_STATUS_Msk (1UL << PMU_OVSCLR_CNT25_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT26_STATUS_Pos 26U /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Position */ +#define PMU_OVSCLR_CNT26_STATUS_Msk (1UL << PMU_OVSCLR_CNT26_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT27_STATUS_Pos 27U /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Position */ +#define PMU_OVSCLR_CNT27_STATUS_Msk (1UL << PMU_OVSCLR_CNT27_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT28_STATUS_Pos 28U /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Position */ +#define PMU_OVSCLR_CNT28_STATUS_Msk (1UL << PMU_OVSCLR_CNT28_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT29_STATUS_Pos 29U /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Position */ +#define PMU_OVSCLR_CNT29_STATUS_Msk (1UL << PMU_OVSCLR_CNT29_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT30_STATUS_Pos 30U /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Position */ +#define PMU_OVSCLR_CNT30_STATUS_Msk (1UL << PMU_OVSCLR_CNT30_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Mask */ + +#define PMU_OVSCLR_CYCCNT_STATUS_Pos 31U /*!< PMU OVSCLR: Cycle Counter Overflow Clear Position */ +#define PMU_OVSCLR_CYCCNT_STATUS_Msk (1UL << PMU_OVSCLR_CYCCNT_STATUS_Pos) /*!< PMU OVSCLR: Cycle Counter Overflow Clear Mask */ + +/** \brief PMU Software Increment Counter */ +#define PMU_SWINC_CNT0_Pos 0U /*!< PMU SWINC: Event Counter 0 Software Increment Position */ +#define PMU_SWINC_CNT0_Msk (1UL /*<< PMU_SWINC_CNT0_Pos */) /*!< PMU SWINC: Event Counter 0 Software Increment Mask */ + +#define PMU_SWINC_CNT1_Pos 1U /*!< PMU SWINC: Event Counter 1 Software Increment Position */ +#define PMU_SWINC_CNT1_Msk (1UL << PMU_SWINC_CNT1_Pos) /*!< PMU SWINC: Event Counter 1 Software Increment Mask */ + +#define PMU_SWINC_CNT2_Pos 2U /*!< PMU SWINC: Event Counter 2 Software Increment Position */ +#define PMU_SWINC_CNT2_Msk (1UL << PMU_SWINC_CNT2_Pos) /*!< PMU SWINC: Event Counter 2 Software Increment Mask */ + +#define PMU_SWINC_CNT3_Pos 3U /*!< PMU SWINC: Event Counter 3 Software Increment Position */ +#define PMU_SWINC_CNT3_Msk (1UL << PMU_SWINC_CNT3_Pos) /*!< PMU SWINC: Event Counter 3 Software Increment Mask */ + +#define PMU_SWINC_CNT4_Pos 4U /*!< PMU SWINC: Event Counter 4 Software Increment Position */ +#define PMU_SWINC_CNT4_Msk (1UL << PMU_SWINC_CNT4_Pos) /*!< PMU SWINC: Event Counter 4 Software Increment Mask */ + +#define PMU_SWINC_CNT5_Pos 5U /*!< PMU SWINC: Event Counter 5 Software Increment Position */ +#define PMU_SWINC_CNT5_Msk (1UL << PMU_SWINC_CNT5_Pos) /*!< PMU SWINC: Event Counter 5 Software Increment Mask */ + +#define PMU_SWINC_CNT6_Pos 6U /*!< PMU SWINC: Event Counter 6 Software Increment Position */ +#define PMU_SWINC_CNT6_Msk (1UL << PMU_SWINC_CNT6_Pos) /*!< PMU SWINC: Event Counter 6 Software Increment Mask */ + +#define PMU_SWINC_CNT7_Pos 7U /*!< PMU SWINC: Event Counter 7 Software Increment Position */ +#define PMU_SWINC_CNT7_Msk (1UL << PMU_SWINC_CNT7_Pos) /*!< PMU SWINC: Event Counter 7 Software Increment Mask */ + +#define PMU_SWINC_CNT8_Pos 8U /*!< PMU SWINC: Event Counter 8 Software Increment Position */ +#define PMU_SWINC_CNT8_Msk (1UL << PMU_SWINC_CNT8_Pos) /*!< PMU SWINC: Event Counter 8 Software Increment Mask */ + +#define PMU_SWINC_CNT9_Pos 9U /*!< PMU SWINC: Event Counter 9 Software Increment Position */ +#define PMU_SWINC_CNT9_Msk (1UL << PMU_SWINC_CNT9_Pos) /*!< PMU SWINC: Event Counter 9 Software Increment Mask */ + +#define PMU_SWINC_CNT10_Pos 10U /*!< PMU SWINC: Event Counter 10 Software Increment Position */ +#define PMU_SWINC_CNT10_Msk (1UL << PMU_SWINC_CNT10_Pos) /*!< PMU SWINC: Event Counter 10 Software Increment Mask */ + +#define PMU_SWINC_CNT11_Pos 11U /*!< PMU SWINC: Event Counter 11 Software Increment Position */ +#define PMU_SWINC_CNT11_Msk (1UL << PMU_SWINC_CNT11_Pos) /*!< PMU SWINC: Event Counter 11 Software Increment Mask */ + +#define PMU_SWINC_CNT12_Pos 12U /*!< PMU SWINC: Event Counter 12 Software Increment Position */ +#define PMU_SWINC_CNT12_Msk (1UL << PMU_SWINC_CNT12_Pos) /*!< PMU SWINC: Event Counter 12 Software Increment Mask */ + +#define PMU_SWINC_CNT13_Pos 13U /*!< PMU SWINC: Event Counter 13 Software Increment Position */ +#define PMU_SWINC_CNT13_Msk (1UL << PMU_SWINC_CNT13_Pos) /*!< PMU SWINC: Event Counter 13 Software Increment Mask */ + +#define PMU_SWINC_CNT14_Pos 14U /*!< PMU SWINC: Event Counter 14 Software Increment Position */ +#define PMU_SWINC_CNT14_Msk (1UL << PMU_SWINC_CNT14_Pos) /*!< PMU SWINC: Event Counter 14 Software Increment Mask */ + +#define PMU_SWINC_CNT15_Pos 15U /*!< PMU SWINC: Event Counter 15 Software Increment Position */ +#define PMU_SWINC_CNT15_Msk (1UL << PMU_SWINC_CNT15_Pos) /*!< PMU SWINC: Event Counter 15 Software Increment Mask */ + +#define PMU_SWINC_CNT16_Pos 16U /*!< PMU SWINC: Event Counter 16 Software Increment Position */ +#define PMU_SWINC_CNT16_Msk (1UL << PMU_SWINC_CNT16_Pos) /*!< PMU SWINC: Event Counter 16 Software Increment Mask */ + +#define PMU_SWINC_CNT17_Pos 17U /*!< PMU SWINC: Event Counter 17 Software Increment Position */ +#define PMU_SWINC_CNT17_Msk (1UL << PMU_SWINC_CNT17_Pos) /*!< PMU SWINC: Event Counter 17 Software Increment Mask */ + +#define PMU_SWINC_CNT18_Pos 18U /*!< PMU SWINC: Event Counter 18 Software Increment Position */ +#define PMU_SWINC_CNT18_Msk (1UL << PMU_SWINC_CNT18_Pos) /*!< PMU SWINC: Event Counter 18 Software Increment Mask */ + +#define PMU_SWINC_CNT19_Pos 19U /*!< PMU SWINC: Event Counter 19 Software Increment Position */ +#define PMU_SWINC_CNT19_Msk (1UL << PMU_SWINC_CNT19_Pos) /*!< PMU SWINC: Event Counter 19 Software Increment Mask */ + +#define PMU_SWINC_CNT20_Pos 20U /*!< PMU SWINC: Event Counter 20 Software Increment Position */ +#define PMU_SWINC_CNT20_Msk (1UL << PMU_SWINC_CNT20_Pos) /*!< PMU SWINC: Event Counter 20 Software Increment Mask */ + +#define PMU_SWINC_CNT21_Pos 21U /*!< PMU SWINC: Event Counter 21 Software Increment Position */ +#define PMU_SWINC_CNT21_Msk (1UL << PMU_SWINC_CNT21_Pos) /*!< PMU SWINC: Event Counter 21 Software Increment Mask */ + +#define PMU_SWINC_CNT22_Pos 22U /*!< PMU SWINC: Event Counter 22 Software Increment Position */ +#define PMU_SWINC_CNT22_Msk (1UL << PMU_SWINC_CNT22_Pos) /*!< PMU SWINC: Event Counter 22 Software Increment Mask */ + +#define PMU_SWINC_CNT23_Pos 23U /*!< PMU SWINC: Event Counter 23 Software Increment Position */ +#define PMU_SWINC_CNT23_Msk (1UL << PMU_SWINC_CNT23_Pos) /*!< PMU SWINC: Event Counter 23 Software Increment Mask */ + +#define PMU_SWINC_CNT24_Pos 24U /*!< PMU SWINC: Event Counter 24 Software Increment Position */ +#define PMU_SWINC_CNT24_Msk (1UL << PMU_SWINC_CNT24_Pos) /*!< PMU SWINC: Event Counter 24 Software Increment Mask */ + +#define PMU_SWINC_CNT25_Pos 25U /*!< PMU SWINC: Event Counter 25 Software Increment Position */ +#define PMU_SWINC_CNT25_Msk (1UL << PMU_SWINC_CNT25_Pos) /*!< PMU SWINC: Event Counter 25 Software Increment Mask */ + +#define PMU_SWINC_CNT26_Pos 26U /*!< PMU SWINC: Event Counter 26 Software Increment Position */ +#define PMU_SWINC_CNT26_Msk (1UL << PMU_SWINC_CNT26_Pos) /*!< PMU SWINC: Event Counter 26 Software Increment Mask */ + +#define PMU_SWINC_CNT27_Pos 27U /*!< PMU SWINC: Event Counter 27 Software Increment Position */ +#define PMU_SWINC_CNT27_Msk (1UL << PMU_SWINC_CNT27_Pos) /*!< PMU SWINC: Event Counter 27 Software Increment Mask */ + +#define PMU_SWINC_CNT28_Pos 28U /*!< PMU SWINC: Event Counter 28 Software Increment Position */ +#define PMU_SWINC_CNT28_Msk (1UL << PMU_SWINC_CNT28_Pos) /*!< PMU SWINC: Event Counter 28 Software Increment Mask */ + +#define PMU_SWINC_CNT29_Pos 29U /*!< PMU SWINC: Event Counter 29 Software Increment Position */ +#define PMU_SWINC_CNT29_Msk (1UL << PMU_SWINC_CNT29_Pos) /*!< PMU SWINC: Event Counter 29 Software Increment Mask */ + +#define PMU_SWINC_CNT30_Pos 30U /*!< PMU SWINC: Event Counter 30 Software Increment Position */ +#define PMU_SWINC_CNT30_Msk (1UL << PMU_SWINC_CNT30_Pos) /*!< PMU SWINC: Event Counter 30 Software Increment Mask */ + +/** \brief PMU Control Register Definitions */ +#define PMU_CTRL_ENABLE_Pos 0U /*!< PMU CTRL: ENABLE Position */ +#define PMU_CTRL_ENABLE_Msk (1UL /*<< PMU_CTRL_ENABLE_Pos*/) /*!< PMU CTRL: ENABLE Mask */ + +#define PMU_CTRL_EVENTCNT_RESET_Pos 1U /*!< PMU CTRL: Event Counter Reset Position */ +#define PMU_CTRL_EVENTCNT_RESET_Msk (1UL << PMU_CTRL_EVENTCNT_RESET_Pos) /*!< PMU CTRL: Event Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_RESET_Pos 2U /*!< PMU CTRL: Cycle Counter Reset Position */ +#define PMU_CTRL_CYCCNT_RESET_Msk (1UL << PMU_CTRL_CYCCNT_RESET_Pos) /*!< PMU CTRL: Cycle Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_DISABLE_Pos 5U /*!< PMU CTRL: Disable Cycle Counter Position */ +#define PMU_CTRL_CYCCNT_DISABLE_Msk (1UL << PMU_CTRL_CYCCNT_DISABLE_Pos) /*!< PMU CTRL: Disable Cycle Counter Mask */ + +#define PMU_CTRL_FRZ_ON_OV_Pos 9U /*!< PMU CTRL: Freeze-on-overflow Position */ +#define PMU_CTRL_FRZ_ON_OV_Msk (1UL << PMU_CTRL_FRZ_ON_OVERFLOW_Pos) /*!< PMU CTRL: Freeze-on-overflow Mask */ + +#define PMU_CTRL_TRACE_ON_OV_Pos 11U /*!< PMU CTRL: Trace-on-overflow Position */ +#define PMU_CTRL_TRACE_ON_OV_Msk (1UL << PMU_CTRL_TRACE_ON_OVERFLOW_Pos) /*!< PMU CTRL: Trace-on-overflow Mask */ + +/** \brief PMU Type Register Definitions */ +#define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ +#define PMU_TYPE_NUM_CNTS_Msk (0xFFUL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ + +#define PMU_TYPE_SIZE_CNTS_Pos 8U /*!< PMU TYPE: Size of Counters Position */ +#define PMU_TYPE_SIZE_CNTS_Msk (0x3FUL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ + +#define PMU_TYPE_CYCCNT_PRESENT_Pos 14U /*!< PMU TYPE: Cycle Counter Present Position */ +#define PMU_TYPE_CYCCNT_PRESENT_Msk (1UL << PMU_TYPE_CYCCNT_PRESENT_Pos) /*!< PMU TYPE: Cycle Counter Present Mask */ + +#define PMU_TYPE_FRZ_OV_SUPPORT_Pos 21U /*!< PMU TYPE: Freeze-on-overflow Support Position */ +#define PMU_TYPE_FRZ_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Freeze-on-overflow Support Mask */ + +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Pos 23U /*!< PMU TYPE: Trace-on-overflow Support Position */ +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Trace-on-overflow Support Mask */ + +/** \brief PMU Authentication Status Register Definitions */ +#define PMU_AUTHSTATUS_NSID_Pos 0U /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSID_Msk (0x3UL /*<< PMU_AUTHSTATUS_NSID_Pos*/) /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSNID_Pos 2U /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSNID_Msk (0x3UL << PMU_AUTHSTATUS_NSNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SID_Pos 4U /*!< PMU AUTHSTATUS: Secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_SID_Msk (0x3UL << PMU_AUTHSTATUS_SID_Pos) /*!< PMU AUTHSTATUS: Secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SNID_Pos 6U /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SNID_Msk (0x3UL << PMU_AUTHSTATUS_SNID_Pos) /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUID_Pos 16U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUID_Msk (0x3UL << PMU_AUTHSTATUS_NSUID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUNID_Pos 18U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUNID_Msk (0x3UL << PMU_AUTHSTATUS_NSUNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUID_Pos 20U /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_SUID_Msk (0x3UL << PMU_AUTHSTATUS_SUID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ + +/*@} end of group CMSIS_PMU */ +#endif + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/** \brief MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Mask */ + +/** \brief MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/** \brief MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/** \brief SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/** \brief SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/** \brief SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/** \brief SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/** \brief SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/** \brief SAU Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/** \brief FPU Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/** \brief FPU Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/** \brief FPU Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +#define FPU_FPDSCR_FZ16_Pos 19U /*!< FPDSCR: FZ16 bit Position */ +#define FPU_FPDSCR_FZ16_Msk (1UL << FPU_FPDSCR_FZ16_Pos) /*!< FPDSCR: FZ16 bit Mask */ + +#define FPU_FPDSCR_LTPSIZE_Pos 16U /*!< FPDSCR: LTPSIZE bit Position */ +#define FPU_FPDSCR_LTPSIZE_Msk (7UL << FPU_FPDSCR_LTPSIZE_Pos) /*!< FPDSCR: LTPSIZE bit Mask */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FP16_Pos 20U /*!< MVFR1: FP16 bits Position */ +#define FPU_MVFR1_FP16_Msk (0xFUL << FPU_MVFR1_FP16_Pos) /*!< MVFR1: FP16 bits Mask */ + +#define FPU_MVFR1_MVE_Pos 8U /*!< MVFR1: MVE bits Position */ +#define FPU_MVFR1_MVE_Msk (0xFUL << FPU_MVFR1_MVE_Pos) /*!< MVFR1: MVE bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + uint32_t RESERVED1[3U]; + __IM uint32_t DDEVTYPE; /*!< Offset: 0x01C (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SUNID_Pos 22U /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUNID_Msk (0x3UL << DIB_DAUTHSTATUS_SUNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SUID_Pos 20U /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUID_Msk (0x3UL << DIB_DAUTHSTATUS_SUID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_NSUNID_Pos 18U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Position */ +#define DIB_DAUTHSTATUS_NSUNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Mask */ + +#define DIB_DAUTHSTATUS_NSUID_Pos 16U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_NSUID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/** \brief DIB SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/** \brief DIB SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define MEMSYSCTL_BASE (0xE001E000UL) /*!< Memory System Control Base Address */ + #define ERRBNK_BASE (0xE001E100UL) /*!< Error Banking Base Address */ + #define DCAR_BASE (0xE001E200UL) /*!< Direct Cache Access Registers */ + #define PWRMODCTL_BASE (0xE001E300UL) /*!< Power Mode Control Base Address */ + #define EWIC_ISA_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller interrupt status access Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define STL_BASE (0xE001E800UL) /*!< Software Test Library Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define EWIC_BASE (0xE0047000UL) /*!< External Wakeup Interrupt Controller Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define ICB ((ICB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ + #define MEMSYSCTL ((MemSysCtl_Type *) MEMSYSCTL_BASE ) /*!< Memory System Control configuration struct */ + #define ERRBNK ((ErrBnk_Type *) ERRBNK_BASE ) /*!< Error Banking configuration struct */ + #define DCAR ((DCAR_Type *) DCAR_BASE ) /*!< Direct Read Access to the embedded RAM associated with the L1 instruction and data cache */ + #define PWRMODCTL ((PwrModCtl_Type *) PWRMODCTL_BASE ) /*!< Power Mode Control configuration struct */ + #define EWIC_ISA ((EWIC_ISA_Type *) EWIC_ISA_BASE ) /*!< EWIC interrupt status access struct */ + #define EWIC ((EWIC_Type *) EWIC_BASE ) /*!< EWIC configuration struct */ + #define PRCCFGINF ((PrcCfgInf_Type *) PRCCFGINF_BASE ) /*!< Processor Configuration Information configuration struct */ + #define STL ((STL_Type *) STL_BASE ) /*!< Software Test Library configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + #define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ + #define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define ICB_NS ((ICB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + + #include "m-profile/armv8m_mpu.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "m-profile/armv8m_pmu.h" + +/** + \brief Cortex-M52 PMU events + \note Architectural PMU events can be found in armv8m_pmu.h +*/ + +#define ARMCM52_PMU_ECC_ERR 0xC000 /*!< One or more Error Correcting Code (ECC) errors detected */ +#define ARMCM52_PMU_ECC_ERR_MBIT 0xC001 /*!< One or more multi-bit ECC errors detected */ +#define ARMCM52_PMU_ECC_ERR_DCACHE 0xC010 /*!< One or more ECC errors in the data cache */ +#define ARMCM52_PMU_ECC_ERR_ICACHE 0xC011 /*!< One or more ECC errors in the instruction cache */ +#define ARMCM52_PMU_ECC_ERR_MBIT_DCACHE 0xC012 /*!< One or more multi-bit ECC errors in the data cache */ +#define ARMCM52_PMU_ECC_ERR_MBIT_ICACHE 0xC013 /*!< One or more multi-bit ECC errors in the instruction cache */ +#define ARMCM52_PMU_ECC_ERR_DTCM 0xC020 /*!< Any ECC error in the DTCM */ +#define ARMCM52_PMU_ECC_ERR_ITCM 0xC021 /*!< Any ECC error in the ITCM */ +#define ARMCM52_PMU_ECC_ERR_MBIT_DTCM 0xC022 /*!< One or more multi-bit ECC errors in the DTCM */ +#define ARMCM52_PMU_ECC_ERR_MBIT_ITCM 0xC023 /*!< One or more multi-bit ECC errors in the ITCM */ +#define ARMCM52_PMU_NWAMODE_ENTER 0xC200 /*!< No write-allocate mode entry */ +#define ARMCM52_PMU_NWAMODE 0xC201 /*!< Write-allocate store is not allocated into the data cache due to no-write-allocate mode */ +#define ARMCM52_PMU_SAHB_ACCESS 0xC300 /*!< Read or write access on the S-AHB interface to the TCM */ +#define ARMCM52_PMU_PAHB_ACCESS 0xC301 /*!< Read or write access to the P-AHB write interface */ +#define ARMCM52_PMU_AXI_SAHB_WRITE_ACCESS 0xC302 /*!< M-AXI configuration: Any beat access to the M-AXI write interface.M-AHB configuration: Any write beat access to the SYS-AHB interface */ +#define ARMCM52_PMU_AXI_SAHB_READ_ACCESS 0xC303 /*!< M-AXI configuration: Any beat access to the M-AXI read interface.M-AHB configuration: Any read beat access to the SYS-AHB interface */ +#define ARMCM52_PMU_DOSTIMEOUT_DOUBLE 0xC400 /*!< Denial of Service timeout has fired twice and caused buffers to drain to allow forward progress */ +#define ARMCM52_PMU_DOSTIMEOUT_TRIPLE 0xC401 /*!< Denial of Service timeout has fired three times and blocked the LSU to force forward progress */ +#define ARMCM52_PMU_CDE_INST_RETIRED 0xC402 /*!< CDE instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_CX1_INST_RETIRED 0xC404 /*!< CDE CX1 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_CX2_INST_RETIRED 0xC406 /*!< CDE CX2 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_CX3_INST_RETIRED 0xC408 /*!< CDE CX3 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX1_INST_RETIRED 0xC40A /*!< CDE VCX1 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX2_INST_RETIRED 0xC40C /*!< CDE VCX2 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX3_INST_RETIRED 0xC40E /*!< CDE VCX3 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX1_VEC_INST_RETIRED 0xC410 /*!< CDE VCX1 Vector instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX2_VEC_INST_RETIRED 0xC412 /*!< CDE VCX2 Vector instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX3_VEC_INST_RETIRED 0xC414 /*!< CDE VCX3 Vector instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_PRED 0xC416 /*!< Cycles where one or more predicated beats of a CDE instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_STALL 0xC417 /*!< Stall cycles caused by a CDE instruction. */ +#define ARMCM52_PMU_CDE_STALL_RESOURCE 0xC418 /*!< Stall cycles caused by a CDE instruction because of resource conflicts */ +#define ARMCM52_PMU_CDE_STALL_DEPENDENCY 0xC419 /*!< Stall cycles caused by a CDE register dependency. */ +#define ARMCM52_PMU_CDE_STALL_CUSTOM 0xC41A /*!< Stall cycles caused by a CDE instruction are generated by the custom hardware. */ +#define ARMCM52_PMU_CDE_STALL_OTHER 0xC41B /*!< Stall cycles caused by a CDE instruction are not covered by the other counters. */ +#define ARMCM52_PMU_CAHB_WRITE_ACCESS 0xC420 /*!< M-AHB configuration: A Write beat transfer on Code-AHB */ +#define ARMCM52_PMU_CAHB_READ_ACCESS 0xC421 /*!< M-AHB configuration: A Read beat transfer on Code-AHB. */ + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + +/* ########################## MVE functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_MveFunctions MVE Functions + \brief Function that provides MVE type. + @{ + */ + +/** + \brief get MVE type + \details returns the MVE type + \returns + - \b 0: No Vector Extension (MVE) + - \b 1: Integer Vector Extension (MVE-I) + - \b 2: Floating-point Vector Extension (MVE-F) + */ +__STATIC_INLINE uint32_t SCB_GetMVEType(void) +{ + const uint32_t mvfr1 = FPU->MVFR1; + if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x2U << FPU_MVFR1_MVE_Pos)) + { + return 2U; + } + else if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x1U << FPU_MVFR1_MVE_Pos)) + { + return 1U; + } + else + { + return 0U; + } +} + + +/*@} end of CMSIS_Core_MveFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) + #include "m-profile/armv7m_cachel1.h" +#endif + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + +/* ################### PAC Key functions ########################### */ + +#if (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) +#include "m-profile/armv81m_pac.h" +#endif + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM52_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + + + + + diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h new file mode 100644 index 000000000000..a7c9f7436b4e --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h @@ -0,0 +1,4895 @@ +/* + * Copyright (c) 2018-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M55 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM55_H_GENERIC +#define __CORE_CM55_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M55 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM55 definitions */ + +#define __CORTEX_M (55U) /*!< Cortex-M Core */ + +#if defined ( __CC_ARM ) + #error Legacy Arm Compiler does not support Armv8.1-M target architecture. +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM55_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM55_H_DEPENDANT +#define __CORE_CM55_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM55_REV + #define __CM55_REV 0x0000U + #warning "__CM55_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #if __FPU_PRESENT != 0U + #ifndef __FPU_DP + #define __FPU_DP 0U + #warning "__FPU_DP not defined in device header file; using default!" + #endif + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __PMU_PRESENT + #define __PMU_PRESENT 0U + #warning "__PMU_PRESENT not defined in device header file; using default!" + #endif + + #if __PMU_PRESENT != 0U + #ifndef __PMU_NUM_EVENTCNT + #define __PMU_NUM_EVENTCNT 8U + #warning "__PMU_NUM_EVENTCNT not defined in device header file; using default!" + #elif (__PMU_NUM_EVENTCNT > 8 || __PMU_NUM_EVENTCNT < 2) + #error "__PMU_NUM_EVENTCNT is out of range in device header file!" */ + #endif + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M55 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core EWIC Register + - Core EWIC Interrupt Status Access Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core PMU Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ + uint32_t RESERVED4[14U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_IESB_Pos 5U /*!< SCB AIRCR: Implicit ESB Enable Position */ +#define SCB_AIRCR_IESB_Msk (1UL << SCB_AIRCR_IESB_Pos) /*!< SCB AIRCR: Implicit ESB Enable Mask */ + +#define SCB_AIRCR_DIT_Pos 4U /*!< SCB AIRCR: Data Independent Timing Position */ +#define SCB_AIRCR_DIT_Msk (1UL << SCB_AIRCR_DIT_Pos) /*!< SCB AIRCR: Data Independent Timing Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_TRD_Pos 20U /*!< SCB CCR: TRD Position */ +#define SCB_CCR_TRD_Msk (1UL << SCB_CCR_TRD_Pos) /*!< SCB CCR: TRD Mask */ + +#define SCB_CCR_LOB_Pos 19U /*!< SCB CCR: LOB Position */ +#define SCB_CCR_LOB_Msk (1UL << SCB_CCR_LOB_Pos) /*!< SCB CCR: LOB Mask */ + +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/** \brief SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CP7_Pos 7U /*!< SCB NSACR: CP7 Position */ +#define SCB_NSACR_CP7_Msk (1UL << SCB_NSACR_CP7_Pos) /*!< SCB NSACR: CP7 Mask */ + +#define SCB_NSACR_CP6_Pos 6U /*!< SCB NSACR: CP6 Position */ +#define SCB_NSACR_CP6_Msk (1UL << SCB_NSACR_CP6_Pos) /*!< SCB NSACR: CP6 Mask */ + +#define SCB_NSACR_CP5_Pos 5U /*!< SCB NSACR: CP5 Position */ +#define SCB_NSACR_CP5_Msk (1UL << SCB_NSACR_CP5_Pos) /*!< SCB NSACR: CP5 Mask */ + +#define SCB_NSACR_CP4_Pos 4U /*!< SCB NSACR: CP4 Position */ +#define SCB_NSACR_CP4_Msk (1UL << SCB_NSACR_CP4_Pos) /*!< SCB NSACR: CP4 Mask */ + +#define SCB_NSACR_CP3_Pos 3U /*!< SCB NSACR: CP3 Position */ +#define SCB_NSACR_CP3_Msk (1UL << SCB_NSACR_CP3_Pos) /*!< SCB NSACR: CP3 Mask */ + +#define SCB_NSACR_CP2_Pos 2U /*!< SCB NSACR: CP2 Position */ +#define SCB_NSACR_CP2_Msk (1UL << SCB_NSACR_CP2_Pos) /*!< SCB NSACR: CP2 Mask */ + +#define SCB_NSACR_CP1_Pos 1U /*!< SCB NSACR: CP1 Position */ +#define SCB_NSACR_CP1_Msk (1UL << SCB_NSACR_CP1_Pos) /*!< SCB NSACR: CP1 Mask */ + +#define SCB_NSACR_CP0_Pos 0U /*!< SCB NSACR: CP0 Position */ +#define SCB_NSACR_CP0_Msk (1UL /*<< SCB_NSACR_CP0_Pos*/) /*!< SCB NSACR: CP0 Mask */ + +/** \brief SCB Debug Feature Register 0 Definitions */ +#define SCB_ID_DFR_UDE_Pos 28U /*!< SCB ID_DFR: UDE Position */ +#define SCB_ID_DFR_UDE_Msk (0xFUL << SCB_ID_DFR_UDE_Pos) /*!< SCB ID_DFR: UDE Mask */ + +#define SCB_ID_DFR_MProfDbg_Pos 20U /*!< SCB ID_DFR: MProfDbg Position */ +#define SCB_ID_DFR_MProfDbg_Msk (0xFUL << SCB_ID_DFR_MProfDbg_Pos) /*!< SCB ID_DFR: MProfDbg Mask */ + +/** \brief SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/** \brief SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/** \brief SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/** \brief SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/** \brief SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/** \brief SCB RAS Fault Status Register Definitions */ +#define SCB_RFSR_V_Pos 31U /*!< SCB RFSR: V Position */ +#define SCB_RFSR_V_Msk (1UL << SCB_RFSR_V_Pos) /*!< SCB RFSR: V Mask */ + +#define SCB_RFSR_IS_Pos 16U /*!< SCB RFSR: IS Position */ +#define SCB_RFSR_IS_Msk (0x7FFFUL << SCB_RFSR_IS_Pos) /*!< SCB RFSR: IS Mask */ + +#define SCB_RFSR_UET_Pos 0U /*!< SCB RFSR: UET Position */ +#define SCB_RFSR_UET_Msk (3UL /*<< SCB_RFSR_UET_Pos*/) /*!< SCB RFSR: UET Mask */ + +/** \brief SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ICB Implementation Control Block register (ICB) + \brief Type definitions for the Implementation Control Block Register + @{ + */ + +/** + \brief Structure type to access the Implementation Control Block (ICB). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} ICB_Type; + +/** \brief ICB Auxiliary Control Register Definitions */ +#define ICB_ACTLR_DISCRITAXIRUW_Pos 27U /*!< ACTLR: DISCRITAXIRUW Position */ +#define ICB_ACTLR_DISCRITAXIRUW_Msk (1UL << ICB_ACTLR_DISCRITAXIRUW_Pos) /*!< ACTLR: DISCRITAXIRUW Mask */ + +#define ICB_ACTLR_DISDI_Pos 16U /*!< ACTLR: DISDI Position */ +#define ICB_ACTLR_DISDI_Msk (3UL << ICB_ACTLR_DISDI_Pos) /*!< ACTLR: DISDI Mask */ + +#define ICB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define ICB_ACTLR_DISCRITAXIRUR_Msk (1UL << ICB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define ICB_ACTLR_EVENTBUSEN_Pos 14U /*!< ACTLR: EVENTBUSEN Position */ +#define ICB_ACTLR_EVENTBUSEN_Msk (1UL << ICB_ACTLR_EVENTBUSEN_Pos) /*!< ACTLR: EVENTBUSEN Mask */ + +#define ICB_ACTLR_EVENTBUSEN_S_Pos 13U /*!< ACTLR: EVENTBUSEN_S Position */ +#define ICB_ACTLR_EVENTBUSEN_S_Msk (1UL << ICB_ACTLR_EVENTBUSEN_S_Pos) /*!< ACTLR: EVENTBUSEN_S Mask */ + +#define ICB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define ICB_ACTLR_DISITMATBFLUSH_Msk (1UL << ICB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define ICB_ACTLR_DISNWAMODE_Pos 11U /*!< ACTLR: DISNWAMODE Position */ +#define ICB_ACTLR_DISNWAMODE_Msk (1UL << ICB_ACTLR_DISNWAMODE_Pos) /*!< ACTLR: DISNWAMODE Mask */ + +#define ICB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define ICB_ACTLR_FPEXCODIS_Msk (1UL << ICB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define ICB_ACTLR_DISOLAP_Pos 7U /*!< ACTLR: DISOLAP Position */ +#define ICB_ACTLR_DISOLAP_Msk (1UL << ICB_ACTLR_DISOLAP_Pos) /*!< ACTLR: DISOLAP Mask */ + +#define ICB_ACTLR_DISOLAPS_Pos 6U /*!< ACTLR: DISOLAPS Position */ +#define ICB_ACTLR_DISOLAPS_Msk (1UL << ICB_ACTLR_DISOLAPS_Pos) /*!< ACTLR: DISOLAPS Mask */ + +#define ICB_ACTLR_DISLOBR_Pos 5U /*!< ACTLR: DISLOBR Position */ +#define ICB_ACTLR_DISLOBR_Msk (1UL << ICB_ACTLR_DISLOBR_Pos) /*!< ACTLR: DISLOBR Mask */ + +#define ICB_ACTLR_DISLO_Pos 4U /*!< ACTLR: DISLO Position */ +#define ICB_ACTLR_DISLO_Msk (1UL << ICB_ACTLR_DISLO_Pos) /*!< ACTLR: DISLO Mask */ + +#define ICB_ACTLR_DISLOLEP_Pos 3U /*!< ACTLR: DISLOLEP Position */ +#define ICB_ACTLR_DISLOLEP_Msk (1UL << ICB_ACTLR_DISLOLEP_Pos) /*!< ACTLR: DISLOLEP Mask */ + +#define ICB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define ICB_ACTLR_DISFOLD_Msk (1UL << ICB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +/** \brief ICB Interrupt Controller Type Register Definitions */ +#define ICB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define ICB_ICTR_INTLINESNUM_Msk (0xFUL /*<< ICB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_ICB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + __IOM uint32_t VMASK1; /*!< Offset: 0x03C (R/W) Comparator Value Mask 1 */ + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + __IOM uint32_t VMASK3; /*!< Offset: 0x05C (R/W) Comparator Value Mask 3 */ + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED14[968U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup MemSysCtl_Type Memory System Control Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Memory System Control Registers (MEMSYSCTL) + @{ + */ + +/** + \brief Structure type to access the Memory System Control Registers (MEMSYSCTL). + */ +typedef struct +{ + __IOM uint32_t MSCR; /*!< Offset: 0x000 (R/W) Memory System Control Register */ + __IOM uint32_t PFCR; /*!< Offset: 0x004 (R/W) Prefetcher Control Register */ + uint32_t RESERVED1[2U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x010 (R/W) ITCM Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x014 (R/W) DTCM Control Register */ + __IOM uint32_t PAHBCR; /*!< Offset: 0x018 (R/W) P-AHB Control Register */ + uint32_t RESERVED2[313U]; + __IOM uint32_t ITGU_CTRL; /*!< Offset: 0x500 (R/W) ITGU Control Register */ + __IOM uint32_t ITGU_CFG; /*!< Offset: 0x504 (R/W) ITGU Configuration Register */ + uint32_t RESERVED3[2U]; + __IOM uint32_t ITGU_LUT[16U]; /*!< Offset: 0x510 (R/W) ITGU Look Up Table Register */ + uint32_t RESERVED4[44U]; + __IOM uint32_t DTGU_CTRL; /*!< Offset: 0x600 (R/W) DTGU Control Registers */ + __IOM uint32_t DTGU_CFG; /*!< Offset: 0x604 (R/W) DTGU Configuration Register */ + uint32_t RESERVED5[2U]; + __IOM uint32_t DTGU_LUT[16U]; /*!< Offset: 0x610 (R/W) DTGU Look Up Table Register */ +} MemSysCtl_Type; + +/** \brief MemSysCtl Memory System Control Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_TECCCHKDIS_Pos 4U /*!< MEMSYSCTL MSCR: TECCCHKDIS Position */ +#define MEMSYSCTL_MSCR_TECCCHKDIS_Msk (1UL << MEMSYSCTL_MSCR_TECCCHKDIS_Pos) /*!< MEMSYSCTL MSCR: TECCCHKDIS Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/** \brief MemSysCtl Prefetcher Control Register Definitions */ +#define MEMSYSCTL_PFCR_MAX_OS_Pos 7U /*!< MEMSYSCTL PFCR: MAX_OS Position */ +#define MEMSYSCTL_PFCR_MAX_OS_Msk (0x7UL << MEMSYSCTL_PFCR_MAX_OS_Pos) /*!< MEMSYSCTL PFCR: MAX_OS Mask */ + +#define MEMSYSCTL_PFCR_MAX_LA_Pos 4U /*!< MEMSYSCTL PFCR: MAX_LA Position */ +#define MEMSYSCTL_PFCR_MAX_LA_Msk (0x7UL << MEMSYSCTL_PFCR_MAX_LA_Pos) /*!< MEMSYSCTL PFCR: MAX_LA Mask */ + +#define MEMSYSCTL_PFCR_MIN_LA_Pos 1U /*!< MEMSYSCTL PFCR: MIN_LA Position */ +#define MEMSYSCTL_PFCR_MIN_LA_Msk (0x7UL << MEMSYSCTL_PFCR_MIN_LA_Pos) /*!< MEMSYSCTL PFCR: MIN_LA Mask */ + +#define MEMSYSCTL_PFCR_ENABLE_Pos 0U /*!< MEMSYSCTL PFCR: ENABLE Position */ +#define MEMSYSCTL_PFCR_ENABLE_Msk (1UL /*<< MEMSYSCTL_PFCR_ENABLE_Pos*/) /*!< MEMSYSCTL PFCR: ENABLE Mask */ + +/** \brief MemSysCtl ITCM Control Register Definitions */ +#define MEMSYSCTL_ITCMCR_SZ_Pos 3U /*!< MEMSYSCTL ITCMCR: SZ Position */ +#define MEMSYSCTL_ITCMCR_SZ_Msk (0xFUL << MEMSYSCTL_ITCMCR_SZ_Pos) /*!< MEMSYSCTL ITCMCR: SZ Mask */ + +#define MEMSYSCTL_ITCMCR_EN_Pos 0U /*!< MEMSYSCTL ITCMCR: EN Position */ +#define MEMSYSCTL_ITCMCR_EN_Msk (1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/** \brief MemSysCtl DTCM Control Register Definitions */ +#define MEMSYSCTL_DTCMCR_SZ_Pos 3U /*!< MEMSYSCTL DTCMCR: SZ Position */ +#define MEMSYSCTL_DTCMCR_SZ_Msk (0xFUL << MEMSYSCTL_DTCMCR_SZ_Pos) /*!< MEMSYSCTL DTCMCR: SZ Mask */ + +#define MEMSYSCTL_DTCMCR_EN_Pos 0U /*!< MEMSYSCTL DTCMCR: EN Position */ +#define MEMSYSCTL_DTCMCR_EN_Msk (1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/** \brief MemSysCtl P-AHB Control Register Definitions */ +#define MEMSYSCTL_PAHBCR_SZ_Pos 1U /*!< MEMSYSCTL PAHBCR: SZ Position */ +#define MEMSYSCTL_PAHBCR_SZ_Msk (0x7UL << MEMSYSCTL_PAHBCR_SZ_Pos) /*!< MEMSYSCTL PAHBCR: SZ Mask */ + +#define MEMSYSCTL_PAHBCR_EN_Pos 0U /*!< MEMSYSCTL PAHBCR: EN Position */ +#define MEMSYSCTL_PAHBCR_EN_Msk (1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/** \brief MemSysCtl ITGU Control Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (1UL << MEMSYSCTL_ITGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL ITGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL ITGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Msk (1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl ITGU Configuration Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (1UL << MEMSYSCTL_ITGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL ITGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL ITGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_ITGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL ITGU_CFG: BLKSZ Mask */ + +/** \brief MemSysCtl DTGU Control Registers Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (1UL << MEMSYSCTL_DTGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL DTGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL DTGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Msk (1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl DTGU Configuration Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (1UL << MEMSYSCTL_DTGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL DTGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL DTGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_DTGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL DTGU_CFG: BLKSZ Mask */ + +/*@}*/ /* end of group MemSysCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PwrModCtl_Type Power Mode Control Registers + \brief Type definitions for the Power Mode Control Registers (PWRMODCTL) + @{ + */ + +/** + \brief Structure type to access the Power Mode Control Registers (PWRMODCTL). + */ +typedef struct +{ + __IOM uint32_t CPDLPSTATE; /*!< Offset: 0x000 (R/W) Core Power Domain Low Power State Register */ + __IOM uint32_t DPDLPSTATE; /*!< Offset: 0x004 (R/W) Debug Power Domain Low Power State Register */ +} PwrModCtl_Type; + +/** \brief PwrModCtl Core Power Domain Low Power State Register Definitions */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos 8U /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos 4U /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos 0U /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk (0x3UL /*<< PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos*/) /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Mask */ + +/** \brief PwrModCtl Debug Power Domain Low Power State Register Definitions */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos 0U /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Position */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Msk (0x3UL /*<< PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos*/) /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Mask */ + +/*@}*/ /* end of group PwrModCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_Type External Wakeup Interrupt Controller Registers + \brief Type definitions for the External Wakeup Interrupt Controller Registers (EWIC) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller Registers (EWIC). + */ +typedef struct +{ + __IOM uint32_t EWIC_CR; /*!< Offset: 0x000 (R/W) EWIC Control Register */ + __IOM uint32_t EWIC_ASCR; /*!< Offset: 0x004 (R/W) EWIC Automatic Sequence Control Register */ + __OM uint32_t EWIC_CLRMASK; /*!< Offset: 0x008 ( /W) EWIC Clear Mask Register */ + __IM uint32_t EWIC_NUMID; /*!< Offset: 0x00C (R/ ) EWIC Event Number ID Register */ + uint32_t RESERVED0[124U]; + __IOM uint32_t EWIC_MASKA; /*!< Offset: 0x200 (R/W) EWIC MaskA Register */ + __IOM uint32_t EWIC_MASKn[15]; /*!< Offset: 0x204 (R/W) EWIC Maskn Registers */ + uint32_t RESERVED1[112U]; + __IM uint32_t EWIC_PENDA; /*!< Offset: 0x400 (R/ ) EWIC PendA Event Register */ + __IOM uint32_t EWIC_PENDn[15]; /*!< Offset: 0x404 (R/W) EWIC Pendn Event Registers */ + uint32_t RESERVED2[112U]; + __IM uint32_t EWIC_PSR; /*!< Offset: 0x600 (R/ ) EWIC Pend Summary Register */ +} EWIC_Type; + +/** \brief EWIC Control Register Definitions */ +#define EWIC_EWIC_CR_EN_Pos 0U /*!< EWIC EWIC_CR: EN Position */ +#define EWIC_EWIC_CR_EN_Msk (1UL /*<< EWIC_EWIC_CR_EN_Pos*/) /*!< EWIC EWIC_CR: EN Mask */ + +/** \brief EWIC Automatic Sequence Control Register Definitions */ +#define EWIC_EWIC_ASCR_ASPU_Pos 1U /*!< EWIC EWIC_ASCR: ASPU Position */ +#define EWIC_EWIC_ASCR_ASPU_Msk (1UL << EWIC_EWIC_ASCR_ASPU_Pos) /*!< EWIC EWIC_ASCR: ASPU Mask */ + +#define EWIC_EWIC_ASCR_ASPD_Pos 0U /*!< EWIC EWIC_ASCR: ASPD Position */ +#define EWIC_EWIC_ASCR_ASPD_Msk (1UL /*<< EWIC_EWIC_ASCR_ASPD_Pos*/) /*!< EWIC EWIC_ASCR: ASPD Mask */ + +/** \brief EWIC Event Number ID Register Definitions */ +#define EWIC_EWIC_NUMID_NUMEVENT_Pos 0U /*!< EWIC_NUMID: NUMEVENT Position */ +#define EWIC_EWIC_NUMID_NUMEVENT_Msk (0xFFFFUL /*<< EWIC_EWIC_NUMID_NUMEVENT_Pos*/) /*!< EWIC_NUMID: NUMEVENT Mask */ + +/** \brief EWIC Mask A Register Definitions */ +#define EWIC_EWIC_MASKA_EDBGREQ_Pos 2U /*!< EWIC EWIC_MASKA: EDBGREQ Position */ +#define EWIC_EWIC_MASKA_EDBGREQ_Msk (1UL << EWIC_EWIC_MASKA_EDBGREQ_Pos) /*!< EWIC EWIC_MASKA: EDBGREQ Mask */ + +#define EWIC_EWIC_MASKA_NMI_Pos 1U /*!< EWIC EWIC_MASKA: NMI Position */ +#define EWIC_EWIC_MASKA_NMI_Msk (1UL << EWIC_EWIC_MASKA_NMI_Pos) /*!< EWIC EWIC_MASKA: NMI Mask */ + +#define EWIC_EWIC_MASKA_EVENT_Pos 0U /*!< EWIC EWIC_MASKA: EVENT Position */ +#define EWIC_EWIC_MASKA_EVENT_Msk (1UL /*<< EWIC_EWIC_MASKA_EVENT_Pos*/) /*!< EWIC EWIC_MASKA: EVENT Mask */ + +/** \brief EWIC Mask n Register Definitions */ +#define EWIC_EWIC_MASKn_IRQ_Pos 0U /*!< EWIC EWIC_MASKn: IRQ Position */ +#define EWIC_EWIC_MASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_MASKn_IRQ_Pos*/) /*!< EWIC EWIC_MASKn: IRQ Mask */ + +/** \brief EWIC Pend A Register Definitions */ +#define EWIC_EWIC_PENDA_EDBGREQ_Pos 2U /*!< EWIC EWIC_PENDA: EDBGREQ Position */ +#define EWIC_EWIC_PENDA_EDBGREQ_Msk (1UL << EWIC_EWIC_PENDA_EDBGREQ_Pos) /*!< EWIC EWIC_PENDA: EDBGREQ Mask */ + +#define EWIC_EWIC_PENDA_NMI_Pos 1U /*!< EWIC EWIC_PENDA: NMI Position */ +#define EWIC_EWIC_PENDA_NMI_Msk (1UL << EWIC_EWIC_PENDA_NMI_Pos) /*!< EWIC EWIC_PENDA: NMI Mask */ + +#define EWIC_EWIC_PENDA_EVENT_Pos 0U /*!< EWIC EWIC_PENDA: EVENT Position */ +#define EWIC_EWIC_PENDA_EVENT_Msk (1UL /*<< EWIC_EWIC_PENDA_EVENT_Pos*/) /*!< EWIC EWIC_PENDA: EVENT Mask */ + +/** \brief EWIC Pend n Register Definitions */ +#define EWIC_EWIC_PENDn_IRQ_Pos 0U /*!< EWIC EWIC_PENDn: IRQ Position */ +#define EWIC_EWIC_PENDn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_PENDn_IRQ_Pos*/) /*!< EWIC EWIC_PENDn: IRQ Mask */ + +/** \brief EWIC Pend Summary Register Definitions */ +#define EWIC_EWIC_PSR_NZ_Pos 1U /*!< EWIC EWIC_PSR: NZ Position */ +#define EWIC_EWIC_PSR_NZ_Msk (0x7FFFUL << EWIC_EWIC_PSR_NZ_Pos) /*!< EWIC EWIC_PSR: NZ Mask */ + +#define EWIC_EWIC_PSR_NZA_Pos 0U /*!< EWIC EWIC_PSR: NZA Position */ +#define EWIC_EWIC_PSR_NZA_Msk (1UL /*<< EWIC_EWIC_PSR_NZA_Pos*/) /*!< EWIC EWIC_PSR: NZA Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_ISA_Type External Wakeup Interrupt Controller (EWIC) interrupt status access registers + \brief Type definitions for the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/ ) Event Mask A Register */ + __IM uint32_t EVENTMASKn[15]; /*!< Offset: 0x084 (R/ ) Event Mask Register */ +} EWIC_ISA_Type; + +/** \brief EWIC_ISA Event Set Pending Register Definitions */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTSPR: EDBGREQ Position */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTSPR_EDBGREQ_Pos) /*!< EWIC_ISA EVENTSPR: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTSPR_NMI_Pos 1U /*!< EWIC_ISA EVENTSPR: NMI Position */ +#define EWIC_ISA_EVENTSPR_NMI_Msk (1UL << EWIC_ISA_EVENTSPR_NMI_Pos) /*!< EWIC_ISA EVENTSPR: NMI Mask */ + +#define EWIC_ISA_EVENTSPR_EVENT_Pos 0U /*!< EWIC_ISA EVENTSPR: EVENT Position */ +#define EWIC_ISA_EVENTSPR_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTSPR_EVENT_Pos*/) /*!< EWIC_ISA EVENTSPR: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask A Register Definitions */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTMASKA: EDBGREQ Position */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC_ISA EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTMASKA_NMI_Pos 1U /*!< EWIC_ISA EVENTMASKA: NMI Position */ +#define EWIC_ISA_EVENTMASKA_NMI_Msk (1UL << EWIC_ISA_EVENTMASKA_NMI_Pos) /*!< EWIC_ISA EVENTMASKA: NMI Mask */ + +#define EWIC_ISA_EVENTMASKA_EVENT_Pos 0U /*!< EWIC_ISA EVENTMASKA: EVENT Position */ +#define EWIC_ISA_EVENTMASKA_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTMASKA_EVENT_Pos*/) /*!< EWIC_ISA EVENTMASKA: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask n Register Definitions */ +#define EWIC_ISA_EVENTMASKn_IRQ_Pos 0U /*!< EWIC_ISA EVENTMASKn: IRQ Position */ +#define EWIC_ISA_EVENTMASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_ISA_EVENTMASKn_IRQ_Pos*/) /*!< EWIC_ISA EVENTMASKn: IRQ Mask */ + +/*@}*/ /* end of group EWIC_ISA_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup ErrBnk_Type Error Banking Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Error Banking Registers (ERRBNK) + @{ + */ + +/** + \brief Structure type to access the Error Banking Registers (ERRBNK). + */ +typedef struct +{ + __IOM uint32_t IEBR0; /*!< Offset: 0x000 (R/W) Instruction Cache Error Bank Register 0 */ + __IOM uint32_t IEBR1; /*!< Offset: 0x004 (R/W) Instruction Cache Error Bank Register 1 */ + uint32_t RESERVED0[2U]; + __IOM uint32_t DEBR0; /*!< Offset: 0x010 (R/W) Data Cache Error Bank Register 0 */ + __IOM uint32_t DEBR1; /*!< Offset: 0x014 (R/W) Data Cache Error Bank Register 1 */ + uint32_t RESERVED1[2U]; + __IOM uint32_t TEBR0; /*!< Offset: 0x020 (R/W) TCM Error Bank Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t TEBR1; /*!< Offset: 0x028 (R/W) TCM Error Bank Register 1 */ +} ErrBnk_Type; + +/** \brief ErrBnk Instruction Cache Error Bank Register 0 Definitions */ +#define ERRBNK_IEBR0_SWDEF_Pos 30U /*!< ERRBNK IEBR0: SWDEF Position */ +#define ERRBNK_IEBR0_SWDEF_Msk (0x3UL << ERRBNK_IEBR0_SWDEF_Pos) /*!< ERRBNK IEBR0: SWDEF Mask */ + +#define ERRBNK_IEBR0_BANK_Pos 16U /*!< ERRBNK IEBR0: BANK Position */ +#define ERRBNK_IEBR0_BANK_Msk (1UL << ERRBNK_IEBR0_BANK_Pos) /*!< ERRBNK IEBR0: BANK Mask */ + +#define ERRBNK_IEBR0_LOCATION_Pos 2U /*!< ERRBNK IEBR0: LOCATION Position */ +#define ERRBNK_IEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR0_LOCATION_Pos) /*!< ERRBNK IEBR0: LOCATION Mask */ + +#define ERRBNK_IEBR0_LOCKED_Pos 1U /*!< ERRBNK IEBR0: LOCKED Position */ +#define ERRBNK_IEBR0_LOCKED_Msk (1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/** \brief ErrBnk Instruction Cache Error Bank Register 1 Definitions */ +#define ERRBNK_IEBR1_SWDEF_Pos 30U /*!< ERRBNK IEBR1: SWDEF Position */ +#define ERRBNK_IEBR1_SWDEF_Msk (0x3UL << ERRBNK_IEBR1_SWDEF_Pos) /*!< ERRBNK IEBR1: SWDEF Mask */ + +#define ERRBNK_IEBR1_BANK_Pos 16U /*!< ERRBNK IEBR1: BANK Position */ +#define ERRBNK_IEBR1_BANK_Msk (1UL << ERRBNK_IEBR1_BANK_Pos) /*!< ERRBNK IEBR1: BANK Mask */ + +#define ERRBNK_IEBR1_LOCATION_Pos 2U /*!< ERRBNK IEBR1: LOCATION Position */ +#define ERRBNK_IEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR1_LOCATION_Pos) /*!< ERRBNK IEBR1: LOCATION Mask */ + +#define ERRBNK_IEBR1_LOCKED_Pos 1U /*!< ERRBNK IEBR1: LOCKED Position */ +#define ERRBNK_IEBR1_LOCKED_Msk (1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 0 Definitions */ +#define ERRBNK_DEBR0_SWDEF_Pos 30U /*!< ERRBNK DEBR0: SWDEF Position */ +#define ERRBNK_DEBR0_SWDEF_Msk (0x3UL << ERRBNK_DEBR0_SWDEF_Pos) /*!< ERRBNK DEBR0: SWDEF Mask */ + +#define ERRBNK_DEBR0_TYPE_Pos 17U /*!< ERRBNK DEBR0: TYPE Position */ +#define ERRBNK_DEBR0_TYPE_Msk (1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (1UL << ERRBNK_DEBR0_BANK_Pos) /*!< ERRBNK DEBR0: BANK Mask */ + +#define ERRBNK_DEBR0_LOCATION_Pos 2U /*!< ERRBNK DEBR0: LOCATION Position */ +#define ERRBNK_DEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR0_LOCATION_Pos) /*!< ERRBNK DEBR0: LOCATION Mask */ + +#define ERRBNK_DEBR0_LOCKED_Pos 1U /*!< ERRBNK DEBR0: LOCKED Position */ +#define ERRBNK_DEBR0_LOCKED_Msk (1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 1 Definitions */ +#define ERRBNK_DEBR1_SWDEF_Pos 30U /*!< ERRBNK DEBR1: SWDEF Position */ +#define ERRBNK_DEBR1_SWDEF_Msk (0x3UL << ERRBNK_DEBR1_SWDEF_Pos) /*!< ERRBNK DEBR1: SWDEF Mask */ + +#define ERRBNK_DEBR1_TYPE_Pos 17U /*!< ERRBNK DEBR1: TYPE Position */ +#define ERRBNK_DEBR1_TYPE_Msk (1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (1UL << ERRBNK_DEBR1_BANK_Pos) /*!< ERRBNK DEBR1: BANK Mask */ + +#define ERRBNK_DEBR1_LOCATION_Pos 2U /*!< ERRBNK DEBR1: LOCATION Position */ +#define ERRBNK_DEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR1_LOCATION_Pos) /*!< ERRBNK DEBR1: LOCATION Mask */ + +#define ERRBNK_DEBR1_LOCKED_Pos 1U /*!< ERRBNK DEBR1: LOCKED Position */ +#define ERRBNK_DEBR1_LOCKED_Msk (1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 0 Definitions */ +#define ERRBNK_TEBR0_SWDEF_Pos 30U /*!< ERRBNK TEBR0: SWDEF Position */ +#define ERRBNK_TEBR0_SWDEF_Msk (0x3UL << ERRBNK_TEBR0_SWDEF_Pos) /*!< ERRBNK TEBR0: SWDEF Mask */ + +#define ERRBNK_TEBR0_POISON_Pos 28U /*!< ERRBNK TEBR0: POISON Position */ +#define ERRBNK_TEBR0_POISON_Msk (1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 27U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x7UL << ERRBNK_TEBR0_BANK_Pos) /*!< ERRBNK TEBR0: BANK Mask */ + +#define ERRBNK_TEBR0_LOCATION_Pos 2U /*!< ERRBNK TEBR0: LOCATION Position */ +#define ERRBNK_TEBR0_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR0_LOCATION_Pos) /*!< ERRBNK TEBR0: LOCATION Mask */ + +#define ERRBNK_TEBR0_LOCKED_Pos 1U /*!< ERRBNK TEBR0: LOCKED Position */ +#define ERRBNK_TEBR0_LOCKED_Msk (1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 1 Definitions */ +#define ERRBNK_TEBR1_SWDEF_Pos 30U /*!< ERRBNK TEBR1: SWDEF Position */ +#define ERRBNK_TEBR1_SWDEF_Msk (0x3UL << ERRBNK_TEBR1_SWDEF_Pos) /*!< ERRBNK TEBR1: SWDEF Mask */ + +#define ERRBNK_TEBR1_POISON_Pos 28U /*!< ERRBNK TEBR1: POISON Position */ +#define ERRBNK_TEBR1_POISON_Msk (1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 27U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x7UL << ERRBNK_TEBR1_BANK_Pos) /*!< ERRBNK TEBR1: BANK Mask */ + +#define ERRBNK_TEBR1_LOCATION_Pos 2U /*!< ERRBNK TEBR1: LOCATION Position */ +#define ERRBNK_TEBR1_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR1_LOCATION_Pos) /*!< ERRBNK TEBR1: LOCATION Mask */ + +#define ERRBNK_TEBR1_LOCKED_Pos 1U /*!< ERRBNK TEBR1: LOCKED Position */ +#define ERRBNK_TEBR1_LOCKED_Msk (1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (1UL << /*ERRBNK_TEBR1_VALID_Pos*/) /*!< ERRBNK TEBR1: VALID Mask */ + +/*@}*/ /* end of group ErrBnk_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PrcCfgInf_Type Processor Configuration Information Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Processor Configuration Information Registerss (PRCCFGINF) + @{ + */ + +/** + \brief Structure type to access the Processor Configuration Information Registerss (PRCCFGINF). + */ +typedef struct +{ + __OM uint32_t CFGINFOSEL; /*!< Offset: 0x000 ( /W) Processor Configuration Information Selection Register */ + __IM uint32_t CFGINFORD; /*!< Offset: 0x004 (R/ ) Processor Configuration Information Read Data Register */ +} PrcCfgInf_Type; + +/** \brief PrcCfgInf Processor Configuration Information Selection Register Definitions */ + +/** \brief PrcCfgInf Processor Configuration Information Read Data Register Definitions */ + +/*@}*/ /* end of group PrcCfgInf_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup STL_Type Software Test Library Observation Registers + \brief Type definitions for the Software Test Library Observation Registerss (STL) + @{ + */ + +/** + \brief Structure type to access the Software Test Library Observation Registerss (STL). + */ +typedef struct +{ + __IM uint32_t STLNVICPENDOR; /*!< Offset: 0x000 (R/ ) NVIC Pending Priority Tree Register */ + __IM uint32_t STLNVICACTVOR; /*!< Offset: 0x004 (R/ ) NVIC Active Priority Tree Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t STLIDMPUSR; /*!< Offset: 0x010 ( /W) MPU Sample Register */ + __IM uint32_t STLIMPUOR; /*!< Offset: 0x014 (R/ ) MPU Region Hit Register */ + __IM uint32_t STLD0MPUOR; /*!< Offset: 0x018 (R/ ) MPU Memory Attributes Register 0 */ + __IM uint32_t STLD1MPUOR; /*!< Offset: 0x01C (R/ ) MPU Memory Attributes Register 1 */ + +} STL_Type; + +/** \brief STL NVIC Pending Priority Tree Register Definitions */ +#define STL_STLNVICPENDOR_VALID_Pos 18U /*!< STL STLNVICPENDOR: VALID Position */ +#define STL_STLNVICPENDOR_VALID_Msk (1UL << STL_STLNVICPENDOR_VALID_Pos) /*!< STL STLNVICPENDOR: VALID Mask */ + +#define STL_STLNVICPENDOR_TARGET_Pos 17U /*!< STL STLNVICPENDOR: TARGET Position */ +#define STL_STLNVICPENDOR_TARGET_Msk (1UL << STL_STLNVICPENDOR_TARGET_Pos) /*!< STL STLNVICPENDOR: TARGET Mask */ + +#define STL_STLNVICPENDOR_PRIORITY_Pos 9U /*!< STL STLNVICPENDOR: PRIORITY Position */ +#define STL_STLNVICPENDOR_PRIORITY_Msk (0xFFUL << STL_STLNVICPENDOR_PRIORITY_Pos) /*!< STL STLNVICPENDOR: PRIORITY Mask */ + +#define STL_STLNVICPENDOR_INTNUM_Pos 0U /*!< STL STLNVICPENDOR: INTNUM Position */ +#define STL_STLNVICPENDOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICPENDOR_INTNUM_Pos*/) /*!< STL STLNVICPENDOR: INTNUM Mask */ + +/** \brief STL NVIC Active Priority Tree Register Definitions */ +#define STL_STLNVICACTVOR_VALID_Pos 18U /*!< STL STLNVICACTVOR: VALID Position */ +#define STL_STLNVICACTVOR_VALID_Msk (1UL << STL_STLNVICACTVOR_VALID_Pos) /*!< STL STLNVICACTVOR: VALID Mask */ + +#define STL_STLNVICACTVOR_TARGET_Pos 17U /*!< STL STLNVICACTVOR: TARGET Position */ +#define STL_STLNVICACTVOR_TARGET_Msk (1UL << STL_STLNVICACTVOR_TARGET_Pos) /*!< STL STLNVICACTVOR: TARGET Mask */ + +#define STL_STLNVICACTVOR_PRIORITY_Pos 9U /*!< STL STLNVICACTVOR: PRIORITY Position */ +#define STL_STLNVICACTVOR_PRIORITY_Msk (0xFFUL << STL_STLNVICACTVOR_PRIORITY_Pos) /*!< STL STLNVICACTVOR: PRIORITY Mask */ + +#define STL_STLNVICACTVOR_INTNUM_Pos 0U /*!< STL STLNVICACTVOR: INTNUM Position */ +#define STL_STLNVICACTVOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICACTVOR_INTNUM_Pos*/) /*!< STL STLNVICACTVOR: INTNUM Mask */ + +/** \brief STL MPU Sample Register Definitions */ +#define STL_STLIDMPUSR_ADDR_Pos 5U /*!< STL STLIDMPUSR: ADDR Position */ +#define STL_STLIDMPUSR_ADDR_Msk (0x7FFFFFFUL << STL_STLIDMPUSR_ADDR_Pos) /*!< STL STLIDMPUSR: ADDR Mask */ + +#define STL_STLIDMPUSR_INSTR_Pos 2U /*!< STL STLIDMPUSR: INSTR Position */ +#define STL_STLIDMPUSR_INSTR_Msk (1UL << STL_STLIDMPUSR_INSTR_Pos) /*!< STL STLIDMPUSR: INSTR Mask */ + +#define STL_STLIDMPUSR_DATA_Pos 1U /*!< STL STLIDMPUSR: DATA Position */ +#define STL_STLIDMPUSR_DATA_Msk (1UL << STL_STLIDMPUSR_DATA_Pos) /*!< STL STLIDMPUSR: DATA Mask */ + +/** \brief STL MPU Region Hit Register Definitions */ +#define STL_STLIMPUOR_HITREGION_Pos 9U /*!< STL STLIMPUOR: HITREGION Position */ +#define STL_STLIMPUOR_HITREGION_Msk (0xFFUL << STL_STLIMPUOR_HITREGION_Pos) /*!< STL STLIMPUOR: HITREGION Mask */ + +#define STL_STLIMPUOR_ATTR_Pos 0U /*!< STL STLIMPUOR: ATTR Position */ +#define STL_STLIMPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLIMPUOR_ATTR_Pos*/) /*!< STL STLIMPUOR: ATTR Mask */ + +/** \brief STL MPU Memory Attributes Register 0 Definitions */ +#define STL_STLD0MPUOR_HITREGION_Pos 9U /*!< STL STLD0MPUOR: HITREGION Position */ +#define STL_STLD0MPUOR_HITREGION_Msk (0xFFUL << STL_STLD0MPUOR_HITREGION_Pos) /*!< STL STLD0MPUOR: HITREGION Mask */ + +#define STL_STLD0MPUOR_ATTR_Pos 0U /*!< STL STLD0MPUOR: ATTR Position */ +#define STL_STLD0MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD0MPUOR_ATTR_Pos*/) /*!< STL STLD0MPUOR: ATTR Mask */ + +/** \brief STL MPU Memory Attributes Register 1 Definitions */ +#define STL_STLD1MPUOR_HITREGION_Pos 9U /*!< STL STLD1MPUOR: HITREGION Position */ +#define STL_STLD1MPUOR_HITREGION_Msk (0xFFUL << STL_STLD1MPUOR_HITREGION_Pos) /*!< STL STLD1MPUOR: HITREGION Mask */ + +#define STL_STLD1MPUOR_ATTR_Pos 0U /*!< STL STLD1MPUOR: ATTR Position */ +#define STL_STLD1MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD1MPUOR_ATTR_Pos*/) /*!< STL STLD1MPUOR: ATTR Mask */ + +/*@}*/ /* end of group STL_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU Claim Tag Set Register Definitions */ +#define TPIU_CLAIMSET_SET_Pos 0U /*!< TPIU CLAIMSET: SET Position */ +#define TPIU_CLAIMSET_SET_Msk (0xFUL /*<< TPIU_CLAIMSET_SET_Pos*/) /*!< TPIU CLAIMSET: SET Mask */ + +/** \brief TPIU Claim Tag Clear Register Definitions */ +#define TPIU_CLAIMCLR_CLR_Pos 0U /*!< TPIU CLAIMCLR: CLR Position */ +#define TPIU_CLAIMCLR_CLR_Msk (0xFUL /*<< TPIU_CLAIMCLR_CLR_Pos*/) /*!< TPIU CLAIMCLR: CLR Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) + \brief Type definitions for the Performance Monitoring Unit (PMU) + @{ + */ + +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x0 (R/W) Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) Event Type and Filter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED2[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ +} PMU_Type; + +/** \brief PMU Event Counter Registers (0-30) Definitions */ +#define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ +#define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ + +/** \brief PMU Event Type and Filter Registers (0-30) Definitions */ +#define PMU_EVTYPER_EVENTTOCNT_Pos 0U /*!< PMU EVTYPER: Event to Count Position */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ + +/** \brief PMU Count Enable Set Register Definitions */ +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENSET: Event Counter 0 Enable Set Position */ +#define PMU_CNTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENSET_CNT0_ENABLE_Pos*/) /*!< PMU CNTENSET: Event Counter 0 Enable Set Mask */ + +#define PMU_CNTENSET_CNT1_ENABLE_Pos 1U /*!< PMU CNTENSET: Event Counter 1 Enable Set Position */ +#define PMU_CNTENSET_CNT1_ENABLE_Msk (1UL << PMU_CNTENSET_CNT1_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 1 Enable Set Mask */ + +#define PMU_CNTENSET_CNT2_ENABLE_Pos 2U /*!< PMU CNTENSET: Event Counter 2 Enable Set Position */ +#define PMU_CNTENSET_CNT2_ENABLE_Msk (1UL << PMU_CNTENSET_CNT2_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 2 Enable Set Mask */ + +#define PMU_CNTENSET_CNT3_ENABLE_Pos 3U /*!< PMU CNTENSET: Event Counter 3 Enable Set Position */ +#define PMU_CNTENSET_CNT3_ENABLE_Msk (1UL << PMU_CNTENSET_CNT3_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 3 Enable Set Mask */ + +#define PMU_CNTENSET_CNT4_ENABLE_Pos 4U /*!< PMU CNTENSET: Event Counter 4 Enable Set Position */ +#define PMU_CNTENSET_CNT4_ENABLE_Msk (1UL << PMU_CNTENSET_CNT4_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 4 Enable Set Mask */ + +#define PMU_CNTENSET_CNT5_ENABLE_Pos 5U /*!< PMU CNTENSET: Event Counter 5 Enable Set Position */ +#define PMU_CNTENSET_CNT5_ENABLE_Msk (1UL << PMU_CNTENSET_CNT5_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 5 Enable Set Mask */ + +#define PMU_CNTENSET_CNT6_ENABLE_Pos 6U /*!< PMU CNTENSET: Event Counter 6 Enable Set Position */ +#define PMU_CNTENSET_CNT6_ENABLE_Msk (1UL << PMU_CNTENSET_CNT6_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 6 Enable Set Mask */ + +#define PMU_CNTENSET_CNT7_ENABLE_Pos 7U /*!< PMU CNTENSET: Event Counter 7 Enable Set Position */ +#define PMU_CNTENSET_CNT7_ENABLE_Msk (1UL << PMU_CNTENSET_CNT7_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 7 Enable Set Mask */ + +#define PMU_CNTENSET_CNT8_ENABLE_Pos 8U /*!< PMU CNTENSET: Event Counter 8 Enable Set Position */ +#define PMU_CNTENSET_CNT8_ENABLE_Msk (1UL << PMU_CNTENSET_CNT8_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 8 Enable Set Mask */ + +#define PMU_CNTENSET_CNT9_ENABLE_Pos 9U /*!< PMU CNTENSET: Event Counter 9 Enable Set Position */ +#define PMU_CNTENSET_CNT9_ENABLE_Msk (1UL << PMU_CNTENSET_CNT9_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 9 Enable Set Mask */ + +#define PMU_CNTENSET_CNT10_ENABLE_Pos 10U /*!< PMU CNTENSET: Event Counter 10 Enable Set Position */ +#define PMU_CNTENSET_CNT10_ENABLE_Msk (1UL << PMU_CNTENSET_CNT10_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 10 Enable Set Mask */ + +#define PMU_CNTENSET_CNT11_ENABLE_Pos 11U /*!< PMU CNTENSET: Event Counter 11 Enable Set Position */ +#define PMU_CNTENSET_CNT11_ENABLE_Msk (1UL << PMU_CNTENSET_CNT11_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 11 Enable Set Mask */ + +#define PMU_CNTENSET_CNT12_ENABLE_Pos 12U /*!< PMU CNTENSET: Event Counter 12 Enable Set Position */ +#define PMU_CNTENSET_CNT12_ENABLE_Msk (1UL << PMU_CNTENSET_CNT12_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 12 Enable Set Mask */ + +#define PMU_CNTENSET_CNT13_ENABLE_Pos 13U /*!< PMU CNTENSET: Event Counter 13 Enable Set Position */ +#define PMU_CNTENSET_CNT13_ENABLE_Msk (1UL << PMU_CNTENSET_CNT13_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 13 Enable Set Mask */ + +#define PMU_CNTENSET_CNT14_ENABLE_Pos 14U /*!< PMU CNTENSET: Event Counter 14 Enable Set Position */ +#define PMU_CNTENSET_CNT14_ENABLE_Msk (1UL << PMU_CNTENSET_CNT14_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 14 Enable Set Mask */ + +#define PMU_CNTENSET_CNT15_ENABLE_Pos 15U /*!< PMU CNTENSET: Event Counter 15 Enable Set Position */ +#define PMU_CNTENSET_CNT15_ENABLE_Msk (1UL << PMU_CNTENSET_CNT15_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 15 Enable Set Mask */ + +#define PMU_CNTENSET_CNT16_ENABLE_Pos 16U /*!< PMU CNTENSET: Event Counter 16 Enable Set Position */ +#define PMU_CNTENSET_CNT16_ENABLE_Msk (1UL << PMU_CNTENSET_CNT16_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 16 Enable Set Mask */ + +#define PMU_CNTENSET_CNT17_ENABLE_Pos 17U /*!< PMU CNTENSET: Event Counter 17 Enable Set Position */ +#define PMU_CNTENSET_CNT17_ENABLE_Msk (1UL << PMU_CNTENSET_CNT17_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 17 Enable Set Mask */ + +#define PMU_CNTENSET_CNT18_ENABLE_Pos 18U /*!< PMU CNTENSET: Event Counter 18 Enable Set Position */ +#define PMU_CNTENSET_CNT18_ENABLE_Msk (1UL << PMU_CNTENSET_CNT18_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 18 Enable Set Mask */ + +#define PMU_CNTENSET_CNT19_ENABLE_Pos 19U /*!< PMU CNTENSET: Event Counter 19 Enable Set Position */ +#define PMU_CNTENSET_CNT19_ENABLE_Msk (1UL << PMU_CNTENSET_CNT19_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 19 Enable Set Mask */ + +#define PMU_CNTENSET_CNT20_ENABLE_Pos 20U /*!< PMU CNTENSET: Event Counter 20 Enable Set Position */ +#define PMU_CNTENSET_CNT20_ENABLE_Msk (1UL << PMU_CNTENSET_CNT20_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 20 Enable Set Mask */ + +#define PMU_CNTENSET_CNT21_ENABLE_Pos 21U /*!< PMU CNTENSET: Event Counter 21 Enable Set Position */ +#define PMU_CNTENSET_CNT21_ENABLE_Msk (1UL << PMU_CNTENSET_CNT21_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 21 Enable Set Mask */ + +#define PMU_CNTENSET_CNT22_ENABLE_Pos 22U /*!< PMU CNTENSET: Event Counter 22 Enable Set Position */ +#define PMU_CNTENSET_CNT22_ENABLE_Msk (1UL << PMU_CNTENSET_CNT22_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 22 Enable Set Mask */ + +#define PMU_CNTENSET_CNT23_ENABLE_Pos 23U /*!< PMU CNTENSET: Event Counter 23 Enable Set Position */ +#define PMU_CNTENSET_CNT23_ENABLE_Msk (1UL << PMU_CNTENSET_CNT23_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 23 Enable Set Mask */ + +#define PMU_CNTENSET_CNT24_ENABLE_Pos 24U /*!< PMU CNTENSET: Event Counter 24 Enable Set Position */ +#define PMU_CNTENSET_CNT24_ENABLE_Msk (1UL << PMU_CNTENSET_CNT24_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 24 Enable Set Mask */ + +#define PMU_CNTENSET_CNT25_ENABLE_Pos 25U /*!< PMU CNTENSET: Event Counter 25 Enable Set Position */ +#define PMU_CNTENSET_CNT25_ENABLE_Msk (1UL << PMU_CNTENSET_CNT25_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 25 Enable Set Mask */ + +#define PMU_CNTENSET_CNT26_ENABLE_Pos 26U /*!< PMU CNTENSET: Event Counter 26 Enable Set Position */ +#define PMU_CNTENSET_CNT26_ENABLE_Msk (1UL << PMU_CNTENSET_CNT26_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 26 Enable Set Mask */ + +#define PMU_CNTENSET_CNT27_ENABLE_Pos 27U /*!< PMU CNTENSET: Event Counter 27 Enable Set Position */ +#define PMU_CNTENSET_CNT27_ENABLE_Msk (1UL << PMU_CNTENSET_CNT27_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 27 Enable Set Mask */ + +#define PMU_CNTENSET_CNT28_ENABLE_Pos 28U /*!< PMU CNTENSET: Event Counter 28 Enable Set Position */ +#define PMU_CNTENSET_CNT28_ENABLE_Msk (1UL << PMU_CNTENSET_CNT28_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 28 Enable Set Mask */ + +#define PMU_CNTENSET_CNT29_ENABLE_Pos 29U /*!< PMU CNTENSET: Event Counter 29 Enable Set Position */ +#define PMU_CNTENSET_CNT29_ENABLE_Msk (1UL << PMU_CNTENSET_CNT29_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 29 Enable Set Mask */ + +#define PMU_CNTENSET_CNT30_ENABLE_Pos 30U /*!< PMU CNTENSET: Event Counter 30 Enable Set Position */ +#define PMU_CNTENSET_CNT30_ENABLE_Msk (1UL << PMU_CNTENSET_CNT30_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 30 Enable Set Mask */ + +#define PMU_CNTENSET_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENSET: Cycle Counter Enable Set Position */ +#define PMU_CNTENSET_CCNTR_ENABLE_Msk (1UL << PMU_CNTENSET_CCNTR_ENABLE_Pos) /*!< PMU CNTENSET: Cycle Counter Enable Set Mask */ + +/** \brief PMU Count Enable Clear Register Definitions */ +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Position */ +#define PMU_CNTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU CNTENCLR: Event Counter 1 Enable Clear Position */ +#define PMU_CNTENCLR_CNT1_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT1_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 1 Enable Clear */ + +#define PMU_CNTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Position */ +#define PMU_CNTENCLR_CNT2_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT2_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Position */ +#define PMU_CNTENCLR_CNT3_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT3_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Position */ +#define PMU_CNTENCLR_CNT4_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT4_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Position */ +#define PMU_CNTENCLR_CNT5_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT5_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Position */ +#define PMU_CNTENCLR_CNT6_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT6_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Position */ +#define PMU_CNTENCLR_CNT7_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT7_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Position */ +#define PMU_CNTENCLR_CNT8_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT8_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Position */ +#define PMU_CNTENCLR_CNT9_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT9_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Position */ +#define PMU_CNTENCLR_CNT10_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT10_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Position */ +#define PMU_CNTENCLR_CNT11_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT11_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Position */ +#define PMU_CNTENCLR_CNT12_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT12_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Position */ +#define PMU_CNTENCLR_CNT13_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT13_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Position */ +#define PMU_CNTENCLR_CNT14_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT14_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Position */ +#define PMU_CNTENCLR_CNT15_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT15_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Position */ +#define PMU_CNTENCLR_CNT16_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT16_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Position */ +#define PMU_CNTENCLR_CNT17_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT17_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Position */ +#define PMU_CNTENCLR_CNT18_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT18_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Position */ +#define PMU_CNTENCLR_CNT19_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT19_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Position */ +#define PMU_CNTENCLR_CNT20_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT20_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Position */ +#define PMU_CNTENCLR_CNT21_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT21_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Position */ +#define PMU_CNTENCLR_CNT22_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT22_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Position */ +#define PMU_CNTENCLR_CNT23_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT23_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Position */ +#define PMU_CNTENCLR_CNT24_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT24_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Position */ +#define PMU_CNTENCLR_CNT25_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT25_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Position */ +#define PMU_CNTENCLR_CNT26_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT26_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Position */ +#define PMU_CNTENCLR_CNT27_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT27_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Position */ +#define PMU_CNTENCLR_CNT28_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT28_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Position */ +#define PMU_CNTENCLR_CNT29_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT29_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Position */ +#define PMU_CNTENCLR_CNT30_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT30_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Mask */ + +#define PMU_CNTENCLR_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENCLR: Cycle Counter Enable Clear Position */ +#define PMU_CNTENCLR_CCNTR_ENABLE_Msk (1UL << PMU_CNTENCLR_CCNTR_ENABLE_Pos) /*!< PMU CNTENCLR: Cycle Counter Enable Clear Mask */ + +/** \brief PMU Interrupt Enable Set Register Definitions */ +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENSET_CNT0_ENABLE_Pos*/) /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT1_ENABLE_Pos 1U /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT1_ENABLE_Msk (1UL << PMU_INTENSET_CNT1_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT2_ENABLE_Pos 2U /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT2_ENABLE_Msk (1UL << PMU_INTENSET_CNT2_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT3_ENABLE_Pos 3U /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT3_ENABLE_Msk (1UL << PMU_INTENSET_CNT3_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT4_ENABLE_Pos 4U /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT4_ENABLE_Msk (1UL << PMU_INTENSET_CNT4_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT5_ENABLE_Pos 5U /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT5_ENABLE_Msk (1UL << PMU_INTENSET_CNT5_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT6_ENABLE_Pos 6U /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT6_ENABLE_Msk (1UL << PMU_INTENSET_CNT6_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT7_ENABLE_Pos 7U /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT7_ENABLE_Msk (1UL << PMU_INTENSET_CNT7_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT8_ENABLE_Pos 8U /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT8_ENABLE_Msk (1UL << PMU_INTENSET_CNT8_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT9_ENABLE_Pos 9U /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT9_ENABLE_Msk (1UL << PMU_INTENSET_CNT9_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT10_ENABLE_Pos 10U /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT10_ENABLE_Msk (1UL << PMU_INTENSET_CNT10_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT11_ENABLE_Pos 11U /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT11_ENABLE_Msk (1UL << PMU_INTENSET_CNT11_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT12_ENABLE_Pos 12U /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT12_ENABLE_Msk (1UL << PMU_INTENSET_CNT12_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT13_ENABLE_Pos 13U /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT13_ENABLE_Msk (1UL << PMU_INTENSET_CNT13_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT14_ENABLE_Pos 14U /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT14_ENABLE_Msk (1UL << PMU_INTENSET_CNT14_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT15_ENABLE_Pos 15U /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT15_ENABLE_Msk (1UL << PMU_INTENSET_CNT15_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT16_ENABLE_Pos 16U /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT16_ENABLE_Msk (1UL << PMU_INTENSET_CNT16_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT17_ENABLE_Pos 17U /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT17_ENABLE_Msk (1UL << PMU_INTENSET_CNT17_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT18_ENABLE_Pos 18U /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT18_ENABLE_Msk (1UL << PMU_INTENSET_CNT18_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT19_ENABLE_Pos 19U /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT19_ENABLE_Msk (1UL << PMU_INTENSET_CNT19_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT20_ENABLE_Pos 20U /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT20_ENABLE_Msk (1UL << PMU_INTENSET_CNT20_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT21_ENABLE_Pos 21U /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT21_ENABLE_Msk (1UL << PMU_INTENSET_CNT21_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT22_ENABLE_Pos 22U /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT22_ENABLE_Msk (1UL << PMU_INTENSET_CNT22_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT23_ENABLE_Pos 23U /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT23_ENABLE_Msk (1UL << PMU_INTENSET_CNT23_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT24_ENABLE_Pos 24U /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT24_ENABLE_Msk (1UL << PMU_INTENSET_CNT24_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT25_ENABLE_Pos 25U /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT25_ENABLE_Msk (1UL << PMU_INTENSET_CNT25_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT26_ENABLE_Pos 26U /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT26_ENABLE_Msk (1UL << PMU_INTENSET_CNT26_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT27_ENABLE_Pos 27U /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT27_ENABLE_Msk (1UL << PMU_INTENSET_CNT27_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT28_ENABLE_Pos 28U /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT28_ENABLE_Msk (1UL << PMU_INTENSET_CNT28_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT29_ENABLE_Pos 29U /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT29_ENABLE_Msk (1UL << PMU_INTENSET_CNT29_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT30_ENABLE_Pos 30U /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT30_ENABLE_Msk (1UL << PMU_INTENSET_CNT30_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Position */ +#define PMU_INTENSET_CCYCNT_ENABLE_Msk (1UL << PMU_INTENSET_CYCCNT_ENABLE_Pos) /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Mask */ + +/** \brief PMU Interrupt Enable Clear Register Definitions */ +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT1_ENABLE_Msk (1UL << PMU_INTENCLR_CNT1_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear */ + +#define PMU_INTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT2_ENABLE_Msk (1UL << PMU_INTENCLR_CNT2_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT3_ENABLE_Msk (1UL << PMU_INTENCLR_CNT3_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT4_ENABLE_Msk (1UL << PMU_INTENCLR_CNT4_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT5_ENABLE_Msk (1UL << PMU_INTENCLR_CNT5_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT6_ENABLE_Msk (1UL << PMU_INTENCLR_CNT6_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT7_ENABLE_Msk (1UL << PMU_INTENCLR_CNT7_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT8_ENABLE_Msk (1UL << PMU_INTENCLR_CNT8_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT9_ENABLE_Msk (1UL << PMU_INTENCLR_CNT9_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT10_ENABLE_Msk (1UL << PMU_INTENCLR_CNT10_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT11_ENABLE_Msk (1UL << PMU_INTENCLR_CNT11_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT12_ENABLE_Msk (1UL << PMU_INTENCLR_CNT12_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT13_ENABLE_Msk (1UL << PMU_INTENCLR_CNT13_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT14_ENABLE_Msk (1UL << PMU_INTENCLR_CNT14_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT15_ENABLE_Msk (1UL << PMU_INTENCLR_CNT15_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT16_ENABLE_Msk (1UL << PMU_INTENCLR_CNT16_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT17_ENABLE_Msk (1UL << PMU_INTENCLR_CNT17_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT18_ENABLE_Msk (1UL << PMU_INTENCLR_CNT18_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT19_ENABLE_Msk (1UL << PMU_INTENCLR_CNT19_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT20_ENABLE_Msk (1UL << PMU_INTENCLR_CNT20_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT21_ENABLE_Msk (1UL << PMU_INTENCLR_CNT21_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT22_ENABLE_Msk (1UL << PMU_INTENCLR_CNT22_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT23_ENABLE_Msk (1UL << PMU_INTENCLR_CNT23_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT24_ENABLE_Msk (1UL << PMU_INTENCLR_CNT24_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT25_ENABLE_Msk (1UL << PMU_INTENCLR_CNT25_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT26_ENABLE_Msk (1UL << PMU_INTENCLR_CNT26_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT27_ENABLE_Msk (1UL << PMU_INTENCLR_CNT27_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT28_ENABLE_Msk (1UL << PMU_INTENCLR_CNT28_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT29_ENABLE_Msk (1UL << PMU_INTENCLR_CNT29_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT30_ENABLE_Msk (1UL << PMU_INTENCLR_CNT30_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CYCCNT_ENABLE_Msk (1UL << PMU_INTENCLR_CYCCNT_ENABLE_Pos) /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Mask */ + +/** \brief PMU Overflow Flag Status Set Register Definitions */ +#define PMU_OVSSET_CNT0_STATUS_Pos 0U /*!< PMU OVSSET: Event Counter 0 Overflow Set Position */ +#define PMU_OVSSET_CNT0_STATUS_Msk (1UL /*<< PMU_OVSSET_CNT0_STATUS_Pos*/) /*!< PMU OVSSET: Event Counter 0 Overflow Set Mask */ + +#define PMU_OVSSET_CNT1_STATUS_Pos 1U /*!< PMU OVSSET: Event Counter 1 Overflow Set Position */ +#define PMU_OVSSET_CNT1_STATUS_Msk (1UL << PMU_OVSSET_CNT1_STATUS_Pos) /*!< PMU OVSSET: Event Counter 1 Overflow Set Mask */ + +#define PMU_OVSSET_CNT2_STATUS_Pos 2U /*!< PMU OVSSET: Event Counter 2 Overflow Set Position */ +#define PMU_OVSSET_CNT2_STATUS_Msk (1UL << PMU_OVSSET_CNT2_STATUS_Pos) /*!< PMU OVSSET: Event Counter 2 Overflow Set Mask */ + +#define PMU_OVSSET_CNT3_STATUS_Pos 3U /*!< PMU OVSSET: Event Counter 3 Overflow Set Position */ +#define PMU_OVSSET_CNT3_STATUS_Msk (1UL << PMU_OVSSET_CNT3_STATUS_Pos) /*!< PMU OVSSET: Event Counter 3 Overflow Set Mask */ + +#define PMU_OVSSET_CNT4_STATUS_Pos 4U /*!< PMU OVSSET: Event Counter 4 Overflow Set Position */ +#define PMU_OVSSET_CNT4_STATUS_Msk (1UL << PMU_OVSSET_CNT4_STATUS_Pos) /*!< PMU OVSSET: Event Counter 4 Overflow Set Mask */ + +#define PMU_OVSSET_CNT5_STATUS_Pos 5U /*!< PMU OVSSET: Event Counter 5 Overflow Set Position */ +#define PMU_OVSSET_CNT5_STATUS_Msk (1UL << PMU_OVSSET_CNT5_STATUS_Pos) /*!< PMU OVSSET: Event Counter 5 Overflow Set Mask */ + +#define PMU_OVSSET_CNT6_STATUS_Pos 6U /*!< PMU OVSSET: Event Counter 6 Overflow Set Position */ +#define PMU_OVSSET_CNT6_STATUS_Msk (1UL << PMU_OVSSET_CNT6_STATUS_Pos) /*!< PMU OVSSET: Event Counter 6 Overflow Set Mask */ + +#define PMU_OVSSET_CNT7_STATUS_Pos 7U /*!< PMU OVSSET: Event Counter 7 Overflow Set Position */ +#define PMU_OVSSET_CNT7_STATUS_Msk (1UL << PMU_OVSSET_CNT7_STATUS_Pos) /*!< PMU OVSSET: Event Counter 7 Overflow Set Mask */ + +#define PMU_OVSSET_CNT8_STATUS_Pos 8U /*!< PMU OVSSET: Event Counter 8 Overflow Set Position */ +#define PMU_OVSSET_CNT8_STATUS_Msk (1UL << PMU_OVSSET_CNT8_STATUS_Pos) /*!< PMU OVSSET: Event Counter 8 Overflow Set Mask */ + +#define PMU_OVSSET_CNT9_STATUS_Pos 9U /*!< PMU OVSSET: Event Counter 9 Overflow Set Position */ +#define PMU_OVSSET_CNT9_STATUS_Msk (1UL << PMU_OVSSET_CNT9_STATUS_Pos) /*!< PMU OVSSET: Event Counter 9 Overflow Set Mask */ + +#define PMU_OVSSET_CNT10_STATUS_Pos 10U /*!< PMU OVSSET: Event Counter 10 Overflow Set Position */ +#define PMU_OVSSET_CNT10_STATUS_Msk (1UL << PMU_OVSSET_CNT10_STATUS_Pos) /*!< PMU OVSSET: Event Counter 10 Overflow Set Mask */ + +#define PMU_OVSSET_CNT11_STATUS_Pos 11U /*!< PMU OVSSET: Event Counter 11 Overflow Set Position */ +#define PMU_OVSSET_CNT11_STATUS_Msk (1UL << PMU_OVSSET_CNT11_STATUS_Pos) /*!< PMU OVSSET: Event Counter 11 Overflow Set Mask */ + +#define PMU_OVSSET_CNT12_STATUS_Pos 12U /*!< PMU OVSSET: Event Counter 12 Overflow Set Position */ +#define PMU_OVSSET_CNT12_STATUS_Msk (1UL << PMU_OVSSET_CNT12_STATUS_Pos) /*!< PMU OVSSET: Event Counter 12 Overflow Set Mask */ + +#define PMU_OVSSET_CNT13_STATUS_Pos 13U /*!< PMU OVSSET: Event Counter 13 Overflow Set Position */ +#define PMU_OVSSET_CNT13_STATUS_Msk (1UL << PMU_OVSSET_CNT13_STATUS_Pos) /*!< PMU OVSSET: Event Counter 13 Overflow Set Mask */ + +#define PMU_OVSSET_CNT14_STATUS_Pos 14U /*!< PMU OVSSET: Event Counter 14 Overflow Set Position */ +#define PMU_OVSSET_CNT14_STATUS_Msk (1UL << PMU_OVSSET_CNT14_STATUS_Pos) /*!< PMU OVSSET: Event Counter 14 Overflow Set Mask */ + +#define PMU_OVSSET_CNT15_STATUS_Pos 15U /*!< PMU OVSSET: Event Counter 15 Overflow Set Position */ +#define PMU_OVSSET_CNT15_STATUS_Msk (1UL << PMU_OVSSET_CNT15_STATUS_Pos) /*!< PMU OVSSET: Event Counter 15 Overflow Set Mask */ + +#define PMU_OVSSET_CNT16_STATUS_Pos 16U /*!< PMU OVSSET: Event Counter 16 Overflow Set Position */ +#define PMU_OVSSET_CNT16_STATUS_Msk (1UL << PMU_OVSSET_CNT16_STATUS_Pos) /*!< PMU OVSSET: Event Counter 16 Overflow Set Mask */ + +#define PMU_OVSSET_CNT17_STATUS_Pos 17U /*!< PMU OVSSET: Event Counter 17 Overflow Set Position */ +#define PMU_OVSSET_CNT17_STATUS_Msk (1UL << PMU_OVSSET_CNT17_STATUS_Pos) /*!< PMU OVSSET: Event Counter 17 Overflow Set Mask */ + +#define PMU_OVSSET_CNT18_STATUS_Pos 18U /*!< PMU OVSSET: Event Counter 18 Overflow Set Position */ +#define PMU_OVSSET_CNT18_STATUS_Msk (1UL << PMU_OVSSET_CNT18_STATUS_Pos) /*!< PMU OVSSET: Event Counter 18 Overflow Set Mask */ + +#define PMU_OVSSET_CNT19_STATUS_Pos 19U /*!< PMU OVSSET: Event Counter 19 Overflow Set Position */ +#define PMU_OVSSET_CNT19_STATUS_Msk (1UL << PMU_OVSSET_CNT19_STATUS_Pos) /*!< PMU OVSSET: Event Counter 19 Overflow Set Mask */ + +#define PMU_OVSSET_CNT20_STATUS_Pos 20U /*!< PMU OVSSET: Event Counter 20 Overflow Set Position */ +#define PMU_OVSSET_CNT20_STATUS_Msk (1UL << PMU_OVSSET_CNT20_STATUS_Pos) /*!< PMU OVSSET: Event Counter 20 Overflow Set Mask */ + +#define PMU_OVSSET_CNT21_STATUS_Pos 21U /*!< PMU OVSSET: Event Counter 21 Overflow Set Position */ +#define PMU_OVSSET_CNT21_STATUS_Msk (1UL << PMU_OVSSET_CNT21_STATUS_Pos) /*!< PMU OVSSET: Event Counter 21 Overflow Set Mask */ + +#define PMU_OVSSET_CNT22_STATUS_Pos 22U /*!< PMU OVSSET: Event Counter 22 Overflow Set Position */ +#define PMU_OVSSET_CNT22_STATUS_Msk (1UL << PMU_OVSSET_CNT22_STATUS_Pos) /*!< PMU OVSSET: Event Counter 22 Overflow Set Mask */ + +#define PMU_OVSSET_CNT23_STATUS_Pos 23U /*!< PMU OVSSET: Event Counter 23 Overflow Set Position */ +#define PMU_OVSSET_CNT23_STATUS_Msk (1UL << PMU_OVSSET_CNT23_STATUS_Pos) /*!< PMU OVSSET: Event Counter 23 Overflow Set Mask */ + +#define PMU_OVSSET_CNT24_STATUS_Pos 24U /*!< PMU OVSSET: Event Counter 24 Overflow Set Position */ +#define PMU_OVSSET_CNT24_STATUS_Msk (1UL << PMU_OVSSET_CNT24_STATUS_Pos) /*!< PMU OVSSET: Event Counter 24 Overflow Set Mask */ + +#define PMU_OVSSET_CNT25_STATUS_Pos 25U /*!< PMU OVSSET: Event Counter 25 Overflow Set Position */ +#define PMU_OVSSET_CNT25_STATUS_Msk (1UL << PMU_OVSSET_CNT25_STATUS_Pos) /*!< PMU OVSSET: Event Counter 25 Overflow Set Mask */ + +#define PMU_OVSSET_CNT26_STATUS_Pos 26U /*!< PMU OVSSET: Event Counter 26 Overflow Set Position */ +#define PMU_OVSSET_CNT26_STATUS_Msk (1UL << PMU_OVSSET_CNT26_STATUS_Pos) /*!< PMU OVSSET: Event Counter 26 Overflow Set Mask */ + +#define PMU_OVSSET_CNT27_STATUS_Pos 27U /*!< PMU OVSSET: Event Counter 27 Overflow Set Position */ +#define PMU_OVSSET_CNT27_STATUS_Msk (1UL << PMU_OVSSET_CNT27_STATUS_Pos) /*!< PMU OVSSET: Event Counter 27 Overflow Set Mask */ + +#define PMU_OVSSET_CNT28_STATUS_Pos 28U /*!< PMU OVSSET: Event Counter 28 Overflow Set Position */ +#define PMU_OVSSET_CNT28_STATUS_Msk (1UL << PMU_OVSSET_CNT28_STATUS_Pos) /*!< PMU OVSSET: Event Counter 28 Overflow Set Mask */ + +#define PMU_OVSSET_CNT29_STATUS_Pos 29U /*!< PMU OVSSET: Event Counter 29 Overflow Set Position */ +#define PMU_OVSSET_CNT29_STATUS_Msk (1UL << PMU_OVSSET_CNT29_STATUS_Pos) /*!< PMU OVSSET: Event Counter 29 Overflow Set Mask */ + +#define PMU_OVSSET_CNT30_STATUS_Pos 30U /*!< PMU OVSSET: Event Counter 30 Overflow Set Position */ +#define PMU_OVSSET_CNT30_STATUS_Msk (1UL << PMU_OVSSET_CNT30_STATUS_Pos) /*!< PMU OVSSET: Event Counter 30 Overflow Set Mask */ + +#define PMU_OVSSET_CYCCNT_STATUS_Pos 31U /*!< PMU OVSSET: Cycle Counter Overflow Set Position */ +#define PMU_OVSSET_CYCCNT_STATUS_Msk (1UL << PMU_OVSSET_CYCCNT_STATUS_Pos) /*!< PMU OVSSET: Cycle Counter Overflow Set Mask */ + +/** \brief PMU Overflow Flag Status Clear Register Definitions */ +#define PMU_OVSCLR_CNT0_STATUS_Pos 0U /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Position */ +#define PMU_OVSCLR_CNT0_STATUS_Msk (1UL /*<< PMU_OVSCLR_CNT0_STATUS_Pos*/) /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT1_STATUS_Pos 1U /*!< PMU OVSCLR: Event Counter 1 Overflow Clear Position */ +#define PMU_OVSCLR_CNT1_STATUS_Msk (1UL << PMU_OVSCLR_CNT1_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 1 Overflow Clear */ + +#define PMU_OVSCLR_CNT2_STATUS_Pos 2U /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Position */ +#define PMU_OVSCLR_CNT2_STATUS_Msk (1UL << PMU_OVSCLR_CNT2_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT3_STATUS_Pos 3U /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Position */ +#define PMU_OVSCLR_CNT3_STATUS_Msk (1UL << PMU_OVSCLR_CNT3_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT4_STATUS_Pos 4U /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Position */ +#define PMU_OVSCLR_CNT4_STATUS_Msk (1UL << PMU_OVSCLR_CNT4_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT5_STATUS_Pos 5U /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Position */ +#define PMU_OVSCLR_CNT5_STATUS_Msk (1UL << PMU_OVSCLR_CNT5_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT6_STATUS_Pos 6U /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Position */ +#define PMU_OVSCLR_CNT6_STATUS_Msk (1UL << PMU_OVSCLR_CNT6_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT7_STATUS_Pos 7U /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Position */ +#define PMU_OVSCLR_CNT7_STATUS_Msk (1UL << PMU_OVSCLR_CNT7_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT8_STATUS_Pos 8U /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Position */ +#define PMU_OVSCLR_CNT8_STATUS_Msk (1UL << PMU_OVSCLR_CNT8_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT9_STATUS_Pos 9U /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Position */ +#define PMU_OVSCLR_CNT9_STATUS_Msk (1UL << PMU_OVSCLR_CNT9_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT10_STATUS_Pos 10U /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Position */ +#define PMU_OVSCLR_CNT10_STATUS_Msk (1UL << PMU_OVSCLR_CNT10_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT11_STATUS_Pos 11U /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Position */ +#define PMU_OVSCLR_CNT11_STATUS_Msk (1UL << PMU_OVSCLR_CNT11_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT12_STATUS_Pos 12U /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Position */ +#define PMU_OVSCLR_CNT12_STATUS_Msk (1UL << PMU_OVSCLR_CNT12_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT13_STATUS_Pos 13U /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Position */ +#define PMU_OVSCLR_CNT13_STATUS_Msk (1UL << PMU_OVSCLR_CNT13_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT14_STATUS_Pos 14U /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Position */ +#define PMU_OVSCLR_CNT14_STATUS_Msk (1UL << PMU_OVSCLR_CNT14_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT15_STATUS_Pos 15U /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Position */ +#define PMU_OVSCLR_CNT15_STATUS_Msk (1UL << PMU_OVSCLR_CNT15_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT16_STATUS_Pos 16U /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Position */ +#define PMU_OVSCLR_CNT16_STATUS_Msk (1UL << PMU_OVSCLR_CNT16_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT17_STATUS_Pos 17U /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Position */ +#define PMU_OVSCLR_CNT17_STATUS_Msk (1UL << PMU_OVSCLR_CNT17_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT18_STATUS_Pos 18U /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Position */ +#define PMU_OVSCLR_CNT18_STATUS_Msk (1UL << PMU_OVSCLR_CNT18_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT19_STATUS_Pos 19U /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Position */ +#define PMU_OVSCLR_CNT19_STATUS_Msk (1UL << PMU_OVSCLR_CNT19_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT20_STATUS_Pos 20U /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Position */ +#define PMU_OVSCLR_CNT20_STATUS_Msk (1UL << PMU_OVSCLR_CNT20_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT21_STATUS_Pos 21U /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Position */ +#define PMU_OVSCLR_CNT21_STATUS_Msk (1UL << PMU_OVSCLR_CNT21_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT22_STATUS_Pos 22U /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Position */ +#define PMU_OVSCLR_CNT22_STATUS_Msk (1UL << PMU_OVSCLR_CNT22_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT23_STATUS_Pos 23U /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Position */ +#define PMU_OVSCLR_CNT23_STATUS_Msk (1UL << PMU_OVSCLR_CNT23_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT24_STATUS_Pos 24U /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Position */ +#define PMU_OVSCLR_CNT24_STATUS_Msk (1UL << PMU_OVSCLR_CNT24_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT25_STATUS_Pos 25U /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Position */ +#define PMU_OVSCLR_CNT25_STATUS_Msk (1UL << PMU_OVSCLR_CNT25_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT26_STATUS_Pos 26U /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Position */ +#define PMU_OVSCLR_CNT26_STATUS_Msk (1UL << PMU_OVSCLR_CNT26_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT27_STATUS_Pos 27U /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Position */ +#define PMU_OVSCLR_CNT27_STATUS_Msk (1UL << PMU_OVSCLR_CNT27_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT28_STATUS_Pos 28U /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Position */ +#define PMU_OVSCLR_CNT28_STATUS_Msk (1UL << PMU_OVSCLR_CNT28_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT29_STATUS_Pos 29U /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Position */ +#define PMU_OVSCLR_CNT29_STATUS_Msk (1UL << PMU_OVSCLR_CNT29_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT30_STATUS_Pos 30U /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Position */ +#define PMU_OVSCLR_CNT30_STATUS_Msk (1UL << PMU_OVSCLR_CNT30_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Mask */ + +#define PMU_OVSCLR_CYCCNT_STATUS_Pos 31U /*!< PMU OVSCLR: Cycle Counter Overflow Clear Position */ +#define PMU_OVSCLR_CYCCNT_STATUS_Msk (1UL << PMU_OVSCLR_CYCCNT_STATUS_Pos) /*!< PMU OVSCLR: Cycle Counter Overflow Clear Mask */ + +/** \brief PMU Software Increment Counter */ +#define PMU_SWINC_CNT0_Pos 0U /*!< PMU SWINC: Event Counter 0 Software Increment Position */ +#define PMU_SWINC_CNT0_Msk (1UL /*<< PMU_SWINC_CNT0_Pos */) /*!< PMU SWINC: Event Counter 0 Software Increment Mask */ + +#define PMU_SWINC_CNT1_Pos 1U /*!< PMU SWINC: Event Counter 1 Software Increment Position */ +#define PMU_SWINC_CNT1_Msk (1UL << PMU_SWINC_CNT1_Pos) /*!< PMU SWINC: Event Counter 1 Software Increment Mask */ + +#define PMU_SWINC_CNT2_Pos 2U /*!< PMU SWINC: Event Counter 2 Software Increment Position */ +#define PMU_SWINC_CNT2_Msk (1UL << PMU_SWINC_CNT2_Pos) /*!< PMU SWINC: Event Counter 2 Software Increment Mask */ + +#define PMU_SWINC_CNT3_Pos 3U /*!< PMU SWINC: Event Counter 3 Software Increment Position */ +#define PMU_SWINC_CNT3_Msk (1UL << PMU_SWINC_CNT3_Pos) /*!< PMU SWINC: Event Counter 3 Software Increment Mask */ + +#define PMU_SWINC_CNT4_Pos 4U /*!< PMU SWINC: Event Counter 4 Software Increment Position */ +#define PMU_SWINC_CNT4_Msk (1UL << PMU_SWINC_CNT4_Pos) /*!< PMU SWINC: Event Counter 4 Software Increment Mask */ + +#define PMU_SWINC_CNT5_Pos 5U /*!< PMU SWINC: Event Counter 5 Software Increment Position */ +#define PMU_SWINC_CNT5_Msk (1UL << PMU_SWINC_CNT5_Pos) /*!< PMU SWINC: Event Counter 5 Software Increment Mask */ + +#define PMU_SWINC_CNT6_Pos 6U /*!< PMU SWINC: Event Counter 6 Software Increment Position */ +#define PMU_SWINC_CNT6_Msk (1UL << PMU_SWINC_CNT6_Pos) /*!< PMU SWINC: Event Counter 6 Software Increment Mask */ + +#define PMU_SWINC_CNT7_Pos 7U /*!< PMU SWINC: Event Counter 7 Software Increment Position */ +#define PMU_SWINC_CNT7_Msk (1UL << PMU_SWINC_CNT7_Pos) /*!< PMU SWINC: Event Counter 7 Software Increment Mask */ + +#define PMU_SWINC_CNT8_Pos 8U /*!< PMU SWINC: Event Counter 8 Software Increment Position */ +#define PMU_SWINC_CNT8_Msk (1UL << PMU_SWINC_CNT8_Pos) /*!< PMU SWINC: Event Counter 8 Software Increment Mask */ + +#define PMU_SWINC_CNT9_Pos 9U /*!< PMU SWINC: Event Counter 9 Software Increment Position */ +#define PMU_SWINC_CNT9_Msk (1UL << PMU_SWINC_CNT9_Pos) /*!< PMU SWINC: Event Counter 9 Software Increment Mask */ + +#define PMU_SWINC_CNT10_Pos 10U /*!< PMU SWINC: Event Counter 10 Software Increment Position */ +#define PMU_SWINC_CNT10_Msk (1UL << PMU_SWINC_CNT10_Pos) /*!< PMU SWINC: Event Counter 10 Software Increment Mask */ + +#define PMU_SWINC_CNT11_Pos 11U /*!< PMU SWINC: Event Counter 11 Software Increment Position */ +#define PMU_SWINC_CNT11_Msk (1UL << PMU_SWINC_CNT11_Pos) /*!< PMU SWINC: Event Counter 11 Software Increment Mask */ + +#define PMU_SWINC_CNT12_Pos 12U /*!< PMU SWINC: Event Counter 12 Software Increment Position */ +#define PMU_SWINC_CNT12_Msk (1UL << PMU_SWINC_CNT12_Pos) /*!< PMU SWINC: Event Counter 12 Software Increment Mask */ + +#define PMU_SWINC_CNT13_Pos 13U /*!< PMU SWINC: Event Counter 13 Software Increment Position */ +#define PMU_SWINC_CNT13_Msk (1UL << PMU_SWINC_CNT13_Pos) /*!< PMU SWINC: Event Counter 13 Software Increment Mask */ + +#define PMU_SWINC_CNT14_Pos 14U /*!< PMU SWINC: Event Counter 14 Software Increment Position */ +#define PMU_SWINC_CNT14_Msk (1UL << PMU_SWINC_CNT14_Pos) /*!< PMU SWINC: Event Counter 14 Software Increment Mask */ + +#define PMU_SWINC_CNT15_Pos 15U /*!< PMU SWINC: Event Counter 15 Software Increment Position */ +#define PMU_SWINC_CNT15_Msk (1UL << PMU_SWINC_CNT15_Pos) /*!< PMU SWINC: Event Counter 15 Software Increment Mask */ + +#define PMU_SWINC_CNT16_Pos 16U /*!< PMU SWINC: Event Counter 16 Software Increment Position */ +#define PMU_SWINC_CNT16_Msk (1UL << PMU_SWINC_CNT16_Pos) /*!< PMU SWINC: Event Counter 16 Software Increment Mask */ + +#define PMU_SWINC_CNT17_Pos 17U /*!< PMU SWINC: Event Counter 17 Software Increment Position */ +#define PMU_SWINC_CNT17_Msk (1UL << PMU_SWINC_CNT17_Pos) /*!< PMU SWINC: Event Counter 17 Software Increment Mask */ + +#define PMU_SWINC_CNT18_Pos 18U /*!< PMU SWINC: Event Counter 18 Software Increment Position */ +#define PMU_SWINC_CNT18_Msk (1UL << PMU_SWINC_CNT18_Pos) /*!< PMU SWINC: Event Counter 18 Software Increment Mask */ + +#define PMU_SWINC_CNT19_Pos 19U /*!< PMU SWINC: Event Counter 19 Software Increment Position */ +#define PMU_SWINC_CNT19_Msk (1UL << PMU_SWINC_CNT19_Pos) /*!< PMU SWINC: Event Counter 19 Software Increment Mask */ + +#define PMU_SWINC_CNT20_Pos 20U /*!< PMU SWINC: Event Counter 20 Software Increment Position */ +#define PMU_SWINC_CNT20_Msk (1UL << PMU_SWINC_CNT20_Pos) /*!< PMU SWINC: Event Counter 20 Software Increment Mask */ + +#define PMU_SWINC_CNT21_Pos 21U /*!< PMU SWINC: Event Counter 21 Software Increment Position */ +#define PMU_SWINC_CNT21_Msk (1UL << PMU_SWINC_CNT21_Pos) /*!< PMU SWINC: Event Counter 21 Software Increment Mask */ + +#define PMU_SWINC_CNT22_Pos 22U /*!< PMU SWINC: Event Counter 22 Software Increment Position */ +#define PMU_SWINC_CNT22_Msk (1UL << PMU_SWINC_CNT22_Pos) /*!< PMU SWINC: Event Counter 22 Software Increment Mask */ + +#define PMU_SWINC_CNT23_Pos 23U /*!< PMU SWINC: Event Counter 23 Software Increment Position */ +#define PMU_SWINC_CNT23_Msk (1UL << PMU_SWINC_CNT23_Pos) /*!< PMU SWINC: Event Counter 23 Software Increment Mask */ + +#define PMU_SWINC_CNT24_Pos 24U /*!< PMU SWINC: Event Counter 24 Software Increment Position */ +#define PMU_SWINC_CNT24_Msk (1UL << PMU_SWINC_CNT24_Pos) /*!< PMU SWINC: Event Counter 24 Software Increment Mask */ + +#define PMU_SWINC_CNT25_Pos 25U /*!< PMU SWINC: Event Counter 25 Software Increment Position */ +#define PMU_SWINC_CNT25_Msk (1UL << PMU_SWINC_CNT25_Pos) /*!< PMU SWINC: Event Counter 25 Software Increment Mask */ + +#define PMU_SWINC_CNT26_Pos 26U /*!< PMU SWINC: Event Counter 26 Software Increment Position */ +#define PMU_SWINC_CNT26_Msk (1UL << PMU_SWINC_CNT26_Pos) /*!< PMU SWINC: Event Counter 26 Software Increment Mask */ + +#define PMU_SWINC_CNT27_Pos 27U /*!< PMU SWINC: Event Counter 27 Software Increment Position */ +#define PMU_SWINC_CNT27_Msk (1UL << PMU_SWINC_CNT27_Pos) /*!< PMU SWINC: Event Counter 27 Software Increment Mask */ + +#define PMU_SWINC_CNT28_Pos 28U /*!< PMU SWINC: Event Counter 28 Software Increment Position */ +#define PMU_SWINC_CNT28_Msk (1UL << PMU_SWINC_CNT28_Pos) /*!< PMU SWINC: Event Counter 28 Software Increment Mask */ + +#define PMU_SWINC_CNT29_Pos 29U /*!< PMU SWINC: Event Counter 29 Software Increment Position */ +#define PMU_SWINC_CNT29_Msk (1UL << PMU_SWINC_CNT29_Pos) /*!< PMU SWINC: Event Counter 29 Software Increment Mask */ + +#define PMU_SWINC_CNT30_Pos 30U /*!< PMU SWINC: Event Counter 30 Software Increment Position */ +#define PMU_SWINC_CNT30_Msk (1UL << PMU_SWINC_CNT30_Pos) /*!< PMU SWINC: Event Counter 30 Software Increment Mask */ + +/** \brief PMU Control Register Definitions */ +#define PMU_CTRL_ENABLE_Pos 0U /*!< PMU CTRL: ENABLE Position */ +#define PMU_CTRL_ENABLE_Msk (1UL /*<< PMU_CTRL_ENABLE_Pos*/) /*!< PMU CTRL: ENABLE Mask */ + +#define PMU_CTRL_EVENTCNT_RESET_Pos 1U /*!< PMU CTRL: Event Counter Reset Position */ +#define PMU_CTRL_EVENTCNT_RESET_Msk (1UL << PMU_CTRL_EVENTCNT_RESET_Pos) /*!< PMU CTRL: Event Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_RESET_Pos 2U /*!< PMU CTRL: Cycle Counter Reset Position */ +#define PMU_CTRL_CYCCNT_RESET_Msk (1UL << PMU_CTRL_CYCCNT_RESET_Pos) /*!< PMU CTRL: Cycle Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_DISABLE_Pos 5U /*!< PMU CTRL: Disable Cycle Counter Position */ +#define PMU_CTRL_CYCCNT_DISABLE_Msk (1UL << PMU_CTRL_CYCCNT_DISABLE_Pos) /*!< PMU CTRL: Disable Cycle Counter Mask */ + +#define PMU_CTRL_FRZ_ON_OV_Pos 9U /*!< PMU CTRL: Freeze-on-overflow Position */ +#define PMU_CTRL_FRZ_ON_OV_Msk (1UL << PMU_CTRL_FRZ_ON_OVERFLOW_Pos) /*!< PMU CTRL: Freeze-on-overflow Mask */ + +#define PMU_CTRL_TRACE_ON_OV_Pos 11U /*!< PMU CTRL: Trace-on-overflow Position */ +#define PMU_CTRL_TRACE_ON_OV_Msk (1UL << PMU_CTRL_TRACE_ON_OVERFLOW_Pos) /*!< PMU CTRL: Trace-on-overflow Mask */ + +/** \brief PMU Type Register Definitions */ +#define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ +#define PMU_TYPE_NUM_CNTS_Msk (0xFFUL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ + +#define PMU_TYPE_SIZE_CNTS_Pos 8U /*!< PMU TYPE: Size of Counters Position */ +#define PMU_TYPE_SIZE_CNTS_Msk (0x3FUL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ + +#define PMU_TYPE_CYCCNT_PRESENT_Pos 14U /*!< PMU TYPE: Cycle Counter Present Position */ +#define PMU_TYPE_CYCCNT_PRESENT_Msk (1UL << PMU_TYPE_CYCCNT_PRESENT_Pos) /*!< PMU TYPE: Cycle Counter Present Mask */ + +#define PMU_TYPE_FRZ_OV_SUPPORT_Pos 21U /*!< PMU TYPE: Freeze-on-overflow Support Position */ +#define PMU_TYPE_FRZ_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Freeze-on-overflow Support Mask */ + +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Pos 23U /*!< PMU TYPE: Trace-on-overflow Support Position */ +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Trace-on-overflow Support Mask */ + +/** \brief PMU Authentication Status Register Definitions */ +#define PMU_AUTHSTATUS_NSID_Pos 0U /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSID_Msk (0x3UL /*<< PMU_AUTHSTATUS_NSID_Pos*/) /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSNID_Pos 2U /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSNID_Msk (0x3UL << PMU_AUTHSTATUS_NSNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SID_Pos 4U /*!< PMU AUTHSTATUS: Secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_SID_Msk (0x3UL << PMU_AUTHSTATUS_SID_Pos) /*!< PMU AUTHSTATUS: Secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SNID_Pos 6U /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SNID_Msk (0x3UL << PMU_AUTHSTATUS_SNID_Pos) /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUID_Pos 16U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUID_Msk (0x3UL << PMU_AUTHSTATUS_NSUID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUNID_Pos 18U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUNID_Msk (0x3UL << PMU_AUTHSTATUS_NSUNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUID_Pos 20U /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_SUID_Msk (0x3UL << PMU_AUTHSTATUS_SUID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ + +/*@} end of group CMSIS_PMU */ +#endif + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/** \brief MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Mask */ + +/** \brief MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/** \brief MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/** \brief SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/** \brief SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/** \brief SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/** \brief SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/** \brief SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/** \brief SAU Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/** \brief FPU Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/** \brief FPU Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/** \brief FPU Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +#define FPU_FPDSCR_FZ16_Pos 19U /*!< FPDSCR: FZ16 bit Position */ +#define FPU_FPDSCR_FZ16_Msk (1UL << FPU_FPDSCR_FZ16_Pos) /*!< FPDSCR: FZ16 bit Mask */ + +#define FPU_FPDSCR_LTPSIZE_Pos 16U /*!< FPDSCR: LTPSIZE bit Position */ +#define FPU_FPDSCR_LTPSIZE_Msk (7UL << FPU_FPDSCR_LTPSIZE_Pos) /*!< FPDSCR: LTPSIZE bit Mask */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FP16_Pos 20U /*!< MVFR1: FP16 bits Position */ +#define FPU_MVFR1_FP16_Msk (0xFUL << FPU_MVFR1_FP16_Pos) /*!< MVFR1: FP16 bits Mask */ + +#define FPU_MVFR1_MVE_Pos 8U /*!< MVFR1: MVE bits Position */ +#define FPU_MVFR1_MVE_Msk (0xFUL << FPU_MVFR1_MVE_Pos) /*!< MVFR1: MVE bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + uint32_t RESERVED1[3U]; + __IM uint32_t DDEVTYPE; /*!< Offset: 0x01C (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SUNID_Pos 22U /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUNID_Msk (0x3UL << DIB_DAUTHSTATUS_SUNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SUID_Pos 20U /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUID_Msk (0x3UL << DIB_DAUTHSTATUS_SUID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_NSUNID_Pos 18U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Position */ +#define DIB_DAUTHSTATUS_NSUNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Mask */ + +#define DIB_DAUTHSTATUS_NSUID_Pos 16U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_NSUID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/** \brief DIB SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/** \brief DIB SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define MEMSYSCTL_BASE (0xE001E000UL) /*!< Memory System Control Base Address */ + #define ERRBNK_BASE (0xE001E100UL) /*!< Error Banking Base Address */ + #define PWRMODCTL_BASE (0xE001E300UL) /*!< Power Mode Control Base Address */ + #define EWIC_ISA_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller interrupt status access Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define STL_BASE (0xE001E800UL) /*!< Software Test Library Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define EWIC_BASE (0xE0047000UL) /*!< External Wakeup Interrupt Controller Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define ICB ((ICB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ + #define MEMSYSCTL ((MemSysCtl_Type *) MEMSYSCTL_BASE ) /*!< Memory System Control configuration struct */ + #define ERRBNK ((ErrBnk_Type *) ERRBNK_BASE ) /*!< Error Banking configuration struct */ + #define PWRMODCTL ((PwrModCtl_Type *) PWRMODCTL_BASE ) /*!< Power Mode Control configuration struct */ + #define EWIC_ISA ((EWIC_ISA_Type *) EWIC_ISA_BASE ) /*!< EWIC interrupt status access struct */ + #define EWIC ((EWIC_Type *) EWIC_BASE ) /*!< EWIC configuration struct */ + #define PRCCFGINF ((PrcCfgInf_Type *) PRCCFGINF_BASE ) /*!< Processor Configuration Information configuration struct */ + #define STL ((STL_Type *) STL_BASE ) /*!< Software Test Library configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + #define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ + #define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define ICB_NS ((ICB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + __OM uint32_t DSCEMCR; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_FPD_Pos DCB_DHCSR_S_FPD_Pos +#define CoreDebug_DHCSR_S_FPD_Msk DCB_DHCSR_S_FPD_Msk + +#define CoreDebug_DHCSR_S_SUIDE_Pos DCB_DHCSR_S_SUIDE_Pos +#define CoreDebug_DHCSR_S_SUIDE_Msk DCB_DHCSR_S_SUIDE_Msk + +#define CoreDebug_DHCSR_S_NSUIDE_Pos DCB_DHCSR_S_NSUIDE_Pos +#define CoreDebug_DHCSR_S_NSUIDE_Msk DCB_DHCSR_S_NSUIDE_Msk + +#define CoreDebug_DHCSR_S_SDE_Pos DCB_DHCSR_S_SDE_Pos +#define CoreDebug_DHCSR_S_SDE_Msk DCB_DHCSR_S_SDE_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_PMOV_Pos DCB_DHCSR_C_PMOV_Pos +#define CoreDebug_DHCSR_C_PMOV_Msk DCB_DHCSR_C_PMOV_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Set Clear Exception and Monitor Control Register Definitions */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Pos DCB_DSCEMCR_CLR_MON_REQ_Pos +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Msk DCB_DSCEMCR_CLR_MON_REQ_Msk + +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Pos DCB_DSCEMCR_CLR_MON_PEND_Pos +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Msk DCB_DSCEMCR_CLR_MON_PEND_Msk + +#define CoreDebug_DSCEMCR_SET_MON_REQ_Pos DCB_DSCEMCR_SET_MON_REQ_Pos +#define CoreDebug_DSCEMCR_SET_MON_REQ_Msk DCB_DSCEMCR_SET_MON_REQ_Msk + +#define CoreDebug_DSCEMCR_SET_MON_PEND_Pos DCB_DSCEMCR_SET_MON_PEND_Pos +#define CoreDebug_DSCEMCR_SET_MON_PEND_Msk DCB_DSCEMCR_SET_MON_PEND_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_UIDEN_Pos DCB_DAUTHCTRL_UIDEN_Pos +#define CoreDebug_DAUTHCTRL_UIDEN_Msk DCB_DAUTHCTRL_UIDEN_Msk + +#define CoreDebug_DAUTHCTRL_UIDAPEN_Pos DCB_DAUTHCTRL_UIDAPEN_Pos +#define CoreDebug_DAUTHCTRL_UIDAPEN_Msk DCB_DAUTHCTRL_UIDAPEN_Msk + +#define CoreDebug_DAUTHCTRL_FSDMA_Pos DCB_DAUTHCTRL_FSDMA_Pos +#define CoreDebug_DAUTHCTRL_FSDMA_Msk DCB_DAUTHCTRL_FSDMA_Msk + +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + + #include "m-profile/armv8m_mpu.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "m-profile/armv8m_pmu.h" + +/** + \brief Cortex-M55 PMU events + \note Architectural PMU events can be found in armv8m_pmu.h +*/ + +#define ARMCM55_PMU_ECC_ERR 0xC000 /*!< Any ECC error */ +#define ARMCM55_PMU_ECC_ERR_FATAL 0xC001 /*!< Any fatal ECC error */ +#define ARMCM55_PMU_ECC_ERR_DCACHE 0xC010 /*!< Any ECC error in the data cache */ +#define ARMCM55_PMU_ECC_ERR_ICACHE 0xC011 /*!< Any ECC error in the instruction cache */ +#define ARMCM55_PMU_ECC_ERR_FATAL_DCACHE 0xC012 /*!< Any fatal ECC error in the data cache */ +#define ARMCM55_PMU_ECC_ERR_FATAL_ICACHE 0xC013 /*!< Any fatal ECC error in the instruction cache*/ +#define ARMCM55_PMU_ECC_ERR_DTCM 0xC020 /*!< Any ECC error in the DTCM */ +#define ARMCM55_PMU_ECC_ERR_ITCM 0xC021 /*!< Any ECC error in the ITCM */ +#define ARMCM55_PMU_ECC_ERR_FATAL_DTCM 0xC022 /*!< Any fatal ECC error in the DTCM */ +#define ARMCM55_PMU_ECC_ERR_FATAL_ITCM 0xC023 /*!< Any fatal ECC error in the ITCM */ +#define ARMCM55_PMU_PF_LINEFILL 0xC100 /*!< A prefetcher starts a line-fill */ +#define ARMCM55_PMU_PF_CANCEL 0xC101 /*!< A prefetcher stops prefetching */ +#define ARMCM55_PMU_PF_DROP_LINEFILL 0xC102 /*!< A linefill triggered by a prefetcher has been dropped because of lack of buffering */ +#define ARMCM55_PMU_NWAMODE_ENTER 0xC200 /*!< No write-allocate mode entry */ +#define ARMCM55_PMU_NWAMODE 0xC201 /*!< Write-allocate store is not allocated into the data cache due to no-write-allocate mode */ +#define ARMCM55_PMU_SAHB_ACCESS 0xC300 /*!< Read or write access on the S-AHB interface to the TCM */ +#define ARMCM55_PMU_PAHB_ACCESS 0xC301 /*!< Read or write access to the P-AHB write interface */ +#define ARMCM55_PMU_AXI_WRITE_ACCESS 0xC302 /*!< Any beat access to M-AXI write interface */ +#define ARMCM55_PMU_AXI_READ_ACCESS 0xC303 /*!< Any beat access to M-AXI read interface */ +#define ARMCM55_PMU_DOSTIMEOUT_DOUBLE 0xC400 /*!< Denial of Service timeout has fired twice and caused buffers to drain to allow forward progress */ +#define ARMCM55_PMU_DOSTIMEOUT_TRIPLE 0xC401 /*!< Denial of Service timeout has fired three times and blocked the LSU to force forward progress */ +#define ARMCM55_PMU_CDE_INST_RETIRED 0xC402 /*!< CDE instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_CX1_INST_RETIRED 0xC404 /*!< CDE CX1 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_CX2_INST_RETIRED 0xC406 /*!< CDE CX2 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_CX3_INST_RETIRED 0xC408 /*!< CDE CX3 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX1_INST_RETIRED 0xC40A /*!< CDE VCX1 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX2_INST_RETIRED 0xC40C /*!< CDE VCX2 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX3_INST_RETIRED 0xC40E /*!< CDE VCX3 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX1_VEC_INST_RETIRED 0xC410 /*!< CDE VCX1 Vector instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX2_VEC_INST_RETIRED 0xC412 /*!< CDE VCX2 Vector instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX3_VEC_INST_RETIRED 0xC414 /*!< CDE VCX3 Vector instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_PRED 0xC416 /*!< Cycles where one or more predicated beats of a CDE instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_STALL 0xC417 /*!< Stall cycles caused by a CDE instruction. */ +#define ARMCM55_PMU_CDE_STALL_RESOURCE 0xC418 /*!< Stall cycles caused by a CDE instruction because of resource conflicts */ +#define ARMCM55_PMU_CDE_STALL_DEPENDENCY 0xC419 /*!< Stall cycles caused by a CDE register dependency. */ +#define ARMCM55_PMU_CDE_STALL_CUSTOM 0xC41A /*!< Stall cycles caused by a CDE instruction are generated by the custom hardware. */ +#define ARMCM55_PMU_CDE_STALL_OTHER 0xC41B /*!< Stall cycles caused by a CDE instruction are not covered by the other counters. */ +#define ARMCM55_PMU_PF_LF_LA_1 0xC41C /*!< A data prefetcher line-fill request is made while the lookahead distance is 1. */ +#define ARMCM55_PMU_PF_LF_LA_2 0xC41D /*!< A data prefetcher line-fill request is made while the lookahead distance is 2. */ +#define ARMCM55_PMU_PF_LF_LA_3 0xC41E /*!< A data prefetcher line-fill request is made while the lookahead distance is 3. */ +#define ARMCM55_PMU_PF_LF_LA_4 0xC41F /*!< A data prefetcher line-fill request is made while the lookahead distance is 4. */ +#define ARMCM55_PMU_PF_LF_LA_5 0xC420 /*!< A data prefetcher line-fill request is made while the lookahead distance is 5. */ +#define ARMCM55_PMU_PF_LF_LA_6 0xC421 /*!< A data prefetcher line-fill request is made while the lookahead distance is 6. */ +#define ARMCM55_PMU_PF_BUFFER_FULL 0xC422 /*!< A data prefetcher request is made while the buffer is full. */ +#define ARMCM55_PMU_PF_BUFFER_MISS 0xC423 /*!< A load requires a line-fill which misses in the data prefetcher buffer. */ +#define ARMCM55_PMU_PF_BUFFER_HIT 0xC424 /*!< A load access hits in the data prefetcher buffer. */ + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + +/* ########################## MVE functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_MveFunctions MVE Functions + \brief Function that provides MVE type. + @{ + */ + +/** + \brief get MVE type + \details returns the MVE type + \returns + - \b 0: No Vector Extension (MVE) + - \b 1: Integer Vector Extension (MVE-I) + - \b 2: Floating-point Vector Extension (MVE-F) + */ +__STATIC_INLINE uint32_t SCB_GetMVEType(void) +{ + const uint32_t mvfr1 = FPU->MVFR1; + if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x2U << FPU_MVFR1_MVE_Pos)) + { + return 2U; + } + else if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x1U << FPU_MVFR1_MVE_Pos)) + { + return 1U; + } + else + { + return 0U; + } +} + + +/*@} end of CMSIS_Core_MveFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) + #include "m-profile/armv7m_cachel1.h" +#endif + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM55_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h new file mode 100644 index 000000000000..182081940b7f --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h @@ -0,0 +1,2468 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M7 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM7_H_GENERIC +#define __CORE_CM7_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M7 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM7 definitions */ + +#define __CORTEX_M (7U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM7_H_DEPENDANT +#define __CORE_CM7_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM7_REV + #define __CM7_REV 0x0000U + #warning "__CM7_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M7 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IPR[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ + uint32_t RESERVED7[5U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: Branch prediction enable bit Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: Instruction cache enable bit Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: Cache enable bit Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */ + +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/** \brief SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/** \brief SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/** \brief SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/** \brief SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/** \brief SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/** \brief SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/** \brief SCB Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/** \brief SCB Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/** \brief SCB AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/** \brief SCB L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCDIS_Pos 1U /*!< SCB CACR: ECCDIS Position */ +#define SCB_CACR_ECCDIS_Msk (1UL << SCB_CACR_ECCDIS_Pos) /*!< SCB CACR: ECCDIS Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/** \brief SCB AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBSCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBSCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBSCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/** \brief SCB Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISDYNADD_Pos 26U /*!< ACTLR: DISDYNADD Position */ +#define SCnSCB_ACTLR_DISDYNADD_Msk (1UL << SCnSCB_ACTLR_DISDYNADD_Pos) /*!< ACTLR: DISDYNADD Mask */ + +#define SCnSCB_ACTLR_DISISSCH1_Pos 21U /*!< ACTLR: DISISSCH1 Position */ +#define SCnSCB_ACTLR_DISISSCH1_Msk (0x1FUL << SCnSCB_ACTLR_DISISSCH1_Pos) /*!< ACTLR: DISISSCH1 Mask */ + +#define SCnSCB_ACTLR_DISDI_Pos 16U /*!< ACTLR: DISDI Position */ +#define SCnSCB_ACTLR_DISDI_Msk (0x1FUL << SCnSCB_ACTLR_DISDI_Pos) /*!< ACTLR: DISDI Mask */ + +#define SCnSCB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define SCnSCB_ACTLR_DISCRITAXIRUR_Msk (1UL << SCnSCB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define SCnSCB_ACTLR_DISBTACALLOC_Pos 14U /*!< ACTLR: DISBTACALLOC Position */ +#define SCnSCB_ACTLR_DISBTACALLOC_Msk (1UL << SCnSCB_ACTLR_DISBTACALLOC_Pos) /*!< ACTLR: DISBTACALLOC Mask */ + +#define SCnSCB_ACTLR_DISBTACREAD_Pos 13U /*!< ACTLR: DISBTACREAD Position */ +#define SCnSCB_ACTLR_DISBTACREAD_Msk (1UL << SCnSCB_ACTLR_DISBTACREAD_Pos) /*!< ACTLR: DISBTACREAD Mask */ + +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define SCnSCB_ACTLR_DISRAMODE_Pos 11U /*!< ACTLR: DISRAMODE Position */ +#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ + +#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ +} ITM_Type; + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Lock Status Register Definitions */ +#define ITM_LSR_BYTEACC_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_BYTEACC_Msk (1UL << ITM_LSR_BYTEACC_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_ACCESS_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_ACCESS_Msk (1UL << ITM_LSR_ACCESS_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_PRESENT_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_PRESENT_Msk (1UL /*<< ITM_LSR_PRESENT_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration ETM Data Register Definitions (FIFO0) */ +#define TPIU_FIFO0_ITM_ATVALID_Pos 29U /*!< TPIU FIFO0: ITM_ATVALID Position */ +#define TPIU_FIFO0_ITM_ATVALID_Msk (1UL << TPIU_FIFO0_ITM_ATVALID_Pos) /*!< TPIU FIFO0: ITM_ATVALID Mask */ + +#define TPIU_FIFO0_ITM_bytecount_Pos 27U /*!< TPIU FIFO0: ITM_bytecount Position */ +#define TPIU_FIFO0_ITM_bytecount_Msk (0x3UL << TPIU_FIFO0_ITM_bytecount_Pos) /*!< TPIU FIFO0: ITM_bytecount Mask */ + +#define TPIU_FIFO0_ETM_ATVALID_Pos 26U /*!< TPIU FIFO0: ETM_ATVALID Position */ +#define TPIU_FIFO0_ETM_ATVALID_Msk (1UL << TPIU_FIFO0_ETM_ATVALID_Pos) /*!< TPIU FIFO0: ETM_ATVALID Mask */ + +#define TPIU_FIFO0_ETM_bytecount_Pos 24U /*!< TPIU FIFO0: ETM_bytecount Position */ +#define TPIU_FIFO0_ETM_bytecount_Msk (0x3UL << TPIU_FIFO0_ETM_bytecount_Pos) /*!< TPIU FIFO0: ETM_bytecount Mask */ + +#define TPIU_FIFO0_ETM2_Pos 16U /*!< TPIU FIFO0: ETM2 Position */ +#define TPIU_FIFO0_ETM2_Msk (0xFFUL << TPIU_FIFO0_ETM2_Pos) /*!< TPIU FIFO0: ETM2 Mask */ + +#define TPIU_FIFO0_ETM1_Pos 8U /*!< TPIU FIFO0: ETM1 Position */ +#define TPIU_FIFO0_ETM1_Msk (0xFFUL << TPIU_FIFO0_ETM1_Pos) /*!< TPIU FIFO0: ETM1 Mask */ + +#define TPIU_FIFO0_ETM0_Pos 0U /*!< TPIU FIFO0: ETM0 Position */ +#define TPIU_FIFO0_ETM0_Msk (0xFFUL /*<< TPIU_FIFO0_ETM0_Pos*/) /*!< TPIU FIFO0: ETM0 Mask */ + +/** \brief TPIU ITATBCTR2 Register Definitions */ +#define TPIU_ITATBCTR2_ATREADY2_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2 Position */ +#define TPIU_ITATBCTR2_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2 Mask */ + +#define TPIU_ITATBCTR2_ATREADY1_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1 Position */ +#define TPIU_ITATBCTR2_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1 Mask */ + +/** \brief TPIU Integration ITM Data Register Definitions (FIFO1) */ +#define TPIU_FIFO1_ITM_ATVALID_Pos 29U /*!< TPIU FIFO1: ITM_ATVALID Position */ +#define TPIU_FIFO1_ITM_ATVALID_Msk (1UL << TPIU_FIFO1_ITM_ATVALID_Pos) /*!< TPIU FIFO1: ITM_ATVALID Mask */ + +#define TPIU_FIFO1_ITM_bytecount_Pos 27U /*!< TPIU FIFO1: ITM_bytecount Position */ +#define TPIU_FIFO1_ITM_bytecount_Msk (0x3UL << TPIU_FIFO1_ITM_bytecount_Pos) /*!< TPIU FIFO1: ITM_bytecount Mask */ + +#define TPIU_FIFO1_ETM_ATVALID_Pos 26U /*!< TPIU FIFO1: ETM_ATVALID Position */ +#define TPIU_FIFO1_ETM_ATVALID_Msk (1UL << TPIU_FIFO1_ETM_ATVALID_Pos) /*!< TPIU FIFO1: ETM_ATVALID Mask */ + +#define TPIU_FIFO1_ETM_bytecount_Pos 24U /*!< TPIU FIFO1: ETM_bytecount Position */ +#define TPIU_FIFO1_ETM_bytecount_Msk (0x3UL << TPIU_FIFO1_ETM_bytecount_Pos) /*!< TPIU FIFO1: ETM_bytecount Mask */ + +#define TPIU_FIFO1_ITM2_Pos 16U /*!< TPIU FIFO1: ITM2 Position */ +#define TPIU_FIFO1_ITM2_Msk (0xFFUL << TPIU_FIFO1_ITM2_Pos) /*!< TPIU FIFO1: ITM2 Mask */ + +#define TPIU_FIFO1_ITM1_Pos 8U /*!< TPIU FIFO1: ITM1 Position */ +#define TPIU_FIFO1_ITM1_Msk (0xFFUL << TPIU_FIFO1_ITM1_Pos) /*!< TPIU FIFO1: ITM1 Mask */ + +#define TPIU_FIFO1_ITM0_Pos 0U /*!< TPIU FIFO1: ITM0 Position */ +#define TPIU_FIFO1_ITM0_Msk (0xFFUL /*<< TPIU_FIFO1_ITM0_Pos*/) /*!< TPIU FIFO1: ITM0 Mask */ + +/** \brief TPIU ITATBCTR0 Register Definitions */ +#define TPIU_ITATBCTR0_ATREADY2_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2 Position */ +#define TPIU_ITATBCTR0_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2 Mask */ + +#define TPIU_ITATBCTR0_ATREADY1_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1 Position */ +#define TPIU_ITATBCTR0_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1 Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_MinBufSz_Pos 6U /*!< TPIU DEVID: MinBufSz Position */ +#define TPIU_DEVID_MinBufSz_Msk (0x7UL << TPIU_DEVID_MinBufSz_Pos) /*!< TPIU DEVID: MinBufSz Mask */ + +#define TPIU_DEVID_AsynClkIn_Pos 5U /*!< TPIU DEVID: AsynClkIn Position */ +#define TPIU_DEVID_AsynClkIn_Msk (1UL << TPIU_DEVID_AsynClkIn_Pos) /*!< TPIU DEVID: AsynClkIn Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/** \brief FPU Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/** \brief FPU Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/** \brief FPU Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ +#define DCB_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) + #include "m-profile/armv7m_cachel1.h" +#endif + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h new file mode 100644 index 000000000000..8a8b8954f958 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h @@ -0,0 +1,4936 @@ +/* + * Copyright (c) 2022-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Cortex-M85 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM85_H_GENERIC +#define __CORE_CM85_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M85 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM85 definitions */ + +#define __CORTEX_M (85U) /*!< Cortex-M Core */ + +#if defined ( __CC_ARM ) + #error Legacy Arm Compiler does not support Armv8.1-M target architecture. +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM85_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM85_H_DEPENDANT +#define __CORE_CM85_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM85_REV + #define __CM85_REV 0x0001U + #warning "__CM85_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #if __FPU_PRESENT != 0U + #ifndef __FPU_DP + #define __FPU_DP 0U + #warning "__FPU_DP not defined in device header file; using default!" + #endif + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __PMU_PRESENT + #define __PMU_PRESENT 0U + #warning "__PMU_PRESENT not defined in device header file; using default!" + #endif + + #if __PMU_PRESENT != 0U + #ifndef __PMU_NUM_EVENTCNT + #define __PMU_NUM_EVENTCNT 8U + #warning "__PMU_NUM_EVENTCNT not defined in device header file; using default!" + #elif (__PMU_NUM_EVENTCNT > 8 || __PMU_NUM_EVENTCNT < 2) + #error "__PMU_NUM_EVENTCNT is out of range in device header file!" */ + #endif + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M85 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core EWIC Register + - Core EWIC Interrupt Status Access Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core PMU Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:1; /*!< bit: 20 Reserved */ + uint32_t B:1; /*!< bit: 21 BTI active (read 0) */ + uint32_t _reserved2:2; /*!< bit: 22..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_B_Pos 21U /*!< xPSR: B Position */ +#define xPSR_B_Msk (1UL << xPSR_B_Pos) /*!< xPSR: B Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t BTI_EN:1; /*!< bit: 4 Privileged branch target identification enable */ + uint32_t UBTI_EN:1; /*!< bit: 5 Unprivileged branch target identification enable */ + uint32_t PAC_EN:1; /*!< bit: 6 Privileged pointer authentication enable */ + uint32_t UPAC_EN:1; /*!< bit: 7 Unprivileged pointer authentication enable */ + uint32_t _reserved1:24; /*!< bit: 8..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_UPAC_EN_Pos 7U /*!< CONTROL: UPAC_EN Position */ +#define CONTROL_UPAC_EN_Msk (1UL << CONTROL_UPAC_EN_Pos) /*!< CONTROL: UPAC_EN Mask */ + +#define CONTROL_PAC_EN_Pos 6U /*!< CONTROL: PAC_EN Position */ +#define CONTROL_PAC_EN_Msk (1UL << CONTROL_PAC_EN_Pos) /*!< CONTROL: PAC_EN Mask */ + +#define CONTROL_UBTI_EN_Pos 5U /*!< CONTROL: UBTI_EN Position */ +#define CONTROL_UBTI_EN_Msk (1UL << CONTROL_UBTI_EN_Pos) /*!< CONTROL: UBTI_EN Mask */ + +#define CONTROL_BTI_EN_Pos 4U /*!< CONTROL: BTI_EN Position */ +#define CONTROL_BTI_EN_Msk (1UL << CONTROL_BTI_EN_Pos) /*!< CONTROL: BTI_EN Mask */ + +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ + uint32_t RESERVED4[14U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_IESB_Pos 5U /*!< SCB AIRCR: Implicit ESB Enable Position */ +#define SCB_AIRCR_IESB_Msk (1UL << SCB_AIRCR_IESB_Pos) /*!< SCB AIRCR: Implicit ESB Enable Mask */ + +#define SCB_AIRCR_DIT_Pos 4U /*!< SCB AIRCR: Data Independent Timing Position */ +#define SCB_AIRCR_DIT_Msk (1UL << SCB_AIRCR_DIT_Pos) /*!< SCB AIRCR: Data Independent Timing Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_TRD_Pos 20U /*!< SCB CCR: TRD Position */ +#define SCB_CCR_TRD_Msk (1UL << SCB_CCR_TRD_Pos) /*!< SCB CCR: TRD Mask */ + +#define SCB_CCR_LOB_Pos 19U /*!< SCB CCR: LOB Position */ +#define SCB_CCR_LOB_Msk (1UL << SCB_CCR_LOB_Pos) /*!< SCB CCR: LOB Mask */ + +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/** \brief SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CP7_Pos 7U /*!< SCB NSACR: CP7 Position */ +#define SCB_NSACR_CP7_Msk (1UL << SCB_NSACR_CP7_Pos) /*!< SCB NSACR: CP7 Mask */ + +#define SCB_NSACR_CP6_Pos 6U /*!< SCB NSACR: CP6 Position */ +#define SCB_NSACR_CP6_Msk (1UL << SCB_NSACR_CP6_Pos) /*!< SCB NSACR: CP6 Mask */ + +#define SCB_NSACR_CP5_Pos 5U /*!< SCB NSACR: CP5 Position */ +#define SCB_NSACR_CP5_Msk (1UL << SCB_NSACR_CP5_Pos) /*!< SCB NSACR: CP5 Mask */ + +#define SCB_NSACR_CP4_Pos 4U /*!< SCB NSACR: CP4 Position */ +#define SCB_NSACR_CP4_Msk (1UL << SCB_NSACR_CP4_Pos) /*!< SCB NSACR: CP4 Mask */ + +#define SCB_NSACR_CP3_Pos 3U /*!< SCB NSACR: CP3 Position */ +#define SCB_NSACR_CP3_Msk (1UL << SCB_NSACR_CP3_Pos) /*!< SCB NSACR: CP3 Mask */ + +#define SCB_NSACR_CP2_Pos 2U /*!< SCB NSACR: CP2 Position */ +#define SCB_NSACR_CP2_Msk (1UL << SCB_NSACR_CP2_Pos) /*!< SCB NSACR: CP2 Mask */ + +#define SCB_NSACR_CP1_Pos 1U /*!< SCB NSACR: CP1 Position */ +#define SCB_NSACR_CP1_Msk (1UL << SCB_NSACR_CP1_Pos) /*!< SCB NSACR: CP1 Mask */ + +#define SCB_NSACR_CP0_Pos 0U /*!< SCB NSACR: CP0 Position */ +#define SCB_NSACR_CP0_Msk (1UL /*<< SCB_NSACR_CP0_Pos*/) /*!< SCB NSACR: CP0 Mask */ + +/** \brief SCB Debug Feature Register 0 Definitions */ +#define SCB_ID_DFR_UDE_Pos 28U /*!< SCB ID_DFR: UDE Position */ +#define SCB_ID_DFR_UDE_Msk (0xFUL << SCB_ID_DFR_UDE_Pos) /*!< SCB ID_DFR: UDE Mask */ + +#define SCB_ID_DFR_MProfDbg_Pos 20U /*!< SCB ID_DFR: MProfDbg Position */ +#define SCB_ID_DFR_MProfDbg_Msk (0xFUL << SCB_ID_DFR_MProfDbg_Pos) /*!< SCB ID_DFR: MProfDbg Mask */ + +/** \brief SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/** \brief SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/** \brief SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/** \brief SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/** \brief SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/** \brief SCB RAS Fault Status Register Definitions */ +#define SCB_RFSR_V_Pos 31U /*!< SCB RFSR: V Position */ +#define SCB_RFSR_V_Msk (1UL << SCB_RFSR_V_Pos) /*!< SCB RFSR: V Mask */ + +#define SCB_RFSR_IS_Pos 16U /*!< SCB RFSR: IS Position */ +#define SCB_RFSR_IS_Msk (0x7FFFUL << SCB_RFSR_IS_Pos) /*!< SCB RFSR: IS Mask */ + +#define SCB_RFSR_UET_Pos 0U /*!< SCB RFSR: UET Position */ +#define SCB_RFSR_UET_Msk (3UL /*<< SCB_RFSR_UET_Pos*/) /*!< SCB RFSR: UET Mask */ + +/** \brief SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ICB Implementation Control Block register (ICB) + \brief Type definitions for the Implementation Control Block Register + @{ + */ + +/** + \brief Structure type to access the Implementation Control Block (ICB). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} ICB_Type; + +/** \brief ICB Auxiliary Control Register Definitions */ +#define ICB_ACTLR_DISCRITAXIRUW_Pos 27U /*!< ACTLR: DISCRITAXIRUW Position */ +#define ICB_ACTLR_DISCRITAXIRUW_Msk (1UL << ICB_ACTLR_DISCRITAXIRUW_Pos) /*!< ACTLR: DISCRITAXIRUW Mask */ + +#define ICB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define ICB_ACTLR_DISCRITAXIRUR_Msk (1UL << ICB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define ICB_ACTLR_EVENTBUSEN_Pos 14U /*!< ACTLR: EVENTBUSEN Position */ +#define ICB_ACTLR_EVENTBUSEN_Msk (1UL << ICB_ACTLR_EVENTBUSEN_Pos) /*!< ACTLR: EVENTBUSEN Mask */ + +#define ICB_ACTLR_EVENTBUSEN_S_Pos 13U /*!< ACTLR: EVENTBUSEN_S Position */ +#define ICB_ACTLR_EVENTBUSEN_S_Msk (1UL << ICB_ACTLR_EVENTBUSEN_S_Pos) /*!< ACTLR: EVENTBUSEN_S Mask */ + +#define ICB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define ICB_ACTLR_DISITMATBFLUSH_Msk (1UL << ICB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define ICB_ACTLR_DISNWAMODE_Pos 11U /*!< ACTLR: DISNWAMODE Position */ +#define ICB_ACTLR_DISNWAMODE_Msk (1UL << ICB_ACTLR_DISNWAMODE_Pos) /*!< ACTLR: DISNWAMODE Mask */ + +#define ICB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define ICB_ACTLR_FPEXCODIS_Msk (1UL << ICB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +/** \brief ICB Interrupt Controller Type Register Definitions */ +#define ICB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define ICB_ICTR_INTLINESNUM_Msk (0xFUL /*<< ICB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_ICB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + __IOM uint32_t VMASK1; /*!< Offset: 0x03C (R/W) Comparator Value Mask 1 */ + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + __IOM uint32_t VMASK3; /*!< Offset: 0x05C (R/W) Comparator Value Mask 3 */ + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED14[968U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup MemSysCtl_Type Memory System Control Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Memory System Control Registers (MEMSYSCTL) + @{ + */ + +/** + \brief Structure type to access the Memory System Control Registers (MEMSYSCTL). + */ +typedef struct +{ + __IOM uint32_t MSCR; /*!< Offset: 0x000 (R/W) Memory System Control Register */ + __IOM uint32_t PFCR; /*!< Offset: 0x004 (R/W) Prefetcher Control Register */ + uint32_t RESERVED1[2U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x010 (R/W) ITCM Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x014 (R/W) DTCM Control Register */ + __IOM uint32_t PAHBCR; /*!< Offset: 0x018 (R/W) P-AHB Control Register */ + uint32_t RESERVED2[313U]; + __IOM uint32_t ITGU_CTRL; /*!< Offset: 0x500 (R/W) ITGU Control Register */ + __IOM uint32_t ITGU_CFG; /*!< Offset: 0x504 (R/W) ITGU Configuration Register */ + uint32_t RESERVED3[2U]; + __IOM uint32_t ITGU_LUT[16U]; /*!< Offset: 0x510 (R/W) ITGU Look Up Table Register */ + uint32_t RESERVED4[44U]; + __IOM uint32_t DTGU_CTRL; /*!< Offset: 0x600 (R/W) DTGU Control Registers */ + __IOM uint32_t DTGU_CFG; /*!< Offset: 0x604 (R/W) DTGU Configuration Register */ + uint32_t RESERVED5[2U]; + __IOM uint32_t DTGU_LUT[16U]; /*!< Offset: 0x610 (R/W) DTGU Look Up Table Register */ +} MemSysCtl_Type; + +/** \brief MemSysCtl Memory System Control Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_TECCCHKDIS_Pos 4U /*!< MEMSYSCTL MSCR: TECCCHKDIS Position */ +#define MEMSYSCTL_MSCR_TECCCHKDIS_Msk (1UL << MEMSYSCTL_MSCR_TECCCHKDIS_Pos) /*!< MEMSYSCTL MSCR: TECCCHKDIS Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/** \brief MemSysCtl Prefetcher Control Register Definitions */ +#define MEMSYSCTL_PFCR_DIS_NLP_Pos 7U /*!< MEMSYSCTL PFCR: DIS_NLP Position */ +#define MEMSYSCTL_PFCR_DIS_NLP_Msk (1UL << MEMSYSCTL_PFCR_DIS_NLP_Pos) /*!< MEMSYSCTL PFCR: DIS_NLP Mask */ + +#define MEMSYSCTL_PFCR_ENABLE_Pos 0U /*!< MEMSYSCTL PFCR: ENABLE Position */ +#define MEMSYSCTL_PFCR_ENABLE_Msk (1UL /*<< MEMSYSCTL_PFCR_ENABLE_Pos*/) /*!< MEMSYSCTL PFCR: ENABLE Mask */ + +/** \brief MemSysCtl ITCM Control Register Definitions */ +#define MEMSYSCTL_ITCMCR_SZ_Pos 3U /*!< MEMSYSCTL ITCMCR: SZ Position */ +#define MEMSYSCTL_ITCMCR_SZ_Msk (0xFUL << MEMSYSCTL_ITCMCR_SZ_Pos) /*!< MEMSYSCTL ITCMCR: SZ Mask */ + +#define MEMSYSCTL_ITCMCR_EN_Pos 0U /*!< MEMSYSCTL ITCMCR: EN Position */ +#define MEMSYSCTL_ITCMCR_EN_Msk (1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/** \brief MemSysCtl DTCM Control Register Definitions */ +#define MEMSYSCTL_DTCMCR_SZ_Pos 3U /*!< MEMSYSCTL DTCMCR: SZ Position */ +#define MEMSYSCTL_DTCMCR_SZ_Msk (0xFUL << MEMSYSCTL_DTCMCR_SZ_Pos) /*!< MEMSYSCTL DTCMCR: SZ Mask */ + +#define MEMSYSCTL_DTCMCR_EN_Pos 0U /*!< MEMSYSCTL DTCMCR: EN Position */ +#define MEMSYSCTL_DTCMCR_EN_Msk (1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/** \brief MemSysCtl P-AHB Control Register Definitions */ +#define MEMSYSCTL_PAHBCR_SZ_Pos 1U /*!< MEMSYSCTL PAHBCR: SZ Position */ +#define MEMSYSCTL_PAHBCR_SZ_Msk (0x7UL << MEMSYSCTL_PAHBCR_SZ_Pos) /*!< MEMSYSCTL PAHBCR: SZ Mask */ + +#define MEMSYSCTL_PAHBCR_EN_Pos 0U /*!< MEMSYSCTL PAHBCR: EN Position */ +#define MEMSYSCTL_PAHBCR_EN_Msk (1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/** \brief MemSysCtl ITGU Control Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (1UL << MEMSYSCTL_ITGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL ITGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL ITGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Msk (1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl ITGU Configuration Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (1UL << MEMSYSCTL_ITGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL ITGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL ITGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_ITGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL ITGU_CFG: BLKSZ Mask */ + +/** \brief MemSysCtl DTGU Control Registers Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (1UL << MEMSYSCTL_DTGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL DTGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL DTGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Msk (1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl DTGU Configuration Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (1UL << MEMSYSCTL_DTGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL DTGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL DTGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_DTGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL DTGU_CFG: BLKSZ Mask */ + +/*@}*/ /* end of group MemSysCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PwrModCtl_Type Power Mode Control Registers + \brief Type definitions for the Power Mode Control Registers (PWRMODCTL) + @{ + */ + +/** + \brief Structure type to access the Power Mode Control Registers (PWRMODCTL). + */ +typedef struct +{ + __IOM uint32_t CPDLPSTATE; /*!< Offset: 0x000 (R/W) Core Power Domain Low Power State Register */ + __IOM uint32_t DPDLPSTATE; /*!< Offset: 0x004 (R/W) Debug Power Domain Low Power State Register */ +} PwrModCtl_Type; + +/** \brief PwrModCtl Core Power Domain Low Power State Register Definitions */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos 8U /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos 4U /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos 0U /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk (0x3UL /*<< PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos*/) /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Mask */ + +/** \brief PwrModCtl Debug Power Domain Low Power State Register Definitions */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos 0U /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Position */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Msk (0x3UL /*<< PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos*/) /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Mask */ + +/*@}*/ /* end of group PwrModCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_Type External Wakeup Interrupt Controller Registers + \brief Type definitions for the External Wakeup Interrupt Controller Registers (EWIC) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller Registers (EWIC). + */ +typedef struct +{ + __IOM uint32_t EWIC_CR; /*!< Offset: 0x000 (R/W) EWIC Control Register */ + __IOM uint32_t EWIC_ASCR; /*!< Offset: 0x004 (R/W) EWIC Automatic Sequence Control Register */ + __OM uint32_t EWIC_CLRMASK; /*!< Offset: 0x008 ( /W) EWIC Clear Mask Register */ + __IM uint32_t EWIC_NUMID; /*!< Offset: 0x00C (R/ ) EWIC Event Number ID Register */ + uint32_t RESERVED0[124U]; + __IOM uint32_t EWIC_MASKA; /*!< Offset: 0x200 (R/W) EWIC MaskA Register */ + __IOM uint32_t EWIC_MASKn[15]; /*!< Offset: 0x204 (R/W) EWIC Maskn Registers */ + uint32_t RESERVED1[112U]; + __IM uint32_t EWIC_PENDA; /*!< Offset: 0x400 (R/ ) EWIC PendA Event Register */ + __IOM uint32_t EWIC_PENDn[15]; /*!< Offset: 0x404 (R/W) EWIC Pendn Event Registers */ + uint32_t RESERVED2[112U]; + __IM uint32_t EWIC_PSR; /*!< Offset: 0x600 (R/ ) EWIC Pend Summary Register */ +} EWIC_Type; + +/** \brief EWIC Control Register Definitions */ +#define EWIC_EWIC_CR_EN_Pos 0U /*!< EWIC EWIC_CR: EN Position */ +#define EWIC_EWIC_CR_EN_Msk (1UL /*<< EWIC_EWIC_CR_EN_Pos*/) /*!< EWIC EWIC_CR: EN Mask */ + +/** \brief EWIC Automatic Sequence Control Register Definitions */ +#define EWIC_EWIC_ASCR_ASPU_Pos 1U /*!< EWIC EWIC_ASCR: ASPU Position */ +#define EWIC_EWIC_ASCR_ASPU_Msk (1UL << EWIC_EWIC_ASCR_ASPU_Pos) /*!< EWIC EWIC_ASCR: ASPU Mask */ + +#define EWIC_EWIC_ASCR_ASPD_Pos 0U /*!< EWIC EWIC_ASCR: ASPD Position */ +#define EWIC_EWIC_ASCR_ASPD_Msk (1UL /*<< EWIC_EWIC_ASCR_ASPD_Pos*/) /*!< EWIC EWIC_ASCR: ASPD Mask */ + +/** \brief EWIC Event Number ID Register Definitions */ +#define EWIC_EWIC_NUMID_NUMEVENT_Pos 0U /*!< EWIC_NUMID: NUMEVENT Position */ +#define EWIC_EWIC_NUMID_NUMEVENT_Msk (0xFFFFUL /*<< EWIC_EWIC_NUMID_NUMEVENT_Pos*/) /*!< EWIC_NUMID: NUMEVENT Mask */ + +/** \brief EWIC Mask A Register Definitions */ +#define EWIC_EWIC_MASKA_EDBGREQ_Pos 2U /*!< EWIC EWIC_MASKA: EDBGREQ Position */ +#define EWIC_EWIC_MASKA_EDBGREQ_Msk (1UL << EWIC_EWIC_MASKA_EDBGREQ_Pos) /*!< EWIC EWIC_MASKA: EDBGREQ Mask */ + +#define EWIC_EWIC_MASKA_NMI_Pos 1U /*!< EWIC EWIC_MASKA: NMI Position */ +#define EWIC_EWIC_MASKA_NMI_Msk (1UL << EWIC_EWIC_MASKA_NMI_Pos) /*!< EWIC EWIC_MASKA: NMI Mask */ + +#define EWIC_EWIC_MASKA_EVENT_Pos 0U /*!< EWIC EWIC_MASKA: EVENT Position */ +#define EWIC_EWIC_MASKA_EVENT_Msk (1UL /*<< EWIC_EWIC_MASKA_EVENT_Pos*/) /*!< EWIC EWIC_MASKA: EVENT Mask */ + +/** \brief EWIC Mask n Register Definitions */ +#define EWIC_EWIC_MASKn_IRQ_Pos 0U /*!< EWIC EWIC_MASKn: IRQ Position */ +#define EWIC_EWIC_MASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_MASKn_IRQ_Pos*/) /*!< EWIC EWIC_MASKn: IRQ Mask */ + +/** \brief EWIC Pend A Register Definitions */ +#define EWIC_EWIC_PENDA_EDBGREQ_Pos 2U /*!< EWIC EWIC_PENDA: EDBGREQ Position */ +#define EWIC_EWIC_PENDA_EDBGREQ_Msk (1UL << EWIC_EWIC_PENDA_EDBGREQ_Pos) /*!< EWIC EWIC_PENDA: EDBGREQ Mask */ + +#define EWIC_EWIC_PENDA_NMI_Pos 1U /*!< EWIC EWIC_PENDA: NMI Position */ +#define EWIC_EWIC_PENDA_NMI_Msk (1UL << EWIC_EWIC_PENDA_NMI_Pos) /*!< EWIC EWIC_PENDA: NMI Mask */ + +#define EWIC_EWIC_PENDA_EVENT_Pos 0U /*!< EWIC EWIC_PENDA: EVENT Position */ +#define EWIC_EWIC_PENDA_EVENT_Msk (1UL /*<< EWIC_EWIC_PENDA_EVENT_Pos*/) /*!< EWIC EWIC_PENDA: EVENT Mask */ + +/** \brief EWIC Pend n Register Definitions */ +#define EWIC_EWIC_PENDn_IRQ_Pos 0U /*!< EWIC EWIC_PENDn: IRQ Position */ +#define EWIC_EWIC_PENDn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_PENDn_IRQ_Pos*/) /*!< EWIC EWIC_PENDn: IRQ Mask */ + +/** \brief EWIC Pend Summary Register Definitions */ +#define EWIC_EWIC_PSR_NZ_Pos 1U /*!< EWIC EWIC_PSR: NZ Position */ +#define EWIC_EWIC_PSR_NZ_Msk (0x7FFFUL << EWIC_EWIC_PSR_NZ_Pos) /*!< EWIC EWIC_PSR: NZ Mask */ + +#define EWIC_EWIC_PSR_NZA_Pos 0U /*!< EWIC EWIC_PSR: NZA Position */ +#define EWIC_EWIC_PSR_NZA_Msk (1UL /*<< EWIC_EWIC_PSR_NZA_Pos*/) /*!< EWIC EWIC_PSR: NZA Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_ISA_Type External Wakeup Interrupt Controller (EWIC) interrupt status access registers + \brief Type definitions for the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/ ) Event Mask A Register */ + __IM uint32_t EVENTMASKn[15]; /*!< Offset: 0x084 (R/ ) Event Mask Register */ +} EWIC_ISA_Type; + +/** \brief EWIC_ISA Event Set Pending Register Definitions */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTSPR: EDBGREQ Position */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTSPR_EDBGREQ_Pos) /*!< EWIC_ISA EVENTSPR: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTSPR_NMI_Pos 1U /*!< EWIC_ISA EVENTSPR: NMI Position */ +#define EWIC_ISA_EVENTSPR_NMI_Msk (1UL << EWIC_ISA_EVENTSPR_NMI_Pos) /*!< EWIC_ISA EVENTSPR: NMI Mask */ + +#define EWIC_ISA_EVENTSPR_EVENT_Pos 0U /*!< EWIC_ISA EVENTSPR: EVENT Position */ +#define EWIC_ISA_EVENTSPR_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTSPR_EVENT_Pos*/) /*!< EWIC_ISA EVENTSPR: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask A Register Definitions */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTMASKA: EDBGREQ Position */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC_ISA EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTMASKA_NMI_Pos 1U /*!< EWIC_ISA EVENTMASKA: NMI Position */ +#define EWIC_ISA_EVENTMASKA_NMI_Msk (1UL << EWIC_ISA_EVENTMASKA_NMI_Pos) /*!< EWIC_ISA EVENTMASKA: NMI Mask */ + +#define EWIC_ISA_EVENTMASKA_EVENT_Pos 0U /*!< EWIC_ISA EVENTMASKA: EVENT Position */ +#define EWIC_ISA_EVENTMASKA_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTMASKA_EVENT_Pos*/) /*!< EWIC_ISA EVENTMASKA: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask n Register Definitions */ +#define EWIC_ISA_EVENTMASKn_IRQ_Pos 0U /*!< EWIC_ISA EVENTMASKn: IRQ Position */ +#define EWIC_ISA_EVENTMASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_ISA_EVENTMASKn_IRQ_Pos*/) /*!< EWIC_ISA EVENTMASKn: IRQ Mask */ + +/*@}*/ /* end of group EWIC_ISA_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup ErrBnk_Type Error Banking Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Error Banking Registers (ERRBNK) + @{ + */ + +/** + \brief Structure type to access the Error Banking Registers (ERRBNK). + */ +typedef struct +{ + __IOM uint32_t IEBR0; /*!< Offset: 0x000 (R/W) Instruction Cache Error Bank Register 0 */ + __IOM uint32_t IEBR1; /*!< Offset: 0x004 (R/W) Instruction Cache Error Bank Register 1 */ + uint32_t RESERVED0[2U]; + __IOM uint32_t DEBR0; /*!< Offset: 0x010 (R/W) Data Cache Error Bank Register 0 */ + __IOM uint32_t DEBR1; /*!< Offset: 0x014 (R/W) Data Cache Error Bank Register 1 */ + uint32_t RESERVED1[2U]; + __IOM uint32_t TEBR0; /*!< Offset: 0x020 (R/W) TCM Error Bank Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t TEBR1; /*!< Offset: 0x028 (R/W) TCM Error Bank Register 1 */ +} ErrBnk_Type; + +/** \brief ErrBnk Instruction Cache Error Bank Register 0 Definitions */ +#define ERRBNK_IEBR0_SWDEF_Pos 30U /*!< ERRBNK IEBR0: SWDEF Position */ +#define ERRBNK_IEBR0_SWDEF_Msk (0x3UL << ERRBNK_IEBR0_SWDEF_Pos) /*!< ERRBNK IEBR0: SWDEF Mask */ + +#define ERRBNK_IEBR0_BANK_Pos 16U /*!< ERRBNK IEBR0: BANK Position */ +#define ERRBNK_IEBR0_BANK_Msk (1UL << ERRBNK_IEBR0_BANK_Pos) /*!< ERRBNK IEBR0: BANK Mask */ + +#define ERRBNK_IEBR0_LOCATION_Pos 2U /*!< ERRBNK IEBR0: LOCATION Position */ +#define ERRBNK_IEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR0_LOCATION_Pos) /*!< ERRBNK IEBR0: LOCATION Mask */ + +#define ERRBNK_IEBR0_LOCKED_Pos 1U /*!< ERRBNK IEBR0: LOCKED Position */ +#define ERRBNK_IEBR0_LOCKED_Msk (1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/** \brief ErrBnk Instruction Cache Error Bank Register 1 Definitions */ +#define ERRBNK_IEBR1_SWDEF_Pos 30U /*!< ERRBNK IEBR1: SWDEF Position */ +#define ERRBNK_IEBR1_SWDEF_Msk (0x3UL << ERRBNK_IEBR1_SWDEF_Pos) /*!< ERRBNK IEBR1: SWDEF Mask */ + +#define ERRBNK_IEBR1_BANK_Pos 16U /*!< ERRBNK IEBR1: BANK Position */ +#define ERRBNK_IEBR1_BANK_Msk (1UL << ERRBNK_IEBR1_BANK_Pos) /*!< ERRBNK IEBR1: BANK Mask */ + +#define ERRBNK_IEBR1_LOCATION_Pos 2U /*!< ERRBNK IEBR1: LOCATION Position */ +#define ERRBNK_IEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR1_LOCATION_Pos) /*!< ERRBNK IEBR1: LOCATION Mask */ + +#define ERRBNK_IEBR1_LOCKED_Pos 1U /*!< ERRBNK IEBR1: LOCKED Position */ +#define ERRBNK_IEBR1_LOCKED_Msk (1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 0 Definitions */ +#define ERRBNK_DEBR0_SWDEF_Pos 30U /*!< ERRBNK DEBR0: SWDEF Position */ +#define ERRBNK_DEBR0_SWDEF_Msk (0x3UL << ERRBNK_DEBR0_SWDEF_Pos) /*!< ERRBNK DEBR0: SWDEF Mask */ + +#define ERRBNK_DEBR0_TYPE_Pos 17U /*!< ERRBNK DEBR0: TYPE Position */ +#define ERRBNK_DEBR0_TYPE_Msk (1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (1UL << ERRBNK_DEBR0_BANK_Pos) /*!< ERRBNK DEBR0: BANK Mask */ + +#define ERRBNK_DEBR0_LOCATION_Pos 2U /*!< ERRBNK DEBR0: LOCATION Position */ +#define ERRBNK_DEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR0_LOCATION_Pos) /*!< ERRBNK DEBR0: LOCATION Mask */ + +#define ERRBNK_DEBR0_LOCKED_Pos 1U /*!< ERRBNK DEBR0: LOCKED Position */ +#define ERRBNK_DEBR0_LOCKED_Msk (1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 1 Definitions */ +#define ERRBNK_DEBR1_SWDEF_Pos 30U /*!< ERRBNK DEBR1: SWDEF Position */ +#define ERRBNK_DEBR1_SWDEF_Msk (0x3UL << ERRBNK_DEBR1_SWDEF_Pos) /*!< ERRBNK DEBR1: SWDEF Mask */ + +#define ERRBNK_DEBR1_TYPE_Pos 17U /*!< ERRBNK DEBR1: TYPE Position */ +#define ERRBNK_DEBR1_TYPE_Msk (1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (1UL << ERRBNK_DEBR1_BANK_Pos) /*!< ERRBNK DEBR1: BANK Mask */ + +#define ERRBNK_DEBR1_LOCATION_Pos 2U /*!< ERRBNK DEBR1: LOCATION Position */ +#define ERRBNK_DEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR1_LOCATION_Pos) /*!< ERRBNK DEBR1: LOCATION Mask */ + +#define ERRBNK_DEBR1_LOCKED_Pos 1U /*!< ERRBNK DEBR1: LOCKED Position */ +#define ERRBNK_DEBR1_LOCKED_Msk (1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 0 Definitions */ +#define ERRBNK_TEBR0_SWDEF_Pos 30U /*!< ERRBNK TEBR0: SWDEF Position */ +#define ERRBNK_TEBR0_SWDEF_Msk (0x3UL << ERRBNK_TEBR0_SWDEF_Pos) /*!< ERRBNK TEBR0: SWDEF Mask */ + +#define ERRBNK_TEBR0_POISON_Pos 28U /*!< ERRBNK TEBR0: POISON Position */ +#define ERRBNK_TEBR0_POISON_Msk (1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 27U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x7UL << ERRBNK_TEBR0_BANK_Pos) /*!< ERRBNK TEBR0: BANK Mask */ + +#define ERRBNK_TEBR0_LOCATION_Pos 2U /*!< ERRBNK TEBR0: LOCATION Position */ +#define ERRBNK_TEBR0_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR0_LOCATION_Pos) /*!< ERRBNK TEBR0: LOCATION Mask */ + +#define ERRBNK_TEBR0_LOCKED_Pos 1U /*!< ERRBNK TEBR0: LOCKED Position */ +#define ERRBNK_TEBR0_LOCKED_Msk (1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 1 Definitions */ +#define ERRBNK_TEBR1_SWDEF_Pos 30U /*!< ERRBNK TEBR1: SWDEF Position */ +#define ERRBNK_TEBR1_SWDEF_Msk (0x3UL << ERRBNK_TEBR1_SWDEF_Pos) /*!< ERRBNK TEBR1: SWDEF Mask */ + +#define ERRBNK_TEBR1_POISON_Pos 28U /*!< ERRBNK TEBR1: POISON Position */ +#define ERRBNK_TEBR1_POISON_Msk (1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 27U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x7UL << ERRBNK_TEBR1_BANK_Pos) /*!< ERRBNK TEBR1: BANK Mask */ + +#define ERRBNK_TEBR1_LOCATION_Pos 2U /*!< ERRBNK TEBR1: LOCATION Position */ +#define ERRBNK_TEBR1_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR1_LOCATION_Pos) /*!< ERRBNK TEBR1: LOCATION Mask */ + +#define ERRBNK_TEBR1_LOCKED_Pos 1U /*!< ERRBNK TEBR1: LOCKED Position */ +#define ERRBNK_TEBR1_LOCKED_Msk (1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (1UL << /*ERRBNK_TEBR1_VALID_Pos*/) /*!< ERRBNK TEBR1: VALID Mask */ + +/*@}*/ /* end of group ErrBnk_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PrcCfgInf_Type Processor Configuration Information Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Processor Configuration Information Registerss (PRCCFGINF) + @{ + */ + +/** + \brief Structure type to access the Processor Configuration Information Registerss (PRCCFGINF). + */ +typedef struct +{ + __OM uint32_t CFGINFOSEL; /*!< Offset: 0x000 ( /W) Processor Configuration Information Selection Register */ + __IM uint32_t CFGINFORD; /*!< Offset: 0x004 (R/ ) Processor Configuration Information Read Data Register */ +} PrcCfgInf_Type; + +/** \brief PrcCfgInf Processor Configuration Information Selection Register Definitions */ + +/** \brief PrcCfgInf Processor Configuration Information Read Data Register Definitions */ + +/*@}*/ /* end of group PrcCfgInf_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup STL_Type Software Test Library Observation Registers + \brief Type definitions for the Software Test Library Observation Registerss (STL) + @{ + */ + +/** + \brief Structure type to access the Software Test Library Observation Registerss (STL). + */ +typedef struct +{ + __IM uint32_t STLNVICPENDOR; /*!< Offset: 0x000 (R/ ) NVIC Pending Priority Tree Register */ + __IM uint32_t STLNVICACTVOR; /*!< Offset: 0x004 (R/ ) NVIC Active Priority Tree Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t STLIDMPUSR; /*!< Offset: 0x010 ( /W) MPU Sample Register */ + __IM uint32_t STLIMPUOR; /*!< Offset: 0x014 (R/ ) MPU Region Hit Register */ + __IM uint32_t STLD0MPUOR; /*!< Offset: 0x018 (R/ ) MPU Memory Attributes Register 0 */ + __IM uint32_t STLD1MPUOR; /*!< Offset: 0x01C (R/ ) MPU Memory Attributes Register 1 */ + __IM uint32_t STLD2MPUOR; /*!< Offset: 0x020 (R/ ) MPU Memory Attributes Register 2 */ + __IM uint32_t STLD3MPUOR; /*!< Offset: 0x024 (R/ ) MPU Memory Attributes Register 3 */ + __IOM uint32_t STLSTBSLOTSR; /*!< Offset: 0x028 (R/W) STB Control Register */ + __IOM uint32_t STLLFDENTRYSR; /*!< Offset: 0x02C (R/W) LFD Control Register */ +} STL_Type; + +/** \brief STL NVIC Pending Priority Tree Register Definitions */ +#define STL_STLNVICPENDOR_VALID_Pos 18U /*!< STL STLNVICPENDOR: VALID Position */ +#define STL_STLNVICPENDOR_VALID_Msk (1UL << STL_STLNVICPENDOR_VALID_Pos) /*!< STL STLNVICPENDOR: VALID Mask */ + +#define STL_STLNVICPENDOR_TARGET_Pos 17U /*!< STL STLNVICPENDOR: TARGET Position */ +#define STL_STLNVICPENDOR_TARGET_Msk (1UL << STL_STLNVICPENDOR_TARGET_Pos) /*!< STL STLNVICPENDOR: TARGET Mask */ + +#define STL_STLNVICPENDOR_PRIORITY_Pos 9U /*!< STL STLNVICPENDOR: PRIORITY Position */ +#define STL_STLNVICPENDOR_PRIORITY_Msk (0xFFUL << STL_STLNVICPENDOR_PRIORITY_Pos) /*!< STL STLNVICPENDOR: PRIORITY Mask */ + +#define STL_STLNVICPENDOR_INTNUM_Pos 0U /*!< STL STLNVICPENDOR: INTNUM Position */ +#define STL_STLNVICPENDOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICPENDOR_INTNUM_Pos*/) /*!< STL STLNVICPENDOR: INTNUM Mask */ + +/** \brief STL NVIC Active Priority Tree Register Definitions */ +#define STL_STLNVICACTVOR_VALID_Pos 18U /*!< STL STLNVICACTVOR: VALID Position */ +#define STL_STLNVICACTVOR_VALID_Msk (1UL << STL_STLNVICACTVOR_VALID_Pos) /*!< STL STLNVICACTVOR: VALID Mask */ + +#define STL_STLNVICACTVOR_TARGET_Pos 17U /*!< STL STLNVICACTVOR: TARGET Position */ +#define STL_STLNVICACTVOR_TARGET_Msk (1UL << STL_STLNVICACTVOR_TARGET_Pos) /*!< STL STLNVICACTVOR: TARGET Mask */ + +#define STL_STLNVICACTVOR_PRIORITY_Pos 9U /*!< STL STLNVICACTVOR: PRIORITY Position */ +#define STL_STLNVICACTVOR_PRIORITY_Msk (0xFFUL << STL_STLNVICACTVOR_PRIORITY_Pos) /*!< STL STLNVICACTVOR: PRIORITY Mask */ + +#define STL_STLNVICACTVOR_INTNUM_Pos 0U /*!< STL STLNVICACTVOR: INTNUM Position */ +#define STL_STLNVICACTVOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICACTVOR_INTNUM_Pos*/) /*!< STL STLNVICACTVOR: INTNUM Mask */ + +/** \brief STL MPU Sample Register Definitions */ +#define STL_STLIDMPUSR_ADDR_Pos 5U /*!< STL STLIDMPUSR: ADDR Position */ +#define STL_STLIDMPUSR_ADDR_Msk (0x7FFFFFFUL << STL_STLIDMPUSR_ADDR_Pos) /*!< STL STLIDMPUSR: ADDR Mask */ + +#define STL_STLIDMPUSR_INSTR_Pos 2U /*!< STL STLIDMPUSR: INSTR Position */ +#define STL_STLIDMPUSR_INSTR_Msk (1UL << STL_STLIDMPUSR_INSTR_Pos) /*!< STL STLIDMPUSR: INSTR Mask */ + +#define STL_STLIDMPUSR_DATA_Pos 1U /*!< STL STLIDMPUSR: DATA Position */ +#define STL_STLIDMPUSR_DATA_Msk (1UL << STL_STLIDMPUSR_DATA_Pos) /*!< STL STLIDMPUSR: DATA Mask */ + +/** \brief STL MPU Region Hit Register Definitions */ +#define STL_STLIMPUOR_HITREGION_Pos 9U /*!< STL STLIMPUOR: HITREGION Position */ +#define STL_STLIMPUOR_HITREGION_Msk (0xFFUL << STL_STLIMPUOR_HITREGION_Pos) /*!< STL STLIMPUOR: HITREGION Mask */ + +#define STL_STLIMPUOR_ATTR_Pos 0U /*!< STL STLIMPUOR: ATTR Position */ +#define STL_STLIMPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLIMPUOR_ATTR_Pos*/) /*!< STL STLIMPUOR: ATTR Mask */ + +/** \brief STL MPU Memory Attributes Register 0 Definitions */ +#define STL_STLD0MPUOR_HITREGION_Pos 9U /*!< STL STLD0MPUOR: HITREGION Position */ +#define STL_STLD0MPUOR_HITREGION_Msk (0xFFUL << STL_STLD0MPUOR_HITREGION_Pos) /*!< STL STLD0MPUOR: HITREGION Mask */ + +#define STL_STLD0MPUOR_ATTR_Pos 0U /*!< STL STLD0MPUOR: ATTR Position */ +#define STL_STLD0MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD0MPUOR_ATTR_Pos*/) /*!< STL STLD0MPUOR: ATTR Mask */ + +/** \brief STL MPU Memory Attributes Register 1 Definitions */ +#define STL_STLD1MPUOR_HITREGION_Pos 9U /*!< STL STLD1MPUOR: HITREGION Position */ +#define STL_STLD1MPUOR_HITREGION_Msk (0xFFUL << STL_STLD1MPUOR_HITREGION_Pos) /*!< STL STLD1MPUOR: HITREGION Mask */ + +#define STL_STLD1MPUOR_ATTR_Pos 0U /*!< STL STLD1MPUOR: ATTR Position */ +#define STL_STLD1MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD1MPUOR_ATTR_Pos*/) /*!< STL STLD1MPUOR: ATTR Mask */ + +/** \brief STL MPU Memory Attributes Register 2 Definitions */ +#define STL_STLD2MPUOR_HITREGION_Pos 9U /*!< STL STLD2MPUOR: HITREGION Position */ +#define STL_STLD2MPUOR_HITREGION_Msk (0xFFUL << STL_STLD2MPUOR_HITREGION_Pos) /*!< STL STLD2MPUOR: HITREGION Mask */ + +#define STL_STLD2MPUOR_ATTR_Pos 0U /*!< STL STLD2MPUOR: ATTR Position */ +#define STL_STLD2MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD2MPUOR_ATTR_Pos*/) /*!< STL STLD2MPUOR: ATTR Mask */ + +/** \brief STL MPU Memory Attributes Register 3 Definitions */ +#define STL_STLD3MPUOR_HITREGION_Pos 9U /*!< STL STLD3MPUOR: HITREGION Position */ +#define STL_STLD3MPUOR_HITREGION_Msk (0xFFUL << STL_STLD3MPUOR_HITREGION_Pos) /*!< STL STLD3MPUOR: HITREGION Mask */ + +#define STL_STLD3MPUOR_ATTR_Pos 0U /*!< STL STLD3MPUOR: ATTR Position */ +#define STL_STLD3MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD3MPUOR_ATTR_Pos*/) /*!< STL STLD3MPUOR: ATTR Mask */ + +/** \brief STL STB Control Register Definitions */ +#define STL_STLSTBSLOTSR_VALID_Pos 4U /*!< STL STLSTBSLOTSR: VALID Position */ +#define STL_STLSTBSLOTSR_VALID_Msk (1UL << STL_STLSTBSLOTSR_VALID_Pos) /*!< STL STLSTBSLOTSR: VALID Mask */ + +#define STL_STLSTBSLOTSR_STBSLOTNUM_Pos 0U /*!< STL STLSTBSLOTSR: STBSLOTNUM Position */ +#define STL_STLSTBSLOTSR_STBSLOTNUM_Msk (0xFUL /*<< STL_STLSTBSLOTSR_STBSLOTNUM_Pos*/) /*!< STL STLSTBSLOTSR: STBSLOTNUM Mask */ + +/** \brief STL LFD Control Register Definitions */ +#define STL_STLLFDENTRYSR_VALID_Pos 4U /*!< STL STLLFDENTRYSR: VALID Position */ +#define STL_STLLFDENTRYSR_VALID_Msk (1UL << STL_STLLFDENTRYSR_VALID_Pos) /*!< STL STLLFDENTRYSR: VALID Mask */ + +#define STL_STLLFDENTRYSR_LFDENTRYNUM_Pos 0U /*!< STL STLLFDENTRYSR: LFDENTRYNUM Position */ +#define STL_STLLFDENTRYSR_LFDENTRYNUM_Msk (0xFUL /*<< STL_STLLFDENTRYSR_LFDENTRYNUM_Pos*/) /*!< STL STLLFDENTRYSR: LFDENTRYNUM Mask */ +/*@}*/ /* end of group STL_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU Claim Tag Set Register Definitions */ +#define TPIU_CLAIMSET_SET_Pos 0U /*!< TPIU CLAIMSET: SET Position */ +#define TPIU_CLAIMSET_SET_Msk (0xFUL /*<< TPIU_CLAIMSET_SET_Pos*/) /*!< TPIU CLAIMSET: SET Mask */ + +/** \brief TPIU Claim Tag Clear Register Definitions */ +#define TPIU_CLAIMCLR_CLR_Pos 0U /*!< TPIU CLAIMCLR: CLR Position */ +#define TPIU_CLAIMCLR_CLR_Msk (0xFUL /*<< TPIU_CLAIMCLR_CLR_Pos*/) /*!< TPIU CLAIMCLR: CLR Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) + \brief Type definitions for the Performance Monitoring Unit (PMU) + @{ + */ + +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x0 (R/W) Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) Event Type and Filter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED2[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ +} PMU_Type; + +/** \brief PMU Event Counter Registers (0-30) Definitions */ +#define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ +#define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ + +/** \brief PMU Event Type and Filter Registers (0-30) Definitions */ +#define PMU_EVTYPER_EVENTTOCNT_Pos 0U /*!< PMU EVTYPER: Event to Count Position */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ + +/** \brief PMU Count Enable Set Register Definitions */ +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENSET: Event Counter 0 Enable Set Position */ +#define PMU_CNTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENSET_CNT0_ENABLE_Pos*/) /*!< PMU CNTENSET: Event Counter 0 Enable Set Mask */ + +#define PMU_CNTENSET_CNT1_ENABLE_Pos 1U /*!< PMU CNTENSET: Event Counter 1 Enable Set Position */ +#define PMU_CNTENSET_CNT1_ENABLE_Msk (1UL << PMU_CNTENSET_CNT1_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 1 Enable Set Mask */ + +#define PMU_CNTENSET_CNT2_ENABLE_Pos 2U /*!< PMU CNTENSET: Event Counter 2 Enable Set Position */ +#define PMU_CNTENSET_CNT2_ENABLE_Msk (1UL << PMU_CNTENSET_CNT2_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 2 Enable Set Mask */ + +#define PMU_CNTENSET_CNT3_ENABLE_Pos 3U /*!< PMU CNTENSET: Event Counter 3 Enable Set Position */ +#define PMU_CNTENSET_CNT3_ENABLE_Msk (1UL << PMU_CNTENSET_CNT3_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 3 Enable Set Mask */ + +#define PMU_CNTENSET_CNT4_ENABLE_Pos 4U /*!< PMU CNTENSET: Event Counter 4 Enable Set Position */ +#define PMU_CNTENSET_CNT4_ENABLE_Msk (1UL << PMU_CNTENSET_CNT4_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 4 Enable Set Mask */ + +#define PMU_CNTENSET_CNT5_ENABLE_Pos 5U /*!< PMU CNTENSET: Event Counter 5 Enable Set Position */ +#define PMU_CNTENSET_CNT5_ENABLE_Msk (1UL << PMU_CNTENSET_CNT5_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 5 Enable Set Mask */ + +#define PMU_CNTENSET_CNT6_ENABLE_Pos 6U /*!< PMU CNTENSET: Event Counter 6 Enable Set Position */ +#define PMU_CNTENSET_CNT6_ENABLE_Msk (1UL << PMU_CNTENSET_CNT6_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 6 Enable Set Mask */ + +#define PMU_CNTENSET_CNT7_ENABLE_Pos 7U /*!< PMU CNTENSET: Event Counter 7 Enable Set Position */ +#define PMU_CNTENSET_CNT7_ENABLE_Msk (1UL << PMU_CNTENSET_CNT7_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 7 Enable Set Mask */ + +#define PMU_CNTENSET_CNT8_ENABLE_Pos 8U /*!< PMU CNTENSET: Event Counter 8 Enable Set Position */ +#define PMU_CNTENSET_CNT8_ENABLE_Msk (1UL << PMU_CNTENSET_CNT8_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 8 Enable Set Mask */ + +#define PMU_CNTENSET_CNT9_ENABLE_Pos 9U /*!< PMU CNTENSET: Event Counter 9 Enable Set Position */ +#define PMU_CNTENSET_CNT9_ENABLE_Msk (1UL << PMU_CNTENSET_CNT9_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 9 Enable Set Mask */ + +#define PMU_CNTENSET_CNT10_ENABLE_Pos 10U /*!< PMU CNTENSET: Event Counter 10 Enable Set Position */ +#define PMU_CNTENSET_CNT10_ENABLE_Msk (1UL << PMU_CNTENSET_CNT10_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 10 Enable Set Mask */ + +#define PMU_CNTENSET_CNT11_ENABLE_Pos 11U /*!< PMU CNTENSET: Event Counter 11 Enable Set Position */ +#define PMU_CNTENSET_CNT11_ENABLE_Msk (1UL << PMU_CNTENSET_CNT11_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 11 Enable Set Mask */ + +#define PMU_CNTENSET_CNT12_ENABLE_Pos 12U /*!< PMU CNTENSET: Event Counter 12 Enable Set Position */ +#define PMU_CNTENSET_CNT12_ENABLE_Msk (1UL << PMU_CNTENSET_CNT12_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 12 Enable Set Mask */ + +#define PMU_CNTENSET_CNT13_ENABLE_Pos 13U /*!< PMU CNTENSET: Event Counter 13 Enable Set Position */ +#define PMU_CNTENSET_CNT13_ENABLE_Msk (1UL << PMU_CNTENSET_CNT13_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 13 Enable Set Mask */ + +#define PMU_CNTENSET_CNT14_ENABLE_Pos 14U /*!< PMU CNTENSET: Event Counter 14 Enable Set Position */ +#define PMU_CNTENSET_CNT14_ENABLE_Msk (1UL << PMU_CNTENSET_CNT14_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 14 Enable Set Mask */ + +#define PMU_CNTENSET_CNT15_ENABLE_Pos 15U /*!< PMU CNTENSET: Event Counter 15 Enable Set Position */ +#define PMU_CNTENSET_CNT15_ENABLE_Msk (1UL << PMU_CNTENSET_CNT15_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 15 Enable Set Mask */ + +#define PMU_CNTENSET_CNT16_ENABLE_Pos 16U /*!< PMU CNTENSET: Event Counter 16 Enable Set Position */ +#define PMU_CNTENSET_CNT16_ENABLE_Msk (1UL << PMU_CNTENSET_CNT16_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 16 Enable Set Mask */ + +#define PMU_CNTENSET_CNT17_ENABLE_Pos 17U /*!< PMU CNTENSET: Event Counter 17 Enable Set Position */ +#define PMU_CNTENSET_CNT17_ENABLE_Msk (1UL << PMU_CNTENSET_CNT17_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 17 Enable Set Mask */ + +#define PMU_CNTENSET_CNT18_ENABLE_Pos 18U /*!< PMU CNTENSET: Event Counter 18 Enable Set Position */ +#define PMU_CNTENSET_CNT18_ENABLE_Msk (1UL << PMU_CNTENSET_CNT18_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 18 Enable Set Mask */ + +#define PMU_CNTENSET_CNT19_ENABLE_Pos 19U /*!< PMU CNTENSET: Event Counter 19 Enable Set Position */ +#define PMU_CNTENSET_CNT19_ENABLE_Msk (1UL << PMU_CNTENSET_CNT19_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 19 Enable Set Mask */ + +#define PMU_CNTENSET_CNT20_ENABLE_Pos 20U /*!< PMU CNTENSET: Event Counter 20 Enable Set Position */ +#define PMU_CNTENSET_CNT20_ENABLE_Msk (1UL << PMU_CNTENSET_CNT20_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 20 Enable Set Mask */ + +#define PMU_CNTENSET_CNT21_ENABLE_Pos 21U /*!< PMU CNTENSET: Event Counter 21 Enable Set Position */ +#define PMU_CNTENSET_CNT21_ENABLE_Msk (1UL << PMU_CNTENSET_CNT21_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 21 Enable Set Mask */ + +#define PMU_CNTENSET_CNT22_ENABLE_Pos 22U /*!< PMU CNTENSET: Event Counter 22 Enable Set Position */ +#define PMU_CNTENSET_CNT22_ENABLE_Msk (1UL << PMU_CNTENSET_CNT22_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 22 Enable Set Mask */ + +#define PMU_CNTENSET_CNT23_ENABLE_Pos 23U /*!< PMU CNTENSET: Event Counter 23 Enable Set Position */ +#define PMU_CNTENSET_CNT23_ENABLE_Msk (1UL << PMU_CNTENSET_CNT23_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 23 Enable Set Mask */ + +#define PMU_CNTENSET_CNT24_ENABLE_Pos 24U /*!< PMU CNTENSET: Event Counter 24 Enable Set Position */ +#define PMU_CNTENSET_CNT24_ENABLE_Msk (1UL << PMU_CNTENSET_CNT24_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 24 Enable Set Mask */ + +#define PMU_CNTENSET_CNT25_ENABLE_Pos 25U /*!< PMU CNTENSET: Event Counter 25 Enable Set Position */ +#define PMU_CNTENSET_CNT25_ENABLE_Msk (1UL << PMU_CNTENSET_CNT25_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 25 Enable Set Mask */ + +#define PMU_CNTENSET_CNT26_ENABLE_Pos 26U /*!< PMU CNTENSET: Event Counter 26 Enable Set Position */ +#define PMU_CNTENSET_CNT26_ENABLE_Msk (1UL << PMU_CNTENSET_CNT26_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 26 Enable Set Mask */ + +#define PMU_CNTENSET_CNT27_ENABLE_Pos 27U /*!< PMU CNTENSET: Event Counter 27 Enable Set Position */ +#define PMU_CNTENSET_CNT27_ENABLE_Msk (1UL << PMU_CNTENSET_CNT27_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 27 Enable Set Mask */ + +#define PMU_CNTENSET_CNT28_ENABLE_Pos 28U /*!< PMU CNTENSET: Event Counter 28 Enable Set Position */ +#define PMU_CNTENSET_CNT28_ENABLE_Msk (1UL << PMU_CNTENSET_CNT28_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 28 Enable Set Mask */ + +#define PMU_CNTENSET_CNT29_ENABLE_Pos 29U /*!< PMU CNTENSET: Event Counter 29 Enable Set Position */ +#define PMU_CNTENSET_CNT29_ENABLE_Msk (1UL << PMU_CNTENSET_CNT29_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 29 Enable Set Mask */ + +#define PMU_CNTENSET_CNT30_ENABLE_Pos 30U /*!< PMU CNTENSET: Event Counter 30 Enable Set Position */ +#define PMU_CNTENSET_CNT30_ENABLE_Msk (1UL << PMU_CNTENSET_CNT30_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 30 Enable Set Mask */ + +#define PMU_CNTENSET_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENSET: Cycle Counter Enable Set Position */ +#define PMU_CNTENSET_CCNTR_ENABLE_Msk (1UL << PMU_CNTENSET_CCNTR_ENABLE_Pos) /*!< PMU CNTENSET: Cycle Counter Enable Set Mask */ + +/** \brief PMU Count Enable Clear Register Definitions */ +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Position */ +#define PMU_CNTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU CNTENCLR: Event Counter 1 Enable Clear Position */ +#define PMU_CNTENCLR_CNT1_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT1_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 1 Enable Clear */ + +#define PMU_CNTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Position */ +#define PMU_CNTENCLR_CNT2_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT2_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Position */ +#define PMU_CNTENCLR_CNT3_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT3_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Position */ +#define PMU_CNTENCLR_CNT4_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT4_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Position */ +#define PMU_CNTENCLR_CNT5_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT5_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Position */ +#define PMU_CNTENCLR_CNT6_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT6_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Position */ +#define PMU_CNTENCLR_CNT7_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT7_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Position */ +#define PMU_CNTENCLR_CNT8_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT8_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Position */ +#define PMU_CNTENCLR_CNT9_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT9_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Position */ +#define PMU_CNTENCLR_CNT10_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT10_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Position */ +#define PMU_CNTENCLR_CNT11_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT11_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Position */ +#define PMU_CNTENCLR_CNT12_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT12_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Position */ +#define PMU_CNTENCLR_CNT13_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT13_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Position */ +#define PMU_CNTENCLR_CNT14_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT14_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Position */ +#define PMU_CNTENCLR_CNT15_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT15_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Position */ +#define PMU_CNTENCLR_CNT16_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT16_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Position */ +#define PMU_CNTENCLR_CNT17_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT17_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Position */ +#define PMU_CNTENCLR_CNT18_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT18_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Position */ +#define PMU_CNTENCLR_CNT19_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT19_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Position */ +#define PMU_CNTENCLR_CNT20_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT20_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Position */ +#define PMU_CNTENCLR_CNT21_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT21_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Position */ +#define PMU_CNTENCLR_CNT22_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT22_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Position */ +#define PMU_CNTENCLR_CNT23_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT23_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Position */ +#define PMU_CNTENCLR_CNT24_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT24_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Position */ +#define PMU_CNTENCLR_CNT25_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT25_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Position */ +#define PMU_CNTENCLR_CNT26_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT26_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Position */ +#define PMU_CNTENCLR_CNT27_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT27_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Position */ +#define PMU_CNTENCLR_CNT28_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT28_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Position */ +#define PMU_CNTENCLR_CNT29_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT29_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Position */ +#define PMU_CNTENCLR_CNT30_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT30_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Mask */ + +#define PMU_CNTENCLR_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENCLR: Cycle Counter Enable Clear Position */ +#define PMU_CNTENCLR_CCNTR_ENABLE_Msk (1UL << PMU_CNTENCLR_CCNTR_ENABLE_Pos) /*!< PMU CNTENCLR: Cycle Counter Enable Clear Mask */ + +/** \brief PMU Interrupt Enable Set Register Definitions */ +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENSET_CNT0_ENABLE_Pos*/) /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT1_ENABLE_Pos 1U /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT1_ENABLE_Msk (1UL << PMU_INTENSET_CNT1_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT2_ENABLE_Pos 2U /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT2_ENABLE_Msk (1UL << PMU_INTENSET_CNT2_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT3_ENABLE_Pos 3U /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT3_ENABLE_Msk (1UL << PMU_INTENSET_CNT3_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT4_ENABLE_Pos 4U /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT4_ENABLE_Msk (1UL << PMU_INTENSET_CNT4_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT5_ENABLE_Pos 5U /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT5_ENABLE_Msk (1UL << PMU_INTENSET_CNT5_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT6_ENABLE_Pos 6U /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT6_ENABLE_Msk (1UL << PMU_INTENSET_CNT6_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT7_ENABLE_Pos 7U /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT7_ENABLE_Msk (1UL << PMU_INTENSET_CNT7_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT8_ENABLE_Pos 8U /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT8_ENABLE_Msk (1UL << PMU_INTENSET_CNT8_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT9_ENABLE_Pos 9U /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT9_ENABLE_Msk (1UL << PMU_INTENSET_CNT9_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT10_ENABLE_Pos 10U /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT10_ENABLE_Msk (1UL << PMU_INTENSET_CNT10_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT11_ENABLE_Pos 11U /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT11_ENABLE_Msk (1UL << PMU_INTENSET_CNT11_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT12_ENABLE_Pos 12U /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT12_ENABLE_Msk (1UL << PMU_INTENSET_CNT12_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT13_ENABLE_Pos 13U /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT13_ENABLE_Msk (1UL << PMU_INTENSET_CNT13_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT14_ENABLE_Pos 14U /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT14_ENABLE_Msk (1UL << PMU_INTENSET_CNT14_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT15_ENABLE_Pos 15U /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT15_ENABLE_Msk (1UL << PMU_INTENSET_CNT15_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT16_ENABLE_Pos 16U /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT16_ENABLE_Msk (1UL << PMU_INTENSET_CNT16_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT17_ENABLE_Pos 17U /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT17_ENABLE_Msk (1UL << PMU_INTENSET_CNT17_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT18_ENABLE_Pos 18U /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT18_ENABLE_Msk (1UL << PMU_INTENSET_CNT18_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT19_ENABLE_Pos 19U /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT19_ENABLE_Msk (1UL << PMU_INTENSET_CNT19_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT20_ENABLE_Pos 20U /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT20_ENABLE_Msk (1UL << PMU_INTENSET_CNT20_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT21_ENABLE_Pos 21U /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT21_ENABLE_Msk (1UL << PMU_INTENSET_CNT21_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT22_ENABLE_Pos 22U /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT22_ENABLE_Msk (1UL << PMU_INTENSET_CNT22_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT23_ENABLE_Pos 23U /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT23_ENABLE_Msk (1UL << PMU_INTENSET_CNT23_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT24_ENABLE_Pos 24U /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT24_ENABLE_Msk (1UL << PMU_INTENSET_CNT24_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT25_ENABLE_Pos 25U /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT25_ENABLE_Msk (1UL << PMU_INTENSET_CNT25_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT26_ENABLE_Pos 26U /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT26_ENABLE_Msk (1UL << PMU_INTENSET_CNT26_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT27_ENABLE_Pos 27U /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT27_ENABLE_Msk (1UL << PMU_INTENSET_CNT27_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT28_ENABLE_Pos 28U /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT28_ENABLE_Msk (1UL << PMU_INTENSET_CNT28_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT29_ENABLE_Pos 29U /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT29_ENABLE_Msk (1UL << PMU_INTENSET_CNT29_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT30_ENABLE_Pos 30U /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT30_ENABLE_Msk (1UL << PMU_INTENSET_CNT30_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Position */ +#define PMU_INTENSET_CCYCNT_ENABLE_Msk (1UL << PMU_INTENSET_CYCCNT_ENABLE_Pos) /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Mask */ + +/** \brief PMU Interrupt Enable Clear Register Definitions */ +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT1_ENABLE_Msk (1UL << PMU_INTENCLR_CNT1_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear */ + +#define PMU_INTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT2_ENABLE_Msk (1UL << PMU_INTENCLR_CNT2_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT3_ENABLE_Msk (1UL << PMU_INTENCLR_CNT3_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT4_ENABLE_Msk (1UL << PMU_INTENCLR_CNT4_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT5_ENABLE_Msk (1UL << PMU_INTENCLR_CNT5_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT6_ENABLE_Msk (1UL << PMU_INTENCLR_CNT6_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT7_ENABLE_Msk (1UL << PMU_INTENCLR_CNT7_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT8_ENABLE_Msk (1UL << PMU_INTENCLR_CNT8_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT9_ENABLE_Msk (1UL << PMU_INTENCLR_CNT9_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT10_ENABLE_Msk (1UL << PMU_INTENCLR_CNT10_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT11_ENABLE_Msk (1UL << PMU_INTENCLR_CNT11_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT12_ENABLE_Msk (1UL << PMU_INTENCLR_CNT12_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT13_ENABLE_Msk (1UL << PMU_INTENCLR_CNT13_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT14_ENABLE_Msk (1UL << PMU_INTENCLR_CNT14_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT15_ENABLE_Msk (1UL << PMU_INTENCLR_CNT15_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT16_ENABLE_Msk (1UL << PMU_INTENCLR_CNT16_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT17_ENABLE_Msk (1UL << PMU_INTENCLR_CNT17_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT18_ENABLE_Msk (1UL << PMU_INTENCLR_CNT18_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT19_ENABLE_Msk (1UL << PMU_INTENCLR_CNT19_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT20_ENABLE_Msk (1UL << PMU_INTENCLR_CNT20_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT21_ENABLE_Msk (1UL << PMU_INTENCLR_CNT21_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT22_ENABLE_Msk (1UL << PMU_INTENCLR_CNT22_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT23_ENABLE_Msk (1UL << PMU_INTENCLR_CNT23_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT24_ENABLE_Msk (1UL << PMU_INTENCLR_CNT24_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT25_ENABLE_Msk (1UL << PMU_INTENCLR_CNT25_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT26_ENABLE_Msk (1UL << PMU_INTENCLR_CNT26_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT27_ENABLE_Msk (1UL << PMU_INTENCLR_CNT27_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT28_ENABLE_Msk (1UL << PMU_INTENCLR_CNT28_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT29_ENABLE_Msk (1UL << PMU_INTENCLR_CNT29_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT30_ENABLE_Msk (1UL << PMU_INTENCLR_CNT30_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CYCCNT_ENABLE_Msk (1UL << PMU_INTENCLR_CYCCNT_ENABLE_Pos) /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Mask */ + +/** \brief PMU Overflow Flag Status Set Register Definitions */ +#define PMU_OVSSET_CNT0_STATUS_Pos 0U /*!< PMU OVSSET: Event Counter 0 Overflow Set Position */ +#define PMU_OVSSET_CNT0_STATUS_Msk (1UL /*<< PMU_OVSSET_CNT0_STATUS_Pos*/) /*!< PMU OVSSET: Event Counter 0 Overflow Set Mask */ + +#define PMU_OVSSET_CNT1_STATUS_Pos 1U /*!< PMU OVSSET: Event Counter 1 Overflow Set Position */ +#define PMU_OVSSET_CNT1_STATUS_Msk (1UL << PMU_OVSSET_CNT1_STATUS_Pos) /*!< PMU OVSSET: Event Counter 1 Overflow Set Mask */ + +#define PMU_OVSSET_CNT2_STATUS_Pos 2U /*!< PMU OVSSET: Event Counter 2 Overflow Set Position */ +#define PMU_OVSSET_CNT2_STATUS_Msk (1UL << PMU_OVSSET_CNT2_STATUS_Pos) /*!< PMU OVSSET: Event Counter 2 Overflow Set Mask */ + +#define PMU_OVSSET_CNT3_STATUS_Pos 3U /*!< PMU OVSSET: Event Counter 3 Overflow Set Position */ +#define PMU_OVSSET_CNT3_STATUS_Msk (1UL << PMU_OVSSET_CNT3_STATUS_Pos) /*!< PMU OVSSET: Event Counter 3 Overflow Set Mask */ + +#define PMU_OVSSET_CNT4_STATUS_Pos 4U /*!< PMU OVSSET: Event Counter 4 Overflow Set Position */ +#define PMU_OVSSET_CNT4_STATUS_Msk (1UL << PMU_OVSSET_CNT4_STATUS_Pos) /*!< PMU OVSSET: Event Counter 4 Overflow Set Mask */ + +#define PMU_OVSSET_CNT5_STATUS_Pos 5U /*!< PMU OVSSET: Event Counter 5 Overflow Set Position */ +#define PMU_OVSSET_CNT5_STATUS_Msk (1UL << PMU_OVSSET_CNT5_STATUS_Pos) /*!< PMU OVSSET: Event Counter 5 Overflow Set Mask */ + +#define PMU_OVSSET_CNT6_STATUS_Pos 6U /*!< PMU OVSSET: Event Counter 6 Overflow Set Position */ +#define PMU_OVSSET_CNT6_STATUS_Msk (1UL << PMU_OVSSET_CNT6_STATUS_Pos) /*!< PMU OVSSET: Event Counter 6 Overflow Set Mask */ + +#define PMU_OVSSET_CNT7_STATUS_Pos 7U /*!< PMU OVSSET: Event Counter 7 Overflow Set Position */ +#define PMU_OVSSET_CNT7_STATUS_Msk (1UL << PMU_OVSSET_CNT7_STATUS_Pos) /*!< PMU OVSSET: Event Counter 7 Overflow Set Mask */ + +#define PMU_OVSSET_CNT8_STATUS_Pos 8U /*!< PMU OVSSET: Event Counter 8 Overflow Set Position */ +#define PMU_OVSSET_CNT8_STATUS_Msk (1UL << PMU_OVSSET_CNT8_STATUS_Pos) /*!< PMU OVSSET: Event Counter 8 Overflow Set Mask */ + +#define PMU_OVSSET_CNT9_STATUS_Pos 9U /*!< PMU OVSSET: Event Counter 9 Overflow Set Position */ +#define PMU_OVSSET_CNT9_STATUS_Msk (1UL << PMU_OVSSET_CNT9_STATUS_Pos) /*!< PMU OVSSET: Event Counter 9 Overflow Set Mask */ + +#define PMU_OVSSET_CNT10_STATUS_Pos 10U /*!< PMU OVSSET: Event Counter 10 Overflow Set Position */ +#define PMU_OVSSET_CNT10_STATUS_Msk (1UL << PMU_OVSSET_CNT10_STATUS_Pos) /*!< PMU OVSSET: Event Counter 10 Overflow Set Mask */ + +#define PMU_OVSSET_CNT11_STATUS_Pos 11U /*!< PMU OVSSET: Event Counter 11 Overflow Set Position */ +#define PMU_OVSSET_CNT11_STATUS_Msk (1UL << PMU_OVSSET_CNT11_STATUS_Pos) /*!< PMU OVSSET: Event Counter 11 Overflow Set Mask */ + +#define PMU_OVSSET_CNT12_STATUS_Pos 12U /*!< PMU OVSSET: Event Counter 12 Overflow Set Position */ +#define PMU_OVSSET_CNT12_STATUS_Msk (1UL << PMU_OVSSET_CNT12_STATUS_Pos) /*!< PMU OVSSET: Event Counter 12 Overflow Set Mask */ + +#define PMU_OVSSET_CNT13_STATUS_Pos 13U /*!< PMU OVSSET: Event Counter 13 Overflow Set Position */ +#define PMU_OVSSET_CNT13_STATUS_Msk (1UL << PMU_OVSSET_CNT13_STATUS_Pos) /*!< PMU OVSSET: Event Counter 13 Overflow Set Mask */ + +#define PMU_OVSSET_CNT14_STATUS_Pos 14U /*!< PMU OVSSET: Event Counter 14 Overflow Set Position */ +#define PMU_OVSSET_CNT14_STATUS_Msk (1UL << PMU_OVSSET_CNT14_STATUS_Pos) /*!< PMU OVSSET: Event Counter 14 Overflow Set Mask */ + +#define PMU_OVSSET_CNT15_STATUS_Pos 15U /*!< PMU OVSSET: Event Counter 15 Overflow Set Position */ +#define PMU_OVSSET_CNT15_STATUS_Msk (1UL << PMU_OVSSET_CNT15_STATUS_Pos) /*!< PMU OVSSET: Event Counter 15 Overflow Set Mask */ + +#define PMU_OVSSET_CNT16_STATUS_Pos 16U /*!< PMU OVSSET: Event Counter 16 Overflow Set Position */ +#define PMU_OVSSET_CNT16_STATUS_Msk (1UL << PMU_OVSSET_CNT16_STATUS_Pos) /*!< PMU OVSSET: Event Counter 16 Overflow Set Mask */ + +#define PMU_OVSSET_CNT17_STATUS_Pos 17U /*!< PMU OVSSET: Event Counter 17 Overflow Set Position */ +#define PMU_OVSSET_CNT17_STATUS_Msk (1UL << PMU_OVSSET_CNT17_STATUS_Pos) /*!< PMU OVSSET: Event Counter 17 Overflow Set Mask */ + +#define PMU_OVSSET_CNT18_STATUS_Pos 18U /*!< PMU OVSSET: Event Counter 18 Overflow Set Position */ +#define PMU_OVSSET_CNT18_STATUS_Msk (1UL << PMU_OVSSET_CNT18_STATUS_Pos) /*!< PMU OVSSET: Event Counter 18 Overflow Set Mask */ + +#define PMU_OVSSET_CNT19_STATUS_Pos 19U /*!< PMU OVSSET: Event Counter 19 Overflow Set Position */ +#define PMU_OVSSET_CNT19_STATUS_Msk (1UL << PMU_OVSSET_CNT19_STATUS_Pos) /*!< PMU OVSSET: Event Counter 19 Overflow Set Mask */ + +#define PMU_OVSSET_CNT20_STATUS_Pos 20U /*!< PMU OVSSET: Event Counter 20 Overflow Set Position */ +#define PMU_OVSSET_CNT20_STATUS_Msk (1UL << PMU_OVSSET_CNT20_STATUS_Pos) /*!< PMU OVSSET: Event Counter 20 Overflow Set Mask */ + +#define PMU_OVSSET_CNT21_STATUS_Pos 21U /*!< PMU OVSSET: Event Counter 21 Overflow Set Position */ +#define PMU_OVSSET_CNT21_STATUS_Msk (1UL << PMU_OVSSET_CNT21_STATUS_Pos) /*!< PMU OVSSET: Event Counter 21 Overflow Set Mask */ + +#define PMU_OVSSET_CNT22_STATUS_Pos 22U /*!< PMU OVSSET: Event Counter 22 Overflow Set Position */ +#define PMU_OVSSET_CNT22_STATUS_Msk (1UL << PMU_OVSSET_CNT22_STATUS_Pos) /*!< PMU OVSSET: Event Counter 22 Overflow Set Mask */ + +#define PMU_OVSSET_CNT23_STATUS_Pos 23U /*!< PMU OVSSET: Event Counter 23 Overflow Set Position */ +#define PMU_OVSSET_CNT23_STATUS_Msk (1UL << PMU_OVSSET_CNT23_STATUS_Pos) /*!< PMU OVSSET: Event Counter 23 Overflow Set Mask */ + +#define PMU_OVSSET_CNT24_STATUS_Pos 24U /*!< PMU OVSSET: Event Counter 24 Overflow Set Position */ +#define PMU_OVSSET_CNT24_STATUS_Msk (1UL << PMU_OVSSET_CNT24_STATUS_Pos) /*!< PMU OVSSET: Event Counter 24 Overflow Set Mask */ + +#define PMU_OVSSET_CNT25_STATUS_Pos 25U /*!< PMU OVSSET: Event Counter 25 Overflow Set Position */ +#define PMU_OVSSET_CNT25_STATUS_Msk (1UL << PMU_OVSSET_CNT25_STATUS_Pos) /*!< PMU OVSSET: Event Counter 25 Overflow Set Mask */ + +#define PMU_OVSSET_CNT26_STATUS_Pos 26U /*!< PMU OVSSET: Event Counter 26 Overflow Set Position */ +#define PMU_OVSSET_CNT26_STATUS_Msk (1UL << PMU_OVSSET_CNT26_STATUS_Pos) /*!< PMU OVSSET: Event Counter 26 Overflow Set Mask */ + +#define PMU_OVSSET_CNT27_STATUS_Pos 27U /*!< PMU OVSSET: Event Counter 27 Overflow Set Position */ +#define PMU_OVSSET_CNT27_STATUS_Msk (1UL << PMU_OVSSET_CNT27_STATUS_Pos) /*!< PMU OVSSET: Event Counter 27 Overflow Set Mask */ + +#define PMU_OVSSET_CNT28_STATUS_Pos 28U /*!< PMU OVSSET: Event Counter 28 Overflow Set Position */ +#define PMU_OVSSET_CNT28_STATUS_Msk (1UL << PMU_OVSSET_CNT28_STATUS_Pos) /*!< PMU OVSSET: Event Counter 28 Overflow Set Mask */ + +#define PMU_OVSSET_CNT29_STATUS_Pos 29U /*!< PMU OVSSET: Event Counter 29 Overflow Set Position */ +#define PMU_OVSSET_CNT29_STATUS_Msk (1UL << PMU_OVSSET_CNT29_STATUS_Pos) /*!< PMU OVSSET: Event Counter 29 Overflow Set Mask */ + +#define PMU_OVSSET_CNT30_STATUS_Pos 30U /*!< PMU OVSSET: Event Counter 30 Overflow Set Position */ +#define PMU_OVSSET_CNT30_STATUS_Msk (1UL << PMU_OVSSET_CNT30_STATUS_Pos) /*!< PMU OVSSET: Event Counter 30 Overflow Set Mask */ + +#define PMU_OVSSET_CYCCNT_STATUS_Pos 31U /*!< PMU OVSSET: Cycle Counter Overflow Set Position */ +#define PMU_OVSSET_CYCCNT_STATUS_Msk (1UL << PMU_OVSSET_CYCCNT_STATUS_Pos) /*!< PMU OVSSET: Cycle Counter Overflow Set Mask */ + +/** \brief PMU Overflow Flag Status Clear Register Definitions */ +#define PMU_OVSCLR_CNT0_STATUS_Pos 0U /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Position */ +#define PMU_OVSCLR_CNT0_STATUS_Msk (1UL /*<< PMU_OVSCLR_CNT0_STATUS_Pos*/) /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT1_STATUS_Pos 1U /*!< PMU OVSCLR: Event Counter 1 Overflow Clear Position */ +#define PMU_OVSCLR_CNT1_STATUS_Msk (1UL << PMU_OVSCLR_CNT1_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 1 Overflow Clear */ + +#define PMU_OVSCLR_CNT2_STATUS_Pos 2U /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Position */ +#define PMU_OVSCLR_CNT2_STATUS_Msk (1UL << PMU_OVSCLR_CNT2_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT3_STATUS_Pos 3U /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Position */ +#define PMU_OVSCLR_CNT3_STATUS_Msk (1UL << PMU_OVSCLR_CNT3_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT4_STATUS_Pos 4U /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Position */ +#define PMU_OVSCLR_CNT4_STATUS_Msk (1UL << PMU_OVSCLR_CNT4_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT5_STATUS_Pos 5U /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Position */ +#define PMU_OVSCLR_CNT5_STATUS_Msk (1UL << PMU_OVSCLR_CNT5_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT6_STATUS_Pos 6U /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Position */ +#define PMU_OVSCLR_CNT6_STATUS_Msk (1UL << PMU_OVSCLR_CNT6_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT7_STATUS_Pos 7U /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Position */ +#define PMU_OVSCLR_CNT7_STATUS_Msk (1UL << PMU_OVSCLR_CNT7_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT8_STATUS_Pos 8U /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Position */ +#define PMU_OVSCLR_CNT8_STATUS_Msk (1UL << PMU_OVSCLR_CNT8_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT9_STATUS_Pos 9U /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Position */ +#define PMU_OVSCLR_CNT9_STATUS_Msk (1UL << PMU_OVSCLR_CNT9_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT10_STATUS_Pos 10U /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Position */ +#define PMU_OVSCLR_CNT10_STATUS_Msk (1UL << PMU_OVSCLR_CNT10_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT11_STATUS_Pos 11U /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Position */ +#define PMU_OVSCLR_CNT11_STATUS_Msk (1UL << PMU_OVSCLR_CNT11_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT12_STATUS_Pos 12U /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Position */ +#define PMU_OVSCLR_CNT12_STATUS_Msk (1UL << PMU_OVSCLR_CNT12_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT13_STATUS_Pos 13U /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Position */ +#define PMU_OVSCLR_CNT13_STATUS_Msk (1UL << PMU_OVSCLR_CNT13_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT14_STATUS_Pos 14U /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Position */ +#define PMU_OVSCLR_CNT14_STATUS_Msk (1UL << PMU_OVSCLR_CNT14_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT15_STATUS_Pos 15U /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Position */ +#define PMU_OVSCLR_CNT15_STATUS_Msk (1UL << PMU_OVSCLR_CNT15_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT16_STATUS_Pos 16U /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Position */ +#define PMU_OVSCLR_CNT16_STATUS_Msk (1UL << PMU_OVSCLR_CNT16_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT17_STATUS_Pos 17U /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Position */ +#define PMU_OVSCLR_CNT17_STATUS_Msk (1UL << PMU_OVSCLR_CNT17_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT18_STATUS_Pos 18U /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Position */ +#define PMU_OVSCLR_CNT18_STATUS_Msk (1UL << PMU_OVSCLR_CNT18_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT19_STATUS_Pos 19U /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Position */ +#define PMU_OVSCLR_CNT19_STATUS_Msk (1UL << PMU_OVSCLR_CNT19_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT20_STATUS_Pos 20U /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Position */ +#define PMU_OVSCLR_CNT20_STATUS_Msk (1UL << PMU_OVSCLR_CNT20_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT21_STATUS_Pos 21U /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Position */ +#define PMU_OVSCLR_CNT21_STATUS_Msk (1UL << PMU_OVSCLR_CNT21_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT22_STATUS_Pos 22U /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Position */ +#define PMU_OVSCLR_CNT22_STATUS_Msk (1UL << PMU_OVSCLR_CNT22_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT23_STATUS_Pos 23U /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Position */ +#define PMU_OVSCLR_CNT23_STATUS_Msk (1UL << PMU_OVSCLR_CNT23_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT24_STATUS_Pos 24U /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Position */ +#define PMU_OVSCLR_CNT24_STATUS_Msk (1UL << PMU_OVSCLR_CNT24_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT25_STATUS_Pos 25U /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Position */ +#define PMU_OVSCLR_CNT25_STATUS_Msk (1UL << PMU_OVSCLR_CNT25_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT26_STATUS_Pos 26U /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Position */ +#define PMU_OVSCLR_CNT26_STATUS_Msk (1UL << PMU_OVSCLR_CNT26_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT27_STATUS_Pos 27U /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Position */ +#define PMU_OVSCLR_CNT27_STATUS_Msk (1UL << PMU_OVSCLR_CNT27_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT28_STATUS_Pos 28U /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Position */ +#define PMU_OVSCLR_CNT28_STATUS_Msk (1UL << PMU_OVSCLR_CNT28_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT29_STATUS_Pos 29U /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Position */ +#define PMU_OVSCLR_CNT29_STATUS_Msk (1UL << PMU_OVSCLR_CNT29_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT30_STATUS_Pos 30U /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Position */ +#define PMU_OVSCLR_CNT30_STATUS_Msk (1UL << PMU_OVSCLR_CNT30_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Mask */ + +#define PMU_OVSCLR_CYCCNT_STATUS_Pos 31U /*!< PMU OVSCLR: Cycle Counter Overflow Clear Position */ +#define PMU_OVSCLR_CYCCNT_STATUS_Msk (1UL << PMU_OVSCLR_CYCCNT_STATUS_Pos) /*!< PMU OVSCLR: Cycle Counter Overflow Clear Mask */ + +/** \brief PMU Software Increment Counter */ +#define PMU_SWINC_CNT0_Pos 0U /*!< PMU SWINC: Event Counter 0 Software Increment Position */ +#define PMU_SWINC_CNT0_Msk (1UL /*<< PMU_SWINC_CNT0_Pos */) /*!< PMU SWINC: Event Counter 0 Software Increment Mask */ + +#define PMU_SWINC_CNT1_Pos 1U /*!< PMU SWINC: Event Counter 1 Software Increment Position */ +#define PMU_SWINC_CNT1_Msk (1UL << PMU_SWINC_CNT1_Pos) /*!< PMU SWINC: Event Counter 1 Software Increment Mask */ + +#define PMU_SWINC_CNT2_Pos 2U /*!< PMU SWINC: Event Counter 2 Software Increment Position */ +#define PMU_SWINC_CNT2_Msk (1UL << PMU_SWINC_CNT2_Pos) /*!< PMU SWINC: Event Counter 2 Software Increment Mask */ + +#define PMU_SWINC_CNT3_Pos 3U /*!< PMU SWINC: Event Counter 3 Software Increment Position */ +#define PMU_SWINC_CNT3_Msk (1UL << PMU_SWINC_CNT3_Pos) /*!< PMU SWINC: Event Counter 3 Software Increment Mask */ + +#define PMU_SWINC_CNT4_Pos 4U /*!< PMU SWINC: Event Counter 4 Software Increment Position */ +#define PMU_SWINC_CNT4_Msk (1UL << PMU_SWINC_CNT4_Pos) /*!< PMU SWINC: Event Counter 4 Software Increment Mask */ + +#define PMU_SWINC_CNT5_Pos 5U /*!< PMU SWINC: Event Counter 5 Software Increment Position */ +#define PMU_SWINC_CNT5_Msk (1UL << PMU_SWINC_CNT5_Pos) /*!< PMU SWINC: Event Counter 5 Software Increment Mask */ + +#define PMU_SWINC_CNT6_Pos 6U /*!< PMU SWINC: Event Counter 6 Software Increment Position */ +#define PMU_SWINC_CNT6_Msk (1UL << PMU_SWINC_CNT6_Pos) /*!< PMU SWINC: Event Counter 6 Software Increment Mask */ + +#define PMU_SWINC_CNT7_Pos 7U /*!< PMU SWINC: Event Counter 7 Software Increment Position */ +#define PMU_SWINC_CNT7_Msk (1UL << PMU_SWINC_CNT7_Pos) /*!< PMU SWINC: Event Counter 7 Software Increment Mask */ + +#define PMU_SWINC_CNT8_Pos 8U /*!< PMU SWINC: Event Counter 8 Software Increment Position */ +#define PMU_SWINC_CNT8_Msk (1UL << PMU_SWINC_CNT8_Pos) /*!< PMU SWINC: Event Counter 8 Software Increment Mask */ + +#define PMU_SWINC_CNT9_Pos 9U /*!< PMU SWINC: Event Counter 9 Software Increment Position */ +#define PMU_SWINC_CNT9_Msk (1UL << PMU_SWINC_CNT9_Pos) /*!< PMU SWINC: Event Counter 9 Software Increment Mask */ + +#define PMU_SWINC_CNT10_Pos 10U /*!< PMU SWINC: Event Counter 10 Software Increment Position */ +#define PMU_SWINC_CNT10_Msk (1UL << PMU_SWINC_CNT10_Pos) /*!< PMU SWINC: Event Counter 10 Software Increment Mask */ + +#define PMU_SWINC_CNT11_Pos 11U /*!< PMU SWINC: Event Counter 11 Software Increment Position */ +#define PMU_SWINC_CNT11_Msk (1UL << PMU_SWINC_CNT11_Pos) /*!< PMU SWINC: Event Counter 11 Software Increment Mask */ + +#define PMU_SWINC_CNT12_Pos 12U /*!< PMU SWINC: Event Counter 12 Software Increment Position */ +#define PMU_SWINC_CNT12_Msk (1UL << PMU_SWINC_CNT12_Pos) /*!< PMU SWINC: Event Counter 12 Software Increment Mask */ + +#define PMU_SWINC_CNT13_Pos 13U /*!< PMU SWINC: Event Counter 13 Software Increment Position */ +#define PMU_SWINC_CNT13_Msk (1UL << PMU_SWINC_CNT13_Pos) /*!< PMU SWINC: Event Counter 13 Software Increment Mask */ + +#define PMU_SWINC_CNT14_Pos 14U /*!< PMU SWINC: Event Counter 14 Software Increment Position */ +#define PMU_SWINC_CNT14_Msk (1UL << PMU_SWINC_CNT14_Pos) /*!< PMU SWINC: Event Counter 14 Software Increment Mask */ + +#define PMU_SWINC_CNT15_Pos 15U /*!< PMU SWINC: Event Counter 15 Software Increment Position */ +#define PMU_SWINC_CNT15_Msk (1UL << PMU_SWINC_CNT15_Pos) /*!< PMU SWINC: Event Counter 15 Software Increment Mask */ + +#define PMU_SWINC_CNT16_Pos 16U /*!< PMU SWINC: Event Counter 16 Software Increment Position */ +#define PMU_SWINC_CNT16_Msk (1UL << PMU_SWINC_CNT16_Pos) /*!< PMU SWINC: Event Counter 16 Software Increment Mask */ + +#define PMU_SWINC_CNT17_Pos 17U /*!< PMU SWINC: Event Counter 17 Software Increment Position */ +#define PMU_SWINC_CNT17_Msk (1UL << PMU_SWINC_CNT17_Pos) /*!< PMU SWINC: Event Counter 17 Software Increment Mask */ + +#define PMU_SWINC_CNT18_Pos 18U /*!< PMU SWINC: Event Counter 18 Software Increment Position */ +#define PMU_SWINC_CNT18_Msk (1UL << PMU_SWINC_CNT18_Pos) /*!< PMU SWINC: Event Counter 18 Software Increment Mask */ + +#define PMU_SWINC_CNT19_Pos 19U /*!< PMU SWINC: Event Counter 19 Software Increment Position */ +#define PMU_SWINC_CNT19_Msk (1UL << PMU_SWINC_CNT19_Pos) /*!< PMU SWINC: Event Counter 19 Software Increment Mask */ + +#define PMU_SWINC_CNT20_Pos 20U /*!< PMU SWINC: Event Counter 20 Software Increment Position */ +#define PMU_SWINC_CNT20_Msk (1UL << PMU_SWINC_CNT20_Pos) /*!< PMU SWINC: Event Counter 20 Software Increment Mask */ + +#define PMU_SWINC_CNT21_Pos 21U /*!< PMU SWINC: Event Counter 21 Software Increment Position */ +#define PMU_SWINC_CNT21_Msk (1UL << PMU_SWINC_CNT21_Pos) /*!< PMU SWINC: Event Counter 21 Software Increment Mask */ + +#define PMU_SWINC_CNT22_Pos 22U /*!< PMU SWINC: Event Counter 22 Software Increment Position */ +#define PMU_SWINC_CNT22_Msk (1UL << PMU_SWINC_CNT22_Pos) /*!< PMU SWINC: Event Counter 22 Software Increment Mask */ + +#define PMU_SWINC_CNT23_Pos 23U /*!< PMU SWINC: Event Counter 23 Software Increment Position */ +#define PMU_SWINC_CNT23_Msk (1UL << PMU_SWINC_CNT23_Pos) /*!< PMU SWINC: Event Counter 23 Software Increment Mask */ + +#define PMU_SWINC_CNT24_Pos 24U /*!< PMU SWINC: Event Counter 24 Software Increment Position */ +#define PMU_SWINC_CNT24_Msk (1UL << PMU_SWINC_CNT24_Pos) /*!< PMU SWINC: Event Counter 24 Software Increment Mask */ + +#define PMU_SWINC_CNT25_Pos 25U /*!< PMU SWINC: Event Counter 25 Software Increment Position */ +#define PMU_SWINC_CNT25_Msk (1UL << PMU_SWINC_CNT25_Pos) /*!< PMU SWINC: Event Counter 25 Software Increment Mask */ + +#define PMU_SWINC_CNT26_Pos 26U /*!< PMU SWINC: Event Counter 26 Software Increment Position */ +#define PMU_SWINC_CNT26_Msk (1UL << PMU_SWINC_CNT26_Pos) /*!< PMU SWINC: Event Counter 26 Software Increment Mask */ + +#define PMU_SWINC_CNT27_Pos 27U /*!< PMU SWINC: Event Counter 27 Software Increment Position */ +#define PMU_SWINC_CNT27_Msk (1UL << PMU_SWINC_CNT27_Pos) /*!< PMU SWINC: Event Counter 27 Software Increment Mask */ + +#define PMU_SWINC_CNT28_Pos 28U /*!< PMU SWINC: Event Counter 28 Software Increment Position */ +#define PMU_SWINC_CNT28_Msk (1UL << PMU_SWINC_CNT28_Pos) /*!< PMU SWINC: Event Counter 28 Software Increment Mask */ + +#define PMU_SWINC_CNT29_Pos 29U /*!< PMU SWINC: Event Counter 29 Software Increment Position */ +#define PMU_SWINC_CNT29_Msk (1UL << PMU_SWINC_CNT29_Pos) /*!< PMU SWINC: Event Counter 29 Software Increment Mask */ + +#define PMU_SWINC_CNT30_Pos 30U /*!< PMU SWINC: Event Counter 30 Software Increment Position */ +#define PMU_SWINC_CNT30_Msk (1UL << PMU_SWINC_CNT30_Pos) /*!< PMU SWINC: Event Counter 30 Software Increment Mask */ + +/** \brief PMU Control Register Definitions */ +#define PMU_CTRL_ENABLE_Pos 0U /*!< PMU CTRL: ENABLE Position */ +#define PMU_CTRL_ENABLE_Msk (1UL /*<< PMU_CTRL_ENABLE_Pos*/) /*!< PMU CTRL: ENABLE Mask */ + +#define PMU_CTRL_EVENTCNT_RESET_Pos 1U /*!< PMU CTRL: Event Counter Reset Position */ +#define PMU_CTRL_EVENTCNT_RESET_Msk (1UL << PMU_CTRL_EVENTCNT_RESET_Pos) /*!< PMU CTRL: Event Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_RESET_Pos 2U /*!< PMU CTRL: Cycle Counter Reset Position */ +#define PMU_CTRL_CYCCNT_RESET_Msk (1UL << PMU_CTRL_CYCCNT_RESET_Pos) /*!< PMU CTRL: Cycle Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_DISABLE_Pos 5U /*!< PMU CTRL: Disable Cycle Counter Position */ +#define PMU_CTRL_CYCCNT_DISABLE_Msk (1UL << PMU_CTRL_CYCCNT_DISABLE_Pos) /*!< PMU CTRL: Disable Cycle Counter Mask */ + +#define PMU_CTRL_FRZ_ON_OV_Pos 9U /*!< PMU CTRL: Freeze-on-overflow Position */ +#define PMU_CTRL_FRZ_ON_OV_Msk (1UL << PMU_CTRL_FRZ_ON_OVERFLOW_Pos) /*!< PMU CTRL: Freeze-on-overflow Mask */ + +#define PMU_CTRL_TRACE_ON_OV_Pos 11U /*!< PMU CTRL: Trace-on-overflow Position */ +#define PMU_CTRL_TRACE_ON_OV_Msk (1UL << PMU_CTRL_TRACE_ON_OVERFLOW_Pos) /*!< PMU CTRL: Trace-on-overflow Mask */ + +/** \brief PMU Type Register Definitions */ +#define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ +#define PMU_TYPE_NUM_CNTS_Msk (0xFFUL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ + +#define PMU_TYPE_SIZE_CNTS_Pos 8U /*!< PMU TYPE: Size of Counters Position */ +#define PMU_TYPE_SIZE_CNTS_Msk (0x3FUL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ + +#define PMU_TYPE_CYCCNT_PRESENT_Pos 14U /*!< PMU TYPE: Cycle Counter Present Position */ +#define PMU_TYPE_CYCCNT_PRESENT_Msk (1UL << PMU_TYPE_CYCCNT_PRESENT_Pos) /*!< PMU TYPE: Cycle Counter Present Mask */ + +#define PMU_TYPE_FRZ_OV_SUPPORT_Pos 21U /*!< PMU TYPE: Freeze-on-overflow Support Position */ +#define PMU_TYPE_FRZ_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Freeze-on-overflow Support Mask */ + +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Pos 23U /*!< PMU TYPE: Trace-on-overflow Support Position */ +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Trace-on-overflow Support Mask */ + +/** \brief PMU Authentication Status Register Definitions */ +#define PMU_AUTHSTATUS_NSID_Pos 0U /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSID_Msk (0x3UL /*<< PMU_AUTHSTATUS_NSID_Pos*/) /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSNID_Pos 2U /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSNID_Msk (0x3UL << PMU_AUTHSTATUS_NSNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SID_Pos 4U /*!< PMU AUTHSTATUS: Secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_SID_Msk (0x3UL << PMU_AUTHSTATUS_SID_Pos) /*!< PMU AUTHSTATUS: Secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SNID_Pos 6U /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SNID_Msk (0x3UL << PMU_AUTHSTATUS_SNID_Pos) /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUID_Pos 16U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUID_Msk (0x3UL << PMU_AUTHSTATUS_NSUID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUNID_Pos 18U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUNID_Msk (0x3UL << PMU_AUTHSTATUS_NSUNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUID_Pos 20U /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_SUID_Msk (0x3UL << PMU_AUTHSTATUS_SUID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ + +/*@} end of group CMSIS_PMU */ +#endif + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/** \brief MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Mask */ + +/** \brief MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/** \brief MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/** \brief SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/** \brief SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/** \brief SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/** \brief SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/** \brief SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/** \brief SAU Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/** \brief FPU Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/** \brief FPU Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/** \brief FPU Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +#define FPU_FPDSCR_FZ16_Pos 19U /*!< FPDSCR: FZ16 bit Position */ +#define FPU_FPDSCR_FZ16_Msk (1UL << FPU_FPDSCR_FZ16_Pos) /*!< FPDSCR: FZ16 bit Mask */ + +#define FPU_FPDSCR_LTPSIZE_Pos 16U /*!< FPDSCR: LTPSIZE bit Position */ +#define FPU_FPDSCR_LTPSIZE_Msk (7UL << FPU_FPDSCR_LTPSIZE_Pos) /*!< FPDSCR: LTPSIZE bit Mask */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FP16_Pos 20U /*!< MVFR1: FP16 bits Position */ +#define FPU_MVFR1_FP16_Msk (0xFUL << FPU_MVFR1_FP16_Pos) /*!< MVFR1: FP16 bits Mask */ + +#define FPU_MVFR1_MVE_Pos 8U /*!< MVFR1: MVE bits Position */ +#define FPU_MVFR1_MVE_Msk (0xFUL << FPU_MVFR1_MVE_Pos) /*!< MVFR1: MVE bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + uint32_t RESERVED1[3U]; + __IM uint32_t DDEVTYPE; /*!< Offset: 0x01C (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SUNID_Pos 22U /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUNID_Msk (0x3UL << DIB_DAUTHSTATUS_SUNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SUID_Pos 20U /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUID_Msk (0x3UL << DIB_DAUTHSTATUS_SUID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_NSUNID_Pos 18U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Position */ +#define DIB_DAUTHSTATUS_NSUNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Mask */ + +#define DIB_DAUTHSTATUS_NSUID_Pos 16U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_NSUID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/** \brief DIB SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/** \brief DIB SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define MEMSYSCTL_BASE (0xE001E000UL) /*!< Memory System Control Base Address */ + #define ERRBNK_BASE (0xE001E100UL) /*!< Error Banking Base Address */ + #define PWRMODCTL_BASE (0xE001E300UL) /*!< Power Mode Control Base Address */ + #define EWIC_ISA_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller interrupt status access Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define STL_BASE (0xE001E800UL) /*!< Software Test Library Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define EWIC_BASE (0xE0047000UL) /*!< External Wakeup Interrupt Controller Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define ICB ((ICB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ + #define MEMSYSCTL ((MemSysCtl_Type *) MEMSYSCTL_BASE ) /*!< Memory System Control configuration struct */ + #define ERRBNK ((ErrBnk_Type *) ERRBNK_BASE ) /*!< Error Banking configuration struct */ + #define PWRMODCTL ((PwrModCtl_Type *) PWRMODCTL_BASE ) /*!< Power Mode Control configuration struct */ + #define EWIC_ISA ((EWIC_ISA_Type *) EWIC_ISA_BASE ) /*!< EWIC interrupt status access struct */ + #define EWIC ((EWIC_Type *) EWIC_BASE ) /*!< EWIC configuration struct */ + #define PRCCFGINF ((PrcCfgInf_Type *) PRCCFGINF_BASE ) /*!< Processor Configuration Information configuration struct */ + #define STL ((STL_Type *) STL_BASE ) /*!< Software Test Library configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + #define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ + #define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define ICB_NS ((ICB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + __OM uint32_t DSCEMCR; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_FPD_Pos DCB_DHCSR_S_FPD_Pos +#define CoreDebug_DHCSR_S_FPD_Msk DCB_DHCSR_S_FPD_Msk + +#define CoreDebug_DHCSR_S_SUIDE_Pos DCB_DHCSR_S_SUIDE_Pos +#define CoreDebug_DHCSR_S_SUIDE_Msk DCB_DHCSR_S_SUIDE_Msk + +#define CoreDebug_DHCSR_S_NSUIDE_Pos DCB_DHCSR_S_NSUIDE_Pos +#define CoreDebug_DHCSR_S_NSUIDE_Msk DCB_DHCSR_S_NSUIDE_Msk + +#define CoreDebug_DHCSR_S_SDE_Pos DCB_DHCSR_S_SDE_Pos +#define CoreDebug_DHCSR_S_SDE_Msk DCB_DHCSR_S_SDE_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_PMOV_Pos DCB_DHCSR_C_PMOV_Pos +#define CoreDebug_DHCSR_C_PMOV_Msk DCB_DHCSR_C_PMOV_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Set Clear Exception and Monitor Control Register Definitions */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Pos DCB_DSCEMCR_CLR_MON_REQ_Pos +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Msk DCB_DSCEMCR_CLR_MON_REQ_Msk + +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Pos DCB_DSCEMCR_CLR_MON_PEND_Pos +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Msk DCB_DSCEMCR_CLR_MON_PEND_Msk + +#define CoreDebug_DSCEMCR_SET_MON_REQ_Pos DCB_DSCEMCR_SET_MON_REQ_Pos +#define CoreDebug_DSCEMCR_SET_MON_REQ_Msk DCB_DSCEMCR_SET_MON_REQ_Msk + +#define CoreDebug_DSCEMCR_SET_MON_PEND_Pos DCB_DSCEMCR_SET_MON_PEND_Pos +#define CoreDebug_DSCEMCR_SET_MON_PEND_Msk DCB_DSCEMCR_SET_MON_PEND_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_UIDEN_Pos DCB_DAUTHCTRL_UIDEN_Pos +#define CoreDebug_DAUTHCTRL_UIDEN_Msk DCB_DAUTHCTRL_UIDEN_Msk + +#define CoreDebug_DAUTHCTRL_UIDAPEN_Pos DCB_DAUTHCTRL_UIDAPEN_Pos +#define CoreDebug_DAUTHCTRL_UIDAPEN_Msk DCB_DAUTHCTRL_UIDAPEN_Msk + +#define CoreDebug_DAUTHCTRL_FSDMA_Pos DCB_DAUTHCTRL_FSDMA_Pos +#define CoreDebug_DAUTHCTRL_FSDMA_Msk DCB_DAUTHCTRL_FSDMA_Msk + +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + + #include "m-profile/armv8m_mpu.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "m-profile/armv8m_pmu.h" + +/** + \brief Cortex-M85 PMU events + \note Architectural PMU events can be found in armv8m_pmu.h +*/ + +#define ARMCM85_PMU_ECC_ERR 0xC000 /*!< One or more Error Correcting Code (ECC) errors detected */ +#define ARMCM85_PMU_ECC_ERR_MBIT 0xC001 /*!< One or more multi-bit ECC errors detected */ +#define ARMCM85_PMU_ECC_ERR_DCACHE 0xC010 /*!< One or more ECC errors in the data cache */ +#define ARMCM85_PMU_ECC_ERR_ICACHE 0xC011 /*!< One or more ECC errors in the instruction cache */ +#define ARMCM85_PMU_ECC_ERR_MBIT_DCACHE 0xC012 /*!< One or more multi-bit ECC errors in the data cache */ +#define ARMCM85_PMU_ECC_ERR_MBIT_ICACHE 0xC013 /*!< One or more multi-bit ECC errors in the instruction cache */ +#define ARMCM85_PMU_ECC_ERR_DTCM 0xC020 /*!< One or more ECC errors in the Data Tightly Coupled Memory (DTCM) */ +#define ARMCM85_PMU_ECC_ERR_ITCM 0xC021 /*!< One or more ECC errors in the Instruction Tightly Coupled Memory (ITCM) */ +#define ARMCM85_PMU_ECC_ERR_MBIT_DTCM 0xC022 /*!< One or more multi-bit ECC errors in the DTCM */ +#define ARMCM85_PMU_ECC_ERR_MBIT_ITCM 0xC023 /*!< One or more multi-bit ECC errors in the ITCM */ +#define ARMCM85_PMU_PF_LINEFILL 0xC100 /*!< The prefetcher starts a line-fill */ +#define ARMCM85_PMU_PF_CANCEL 0xC101 /*!< The prefetcher stops prefetching */ +#define ARMCM85_PMU_PF_DROP_LINEFILL 0xC102 /*!< A linefill triggered by a prefetcher has been dropped because of lack of buffering */ +#define ARMCM85_PMU_NWAMODE_ENTER 0xC200 /*!< No write-allocate mode entry */ +#define ARMCM85_PMU_NWAMODE 0xC201 /*!< Write-allocate store is not allocated into the data cache due to no-write-allocate mode */ +#define ARMCM85_PMU_SAHB_ACCESS 0xC300 /*!< Read or write access on the S-AHB interface to the TCM */ +#define ARMCM85_PMU_PAHB_ACCESS 0xC301 /*!< Read or write access on the P-AHB write interface */ +#define ARMCM85_PMU_AXI_WRITE_ACCESS 0xC302 /*!< Any beat access to M-AXI write interface */ +#define ARMCM85_PMU_AXI_READ_ACCESS 0xC303 /*!< Any beat access to M-AXI read interface */ +#define ARMCM85_PMU_DOSTIMEOUT_DOUBLE 0xC400 /*!< Denial of Service timeout has fired twice and caused buffers to drain to allow forward progress */ +#define ARMCM85_PMU_DOSTIMEOUT_TRIPLE 0xC401 /*!< Denial of Service timeout has fired three times and blocked the LSU to force forward progress */ +#define ARMCM85_PMU_FUSED_INST_RETIRED 0xC500 /*!< Fused instructions architecturally executed */ +#define ARMCM85_PMU_BR_INDIRECT 0xC501 /*!< Indirect branch instruction architecturally executed */ +#define ARMCM85_PMU_BTAC_HIT 0xC502 /*!< BTAC branch predictor hit */ +#define ARMCM85_PMU_BTAC_HIT_RETURNS 0xC503 /*!< Return branch hits BTAC */ +#define ARMCM85_PMU_BTAC_HIT_CALLS 0xC504 /*!< Call branch hits BTAC */ +#define ARMCM85_PMU_BTAC_HIT_INDIRECT 0xC505 /*!< Indirect branch hits BTACT */ +#define ARMCM85_PMU_BTAC_NEW_ALLOC 0xC506 /*!< New allocation to BTAC */ +#define ARMCM85_PMU_BR_IND_MIS_PRED 0xC507 /*!< Indirect branch mis-predicted */ +#define ARMCM85_PMU_BR_RETURN_MIS_PRED 0xC508 /*!< Return branch mis-predicted */ +#define ARMCM85_PMU_BR_BTAC_OFFSET_OVERFLOW 0xC509 /*!< Branch does not allocate in BTAC due to offset overflow */ +#define ARMCM85_PMU_STB_FULL_STALL_AXI 0xC50A /*!< STore Buffer (STB) full with AXI requests causing CPU to stall */ +#define ARMCM85_PMU_STB_FULL_STALL_TCM 0xC50B /*!< STB full with TCM requests causing CPU to stall */ +#define ARMCM85_PMU_CPU_STALLED_AHBS 0xC50C /*!< CPU is stalled because TCM access through AHBS */ +#define ARMCM85_PMU_AHBS_STALLED_CPU 0xC50D /*!< AHBS is stalled due to TCM access by CPU */ +#define ARMCM85_PMU_BR_INTERSTATING_MIS_PRED 0xC50E /*!< Inter-stating branch is mis-predicted. */ +#define ARMCM85_PMU_DWT_STALL 0xC50F /*!< Data Watchpoint and Trace (DWT) stall */ +#define ARMCM85_PMU_DWT_FLUSH 0xC510 /*!< DWT flush */ +#define ARMCM85_PMU_ETM_STALL 0xC511 /*!< Embedded Trace Macrocell (ETM) stall */ +#define ARMCM85_PMU_ETM_FLUSH 0xC512 /*!< ETM flush */ +#define ARMCM85_PMU_ADDRESS_BANK_CONFLICT 0xC513 /*!< Bank conflict prevents memory instruction dual issue */ +#define ARMCM85_PMU_BLOCKED_DUAL_ISSUE 0xC514 /*!< Dual instruction issuing is prevented */ +#define ARMCM85_PMU_FP_CONTEXT_TRIGGER 0xC515 /*!< Floating Point Context is created */ +#define ARMCM85_PMU_TAIL_CHAIN 0xC516 /*!< New exception is handled without first unstacking */ +#define ARMCM85_PMU_LATE_ARRIVAL 0xC517 /*!< Late-arriving exception taken during exception entry */ +#define ARMCM85_PMU_INT_STALL_FAULT 0xC518 /*!< Delayed exception entry due to ongoing fault processing */ +#define ARMCM85_PMU_INT_STALL_DEV 0xC519 /*!< Delayed exception entry due to outstanding device access */ +#define ARMCM85_PMU_PAC_STALL 0xC51A /*!< Stall caused by authentication code computation */ +#define ARMCM85_PMU_PAC_RETIRED 0xC51B /*!< PAC instruction architecturally executed */ +#define ARMCM85_PMU_AUT_RETIRED 0xC51C /*!< AUT instruction architecturally executed */ +#define ARMCM85_PMU_BTI_RETIRED 0xC51D /*!< BTI instruction architecturally executed */ +#define ARMCM85_PMU_PF_NL_MODE 0xC51E /*!< Prefetch in next line mode */ +#define ARMCM85_PMU_PF_STREAM_MODE 0xC51F /*!< Prefetch in stream mode */ +#define ARMCM85_PMU_PF_BUFF_CACHE_HIT 0xC520 /*!< Prefetch request that hit in the cache */ +#define ARMCM85_PMU_PF_REQ_LFB_HIT 0xC521 /*!< Prefetch request that hit in line fill buffers */ +#define ARMCM85_PMU_PF_BUFF_FULL 0xC522 /*!< Number of times prefetch buffer is full */ +#define ARMCM85_PMU_PF_REQ_DCACHE_HIT 0xC523 /*!< Generated prefetch request address that hit in D-Cache */ + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + +/* ########################## MVE functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_MveFunctions MVE Functions + \brief Function that provides MVE type. + @{ + */ + +/** + \brief get MVE type + \details returns the MVE type + \returns + - \b 0: No Vector Extension (MVE) + - \b 1: Integer Vector Extension (MVE-I) + - \b 2: Floating-point Vector Extension (MVE-F) + */ +__STATIC_INLINE uint32_t SCB_GetMVEType(void) +{ + const uint32_t mvfr1 = FPU->MVFR1; + if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x2U << FPU_MVFR1_MVE_Pos)) + { + return 2U; + } + else if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x1U << FPU_MVFR1_MVE_Pos)) + { + return 1U; + } + else + { + return 0U; + } +} + + +/*@} end of CMSIS_Core_MveFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) + #include "m-profile/armv7m_cachel1.h" +#endif + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + +/* ################### PAC Key functions ########################### */ + +#if (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) +#include "m-profile/armv81m_pac.h" +#endif + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM85_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h new file mode 100644 index 000000000000..4d85c48d0817 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h @@ -0,0 +1,1055 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS SC000 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_SC000_H_GENERIC +#define __CORE_SC000_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC000 definitions */ + +#define __CORTEX_SC (000U) /*!< Cortex Secure Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC000_H_DEPENDANT +#define __CORE_SC000_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC000_REV + #define __SC000_REV 0x0000U + #warning "__SC000_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC000 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the SC000 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for SC000 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for SC000 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M0 and M0+ do not require the architectural barrier - assume SC000 is the same */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h new file mode 100644 index 000000000000..670d9114133f --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h @@ -0,0 +1,2028 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS SC300 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_SC300_H_GENERIC +#define __CORE_SC300_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC3000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC300 definitions */ + +#define __CORTEX_SC (300U) /*!< Cortex Secure Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC300_H_DEPENDANT +#define __CORE_SC300_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC300_REV + #define __SC300_REV 0x0000U + #warning "__SC300_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC300 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IPR[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED1[129U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ +} ITM_Type; + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Lock Status Register Definitions */ +#define ITM_LSR_BYTEACC_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_BYTEACC_Msk (1UL << ITM_LSR_BYTEACC_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_ACCESS_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_ACCESS_Msk (1UL << ITM_LSR_ACCESS_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_PRESENT_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_PRESENT_Msk (1UL /*<< ITM_LSR_PRESENT_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration ETM Data Register Definitions (FIFO0) */ +#define TPIU_FIFO0_ITM_ATVALID_Pos 29U /*!< TPIU FIFO0: ITM_ATVALID Position */ +#define TPIU_FIFO0_ITM_ATVALID_Msk (1UL << TPIU_FIFO0_ITM_ATVALID_Pos) /*!< TPIU FIFO0: ITM_ATVALID Mask */ + +#define TPIU_FIFO0_ITM_bytecount_Pos 27U /*!< TPIU FIFO0: ITM_bytecount Position */ +#define TPIU_FIFO0_ITM_bytecount_Msk (0x3UL << TPIU_FIFO0_ITM_bytecount_Pos) /*!< TPIU FIFO0: ITM_bytecount Mask */ + +#define TPIU_FIFO0_ETM_ATVALID_Pos 26U /*!< TPIU FIFO0: ETM_ATVALID Position */ +#define TPIU_FIFO0_ETM_ATVALID_Msk (1UL << TPIU_FIFO0_ETM_ATVALID_Pos) /*!< TPIU FIFO0: ETM_ATVALID Mask */ + +#define TPIU_FIFO0_ETM_bytecount_Pos 24U /*!< TPIU FIFO0: ETM_bytecount Position */ +#define TPIU_FIFO0_ETM_bytecount_Msk (0x3UL << TPIU_FIFO0_ETM_bytecount_Pos) /*!< TPIU FIFO0: ETM_bytecount Mask */ + +#define TPIU_FIFO0_ETM2_Pos 16U /*!< TPIU FIFO0: ETM2 Position */ +#define TPIU_FIFO0_ETM2_Msk (0xFFUL << TPIU_FIFO0_ETM2_Pos) /*!< TPIU FIFO0: ETM2 Mask */ + +#define TPIU_FIFO0_ETM1_Pos 8U /*!< TPIU FIFO0: ETM1 Position */ +#define TPIU_FIFO0_ETM1_Msk (0xFFUL << TPIU_FIFO0_ETM1_Pos) /*!< TPIU FIFO0: ETM1 Mask */ + +#define TPIU_FIFO0_ETM0_Pos 0U /*!< TPIU FIFO0: ETM0 Position */ +#define TPIU_FIFO0_ETM0_Msk (0xFFUL /*<< TPIU_FIFO0_ETM0_Pos*/) /*!< TPIU FIFO0: ETM0 Mask */ + +/** \brief TPIU ITATBCTR2 Register Definitions */ +#define TPIU_ITATBCTR2_ATREADY2_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2 Position */ +#define TPIU_ITATBCTR2_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2 Mask */ + +#define TPIU_ITATBCTR2_ATREADY1_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1 Position */ +#define TPIU_ITATBCTR2_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1 Mask */ + +/** \brief TPIU Integration ITM Data Register Definitions (FIFO1) */ +#define TPIU_FIFO1_ITM_ATVALID_Pos 29U /*!< TPIU FIFO1: ITM_ATVALID Position */ +#define TPIU_FIFO1_ITM_ATVALID_Msk (1UL << TPIU_FIFO1_ITM_ATVALID_Pos) /*!< TPIU FIFO1: ITM_ATVALID Mask */ + +#define TPIU_FIFO1_ITM_bytecount_Pos 27U /*!< TPIU FIFO1: ITM_bytecount Position */ +#define TPIU_FIFO1_ITM_bytecount_Msk (0x3UL << TPIU_FIFO1_ITM_bytecount_Pos) /*!< TPIU FIFO1: ITM_bytecount Mask */ + +#define TPIU_FIFO1_ETM_ATVALID_Pos 26U /*!< TPIU FIFO1: ETM_ATVALID Position */ +#define TPIU_FIFO1_ETM_ATVALID_Msk (1UL << TPIU_FIFO1_ETM_ATVALID_Pos) /*!< TPIU FIFO1: ETM_ATVALID Mask */ + +#define TPIU_FIFO1_ETM_bytecount_Pos 24U /*!< TPIU FIFO1: ETM_bytecount Position */ +#define TPIU_FIFO1_ETM_bytecount_Msk (0x3UL << TPIU_FIFO1_ETM_bytecount_Pos) /*!< TPIU FIFO1: ETM_bytecount Mask */ + +#define TPIU_FIFO1_ITM2_Pos 16U /*!< TPIU FIFO1: ITM2 Position */ +#define TPIU_FIFO1_ITM2_Msk (0xFFUL << TPIU_FIFO1_ITM2_Pos) /*!< TPIU FIFO1: ITM2 Mask */ + +#define TPIU_FIFO1_ITM1_Pos 8U /*!< TPIU FIFO1: ITM1 Position */ +#define TPIU_FIFO1_ITM1_Msk (0xFFUL << TPIU_FIFO1_ITM1_Pos) /*!< TPIU FIFO1: ITM1 Mask */ + +#define TPIU_FIFO1_ITM0_Pos 0U /*!< TPIU FIFO1: ITM0 Position */ +#define TPIU_FIFO1_ITM0_Msk (0xFFUL /*<< TPIU_FIFO1_ITM0_Pos*/) /*!< TPIU FIFO1: ITM0 Mask */ + +/** \brief TPIU ITATBCTR0 Register Definitions */ +#define TPIU_ITATBCTR0_ATREADY2_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2 Position */ +#define TPIU_ITATBCTR0_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2 Mask */ + +#define TPIU_ITATBCTR0_ATREADY1_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1 Position */ +#define TPIU_ITATBCTR0_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1 Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_MinBufSz_Pos 6U /*!< TPIU DEVID: MinBufSz Position */ +#define TPIU_DEVID_MinBufSz_Msk (0x7UL << TPIU_DEVID_MinBufSz_Pos) /*!< TPIU DEVID: MinBufSz Mask */ + +#define TPIU_DEVID_AsynClkIn_Pos 5U /*!< TPIU DEVID: AsynClkIn Position */ +#define TPIU_DEVID_AsynClkIn_Msk (1UL << TPIU_DEVID_AsynClkIn_Pos) /*!< TPIU DEVID: AsynClkIn Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ +#define DCB_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M3 does not require the architectural barrier */ +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h new file mode 100644 index 000000000000..3b4e93e41352 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h @@ -0,0 +1,3614 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. + * Copyright (c) 2018-2022 Arm China. + * All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS ArmChina STAR-MC1 Core Peripheral Access Layer Header File + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_STAR_H_GENERIC +#define __CORE_STAR_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
    + Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
    + Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
    + Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup STAR-MC1 + @{ + */ + +#include "cmsis_version.h" + +/* Macro Define for STAR-MC1 */ + +#define __STAR_MC (1U) /*!< STAR-MC Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_STAR_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_STAR_H_DEPENDANT +#define __CORE_STAR_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __STAR_REV + #define __STAR_REV 0x0000U + #warning "__STAR_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group STAR-MC1 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for STAR-MC1 processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/** \brief APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/** \brief IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/** \brief xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED_ADD1[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: F00-D00=0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ +} SCB_Type; + +typedef struct +{ + __IOM uint32_t CACR; /*!< Offset: 0x0 (R/W) L1 Cache Control Register */ + __IOM uint32_t ITCMCR; /*!< Offset: 0x10 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x14 (R/W) Data Tightly-Coupled Memory Control Registers */ +} EMSS_Type; + +/** \brief SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/** \brief SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/** \brief SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/** \brief SCB MemManage Fault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/** \brief SCB BusFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/** \brief SCB UsageFault Status Register Definitions (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/** \brief SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/** \brief SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/** \brief SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +#define SCB_CLIDR_IC_Pos 0U /*!< SCB CLIDR: IC Position */ +#define SCB_CLIDR_IC_Msk (1UL << SCB_CLIDR_IC_Pos) /*!< SCB CLIDR: IC Mask */ + +#define SCB_CLIDR_DC_Pos 1U /*!< SCB CLIDR: DC Position */ +#define SCB_CLIDR_DC_Msk (1UL << SCB_CLIDR_DC_Pos) /*!< SCB CLIDR: DC Mask */ + +/** \brief SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/** \brief SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/** \brief SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/** \brief SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/** \brief SCB D-Cache line Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_LEVEL_Pos 1U /*!< SCB DCISW: Level Position */ +#define SCB_DCISW_LEVEL_Msk (7UL << SCB_DCISW_LEVEL_Pos) /*!< SCB DCISW: Level Mask */ + +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0xFFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB D-Cache Clean line by Set-way Register Definitions */ +#define SCB_DCCSW_LEVEL_Pos 1U /*!< SCB DCCSW: Level Position */ +#define SCB_DCCSW_LEVEL_Msk (7UL << SCB_DCCSW_LEVEL_Pos) /*!< SCB DCCSW: Level Mask */ + +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0xFFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_LEVEL_Pos 1U /*!< SCB DCCISW: Level Position */ +#define SCB_DCCISW_LEVEL_Msk (7UL << SCB_DCCISW_LEVEL_Pos) /*!< SCB DCCISW: Level Mask */ + +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0xFFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* ArmChina: Implementation Defined */ +/** \brief Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/** \brief Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/** \brief L1 Cache Control Register Definitions */ +#define SCB_CACR_DCCLEAN_Pos 16U /*!< SCB CACR: DCCLEAN Position */ +#define SCB_CACR_DCCLEAN_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: DCCLEAN Mask */ + +#define SCB_CACR_ICACTIVE_Pos 13U /*!< SCB CACR: ICACTIVE Position */ +#define SCB_CACR_ICACTIVE_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: ICACTIVE Mask */ + +#define SCB_CACR_DCACTIVE_Pos 12U /*!< SCB CACR: DCACTIVE Position */ +#define SCB_CACR_DCACTIVE_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: DCACTIVE Mask */ + +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/** \brief SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/** \brief SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/** \brief SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/** \brief SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/** \brief ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/** \brief ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/** \brief DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/** \brief DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/** \brief DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/** \brief DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/** \brief DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/** \brief MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/** \brief MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/** \brief MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Mask */ + +/** \brief MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/** \brief MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/** \brief SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/** \brief SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/** \brief SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/** \brief SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/** \brief SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/** \brief SAU Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/** \brief FPU Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/** \brief FPU Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/** \brief FPU Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/** \brief DIB SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/** \brief DIB Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/** \brief DIB SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/** \brief DIB SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define EMSS_BASE (0xE001E000UL) /*!AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/** + \brief Software Reset + \details Initiates a system reset request to reset the CPU. + */ +__NO_RETURN __STATIC_INLINE void __SW_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses including + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk) | /* Keep BFHFNMINS unchanged. Use this Reset function in case your case need to keep it */ + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | /* Keep priority group unchanged */ + SCB_AIRCR_SYSRESETREQ_Msk ); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + + #include "m-profile/armv8m_mpu.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) + +/* ########################## Cache functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_CacheFunctions Cache Functions + \brief Functions that configure Instruction and Data cache. + @{ + */ + +/* Cache Size ID Register Macros */ +#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) + +#define __SCB_DCACHE_LINE_SIZE 32U /*!< STAR-MC1 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ +#define __SCB_ICACHE_LINE_SIZE 32U /*!< STAR-MC1 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */ + + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief I-Cache Invalidate by address + \details Invalidates I-Cache for the given address. + I-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + I-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] isize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (void *addr, int32_t isize) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if ( isize > 0 ) { + int32_t op_size = isize + (((uint32_t)addr) & (__SCB_ICACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_ICACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->ICIMVAU = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_ICACHE_LINE_SIZE; + op_size -= __SCB_ICACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */ + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address. + D-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + D-Cache is cleaned starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + D-Cache is cleaned and invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned and invalidated. + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + +/*@} end of CMSIS_Core_CacheFunctions */ +#endif + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_STAR_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h new file mode 100644 index 000000000000..d7338a72e0a3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h @@ -0,0 +1,439 @@ +/* + * Copyright (c) 2020-2021 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) Level 1 Cache API for Armv7-M and later + */ + +#ifndef ARM_ARMV7M_CACHEL1_H +#define ARM_ARMV7M_CACHEL1_H + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_CacheFunctions Cache Functions + \brief Functions that configure Instruction and Data cache. + @{ + */ + +/* Cache Size ID Register Macros */ +#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) + +#ifndef __SCB_DCACHE_LINE_SIZE +#define __SCB_DCACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ +#endif + +#ifndef __SCB_ICACHE_LINE_SIZE +#define __SCB_ICACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ +#endif + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */ + + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief I-Cache Invalidate by address + \details Invalidates I-Cache for the given address. + I-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + I-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] isize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (volatile void *addr, int32_t isize) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if ( isize > 0 ) { + int32_t op_size = isize + (((uint32_t)addr) & (__SCB_ICACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_ICACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->ICIMVAU = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_ICACHE_LINE_SIZE; + op_size -= __SCB_ICACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */ + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + struct { + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + } locals + #if ((defined(__GNUC__) || defined(__clang__)) && !defined(__OPTIMIZE__)) + __ALIGNED(__SCB_DCACHE_LINE_SIZE) + #endif + ; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + #if !defined(__OPTIMIZE__) + /* + * For the endless loop issue with no optimization builds. + * More details, see https://github.com/ARM-software/CMSIS_5/issues/620 + * + * The issue only happens when local variables are in stack. If + * local variables are saved in general purpose register, then the function + * is OK. + * + * When local variables are in stack, after disabling the cache, flush the + * local variables cache line for data consistency. + */ + /* Clean and invalidate the local variable cache. */ + #if defined(__ICCARM__) + /* As we can't align the stack to the cache line size, invalidate each of the variables */ + SCB->DCCIMVAC = (uint32_t)&locals.sets; + SCB->DCCIMVAC = (uint32_t)&locals.ways; + SCB->DCCIMVAC = (uint32_t)&locals.ccsidr; + #else + SCB->DCCIMVAC = (uint32_t)&locals; + #endif + __DSB(); + __ISB(); + #endif + + locals.ccsidr = SCB->CCSIDR; + /* clean & invalidate D-Cache */ + locals.sets = (uint32_t)(CCSIDR_SETS(locals.ccsidr)); + do { + locals.ways = (uint32_t)(CCSIDR_WAYS(locals.ccsidr)); + do { + SCB->DCCISW = (((locals.sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((locals.ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (locals.ways-- != 0U); + } while(locals.sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address. + D-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (volatile void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + D-Cache is cleaned starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (volatile void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + D-Cache is cleaned and invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned and invalidated. + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (volatile void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + +/*@} end of CMSIS_Core_CacheFunctions */ + +#endif /* ARM_ARMV7M_CACHEL1_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h new file mode 100644 index 000000000000..5a4eba231c17 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2017-2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) MPU API for Armv7-M MPU + */ + +#ifndef ARM_MPU_ARMV7_H +#define ARM_MPU_ARMV7_H + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes +#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes +#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes +#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes +#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes +#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte +#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes +#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes +#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes +#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes +#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes +#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes +#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes +#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes +#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes +#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte +#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes +#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes +#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes +#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes +#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes +#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes +#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes +#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes +#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes +#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte +#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes +#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes + +#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access +#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only +#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only +#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access +#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only +#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access + +/** MPU Region Base Address Register Value +* +* \param Region The region to be configured, number 0 to 15. +* \param BaseAddress The base address for the region. +*/ +#define ARM_MPU_RBAR(Region, BaseAddress) \ + (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ + ((Region) & MPU_RBAR_REGION_Msk) | \ + (MPU_RBAR_VALID_Msk)) + +/** +* MPU Memory Access Attributes +* +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +*/ +#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ + ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ + (((IsShareable) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ + (((IsCacheable) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ + (((IsBufferable) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ + ((((DisableExec) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ + (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ + (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \ + (((SubRegionDisable) << MPU_RASR_SRD_Pos) & MPU_RASR_SRD_Msk) | \ + (((Size) << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk) | \ + (((MPU_RASR_ENABLE_Msk)))) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ + ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) + +/** +* MPU Memory Access Attribute for strongly ordered memory. +* - TEX: 000b +* - Shareable +* - Non-cacheable +* - Non-bufferable +*/ +#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) + +/** +* MPU Memory Access Attribute for device memory. +* - TEX: 000b (if shareable) or 010b (if non-shareable) +* - Shareable or non-shareable +* - Non-cacheable +* - Bufferable (if shareable) or non-bufferable (if non-shareable) +* +* \param IsShareable Configures the device memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) + +/** +* MPU Memory Access Attribute for normal memory. +* - TEX: 1BBb (reflecting outer cacheability rules) +* - Shareable or non-shareable +* - Cacheable or non-cacheable (reflecting inner cacheability rules) +* - Bufferable or non-bufferable (reflecting inner cacheability rules) +* +* \param OuterCp Configures the outer cache policy. +* \param InnerCp Configures the inner cache policy. +* \param IsShareable Configures the memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) >> 1U), ((InnerCp) & 1U)) + +/** +* MPU Memory Access Attribute non-cacheable policy. +*/ +#define ARM_MPU_CACHEP_NOCACHE 0U + +/** +* MPU Memory Access Attribute write-back, write and read allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_WRA 1U + +/** +* MPU Memory Access Attribute write-through, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WT_NWA 2U + +/** +* MPU Memory Access Attribute write-back, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_NWA 3U + + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; //!< The region base address register value (RBAR) + uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DMB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + MPU->RNR = rnr; + MPU->RASR = 0U; +} + +/** Configure an MPU region. +* \param rbar Value for RBAR register. +* \param rasr Value for RASR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) +{ + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rasr Value for RASR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) +{ + MPU->RNR = rnr; + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Memcpy with strictly ordered memory access, e.g. used by code in ARM_MPU_Load(). +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + while (cnt > MPU_TYPE_RALIASES) { + ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); + table += MPU_TYPE_RALIASES; + cnt -= MPU_TYPE_RALIASES; + } + ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); +} + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h new file mode 100644 index 000000000000..648cf886476c --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2022 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) PAC key functions for Armv8.1-M PAC extension + */ + +#ifndef PAC_ARMV81_H +#define PAC_ARMV81_H + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +/* ################### PAC Key functions ########################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_PacKeyFunctions PAC Key functions + \brief Functions that access the PAC keys. + @{ + */ + +#if (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) + +/** + \brief read the PAC key used for privileged mode + \details Reads the PAC key stored in the PAC_KEY_P registers. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __get_PAC_KEY_P (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_p_0\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_p_1\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_p_2\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_p_3\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for privileged mode + \details writes the given PAC key to the PAC_KEY_P registers. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __set_PAC_KEY_P (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_p_0, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_p_1, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_p_2, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_p_3, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief read the PAC key used for unprivileged mode + \details Reads the PAC key stored in the PAC_KEY_U registers. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __get_PAC_KEY_U (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_u_0\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_u_1\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_u_2\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_u_3\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for unprivileged mode + \details writes the given PAC key to the PAC_KEY_U registers. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __set_PAC_KEY_U (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_u_0, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_u_1, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_u_2, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_u_3, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) + +/** + \brief read the PAC key used for privileged mode (non-secure) + \details Reads the PAC key stored in the non-secure PAC_KEY_P registers when in secure mode. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_get_PAC_KEY_P_NS (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_p_0_ns\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_p_1_ns\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_p_2_ns\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_p_3_ns\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for privileged mode (non-secure) + \details writes the given PAC key to the non-secure PAC_KEY_P registers when in secure mode. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_set_PAC_KEY_P_NS (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_p_0_ns, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_p_1_ns, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_p_2_ns, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_p_3_ns, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief read the PAC key used for unprivileged mode (non-secure) + \details Reads the PAC key stored in the non-secure PAC_KEY_U registers when in secure mode. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_get_PAC_KEY_U_NS (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_u_0_ns\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_u_1_ns\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_u_2_ns\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_u_3_ns\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for unprivileged mode (non-secure) + \details writes the given PAC key to the non-secure PAC_KEY_U registers when in secure mode. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_set_PAC_KEY_U_NS (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_u_0_ns, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_u_1_ns, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_u_2_ns, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_u_3_ns, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +#endif /* (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) */ + +#endif /* (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) */ + +/*@} end of CMSIS_Core_PacKeyFunctions */ + + +#endif /* PAC_ARMV81_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h new file mode 100644 index 000000000000..d743af12c787 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2017-2022 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) MPU API for Armv8-M and Armv8.1-M MPU + */ + +#ifndef ARM_MPU_ARMV8_H +#define ARM_MPU_ARMV8_H + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +/** \brief Attribute for device memory (outer only) */ +#define ARM_MPU_ATTR_DEVICE ( 0U ) + +/** \brief Attribute for non-cacheable, normal memory */ +#define ARM_MPU_ATTR_NON_CACHEABLE ( 4U ) + +/** \brief Attribute for Normal memory, Outer and Inner cacheability. +* \param NT Non-Transient: Set to 1 for Non-transient data. Set to 0 for Transient data. +* \param WB Write-Back: Set to 1 to use a Write-Back policy. Set to 0 to use a Write-Through policy. +* \param RA Read Allocation: Set to 1 to enable cache allocation on read miss. Set to 0 to disable cache allocation on read miss. +* \param WA Write Allocation: Set to 1 to enable cache allocation on write miss. Set to 0 to disable cache allocation on write miss. +*/ +#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \ + ((((NT) & 1U) << 3U) | (((WB) & 1U) << 2U) | (((RA) & 1U) << 1U) | ((WA) & 1U)) + +/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U) + +/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRE (1U) + +/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGRE (2U) + +/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_GRE (3U) + +/** \brief Normal memory outer-cacheable and inner-cacheable attributes +* WT = Write Through, WB = Write Back, TR = Transient, RA = Read-Allocate, WA = Write Allocate +*/ +#define MPU_ATTR_NORMAL_OUTER_NON_CACHEABLE (0b0100) +#define MPU_ATTR_NORMAL_OUTER_WT_TR_RA (0b0010) +#define MPU_ATTR_NORMAL_OUTER_WT_TR_WA (0b0001) +#define MPU_ATTR_NORMAL_OUTER_WT_TR_RA_WA (0b0011) +#define MPU_ATTR_NORMAL_OUTER_WT_RA (0b1010) +#define MPU_ATTR_NORMAL_OUTER_WT_WA (0b1001) +#define MPU_ATTR_NORMAL_OUTER_WT_RA_WA (0b1011) +#define MPU_ATTR_NORMAL_OUTER_WB_TR_RA (0b0101) +#define MPU_ATTR_NORMAL_OUTER_WB_TR_WA (0b0110) +#define MPU_ATTR_NORMAL_OUTER_WB_TR_RA_WA (0b0111) +#define MPU_ATTR_NORMAL_OUTER_WB_RA (0b1101) +#define MPU_ATTR_NORMAL_OUTER_WB_WA (0b1110) +#define MPU_ATTR_NORMAL_OUTER_WB_RA_WA (0b1111) +#define MPU_ATTR_NORMAL_INNER_NON_CACHEABLE (0b0100) +#define MPU_ATTR_NORMAL_INNER_WT_TR_RA (0b0010) +#define MPU_ATTR_NORMAL_INNER_WT_TR_WA (0b0001) +#define MPU_ATTR_NORMAL_INNER_WT_TR_RA_WA (0b0011) +#define MPU_ATTR_NORMAL_INNER_WT_RA (0b1010) +#define MPU_ATTR_NORMAL_INNER_WT_WA (0b1001) +#define MPU_ATTR_NORMAL_INNER_WT_RA_WA (0b1011) +#define MPU_ATTR_NORMAL_INNER_WB_TR_RA (0b0101) +#define MPU_ATTR_NORMAL_INNER_WB_TR_WA (0b0110) +#define MPU_ATTR_NORMAL_INNER_WB_TR_RA_WA (0b0111) +#define MPU_ATTR_NORMAL_INNER_WB_RA (0b1101) +#define MPU_ATTR_NORMAL_INNER_WB_WA (0b1110) +#define MPU_ATTR_NORMAL_INNER_WB_RA_WA (0b1111) + +/** \brief Memory Attribute +* \param O Outer memory attributes +* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes +*/ +#define ARM_MPU_ATTR(O, I) ((((O) & 0xFU) << 4U) | ((((O) & 0xFU) != 0U) ? ((I) & 0xFU) : (((I) & 0x3U) << 2U))) + +/* \brief Specifies MAIR_ATTR number */ +#define MAIR_ATTR(x) ((x > 7 || x < 0) ? 0 : x) + +/** + * Shareability + */ +/** \brief Normal memory, non-shareable */ +#define ARM_MPU_SH_NON (0U) + +/** \brief Normal memory, outer shareable */ +#define ARM_MPU_SH_OUTER (2U) + +/** \brief Normal memory, inner shareable */ +#define ARM_MPU_SH_INNER (3U) + +/** + * Access permissions + * AP = Access permission, RO = Read-only, RW = Read/Write, NP = Any privilege, PO = Privileged code only + */ +/** \brief Normal memory, read/write */ +#define ARM_MPU_AP_RW (0U) + +/** \brief Normal memory, read-only */ +#define ARM_MPU_AP_RO (1U) + +/** \brief Normal memory, any privilege level */ +#define ARM_MPU_AP_NP (1U) + +/** \brief Normal memory, privileged access only */ +#define ARM_MPU_AP_PO (0U) + +/* + * Execute-never + * XN = Execute-never, EX = Executable + */ +/** \brief Normal memory, Execution only permitted if read permitted */ +#define ARM_MPU_XN (1U) + +/** \brief Normal memory, Execution only permitted if read permitted */ +#define ARM_MPU_EX (0U) + +/** \brief Memory access permissions +* \param RO Read-Only: Set to 1 for read-only memory. Set to 0 for a read/write memory. +* \param NP Non-Privileged: Set to 1 for non-privileged memory. Set to 0 for privileged memory. +*/ +#define ARM_MPU_AP_(RO, NP) ((((RO) & 1U) << 1U) | ((NP) & 1U)) + +/** \brief Region Base Address Register value +* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned. +* \param SH Defines the Shareability domain for this memory region. +* \param RO Read-Only: Set to 1 for a read-only memory region. Set to 0 for a read/write memory region. +* \param NP Non-Privileged: Set to 1 for a non-privileged memory region. Set to 0 for privileged memory region. +* \param XN eXecute Never: Set to 1 for a non-executable memory region. Set to 0 for an executable memory region. +*/ +#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \ + (((BASE) & MPU_RBAR_BASE_Msk) | \ + (((SH) << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \ + ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \ + (((XN) << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk)) + +/** \brief Region Limit Address Register value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR(LIMIT, IDX) \ + (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \ + (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +#if defined(MPU_RLAR_PXN_Pos) + +/** \brief Region Limit Address Register with PXN value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param PXN Privileged execute never. Defines whether code can be executed from this privileged region. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR_PXN(LIMIT, PXN, IDX) \ + (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \ + (((PXN) << MPU_RLAR_PXN_Pos) & MPU_RLAR_PXN_Msk) | \ + (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +#endif + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; /*!< Region Base Address Register value */ + uint32_t RLAR; /*!< Region Limit Address Register value */ +} ARM_MPU_Region_t; + +/** + \brief Read MPU Type Register + \return Number of MPU regions +*/ +__STATIC_INLINE uint32_t ARM_MPU_TYPE() +{ + return ((MPU->TYPE) >> 8); +} + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DMB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} + +#ifdef MPU_NS +/** Enable the Non-secure MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control) +{ + __DMB(); + MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the Non-secure MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable_NS(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} +#endif + +/** Set the memory attribute encoding to the given MPU. +* \param mpu Pointer to the MPU to be configured. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr) +{ + const uint8_t reg = idx / 4U; + const uint32_t pos = ((idx % 4U) * 8U); + const uint32_t mask = 0xFFU << pos; + + if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) { + return; // invalid index + } + + mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask)); +} + +/** Set the memory attribute encoding. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU, idx, attr); +} + +#ifdef MPU_NS +/** Set the memory attribute encoding to the Non-secure MPU. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr); +} +#endif + +/** Clear and disable the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr) +{ + mpu->RNR = rnr; + mpu->RLAR = 0U; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU, rnr); +} + +#ifdef MPU_NS +/** Clear and disable the given Non-secure MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU_NS, rnr); +} +#endif + +/** Configure the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + mpu->RNR = rnr; + mpu->RBAR = rbar; + mpu->RLAR = rlar; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar); +} + +#ifdef MPU_NS +/** Configure the given Non-secure MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar); +} +#endif + +/** Memcpy with strictly ordered memory access, e.g. used by code in ARM_MPU_LoadEx() +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table to the given MPU. +* \param mpu Pointer to the MPU registers to be used. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + if (cnt == 1U) { + mpu->RNR = rnr; + ARM_MPU_OrderedMemcpy(&(mpu->RBAR), &(table->RBAR), rowWordSize); + } else { + uint32_t rnrBase = rnr & ~(MPU_TYPE_RALIASES-1U); + uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES; + + mpu->RNR = rnrBase; + while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) { + uint32_t c = MPU_TYPE_RALIASES - rnrOffset; + ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize); + table += c; + cnt -= c; + rnrOffset = 0U; + rnrBase += MPU_TYPE_RALIASES; + mpu->RNR = rnrBase; + } + + ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize); + } +} + +/** Load the given number of MPU regions from a table. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU, rnr, table, cnt); +} + +#ifdef MPU_NS +/** Load the given number of MPU regions from a table to the Non-secure MPU. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt); +} +#endif + +#endif + diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h new file mode 100644 index 000000000000..fb1653317304 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h @@ -0,0 +1,335 @@ +/* + * Copyright (c) 2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) PMU API for Armv8.1-M PMU + */ + +#ifndef ARM_PMU_ARMV8_H +#define ARM_PMU_ARMV8_H + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +/** + * \brief PMU Events + * \note See the Armv8.1-M Architecture Reference Manual for full details on these PMU events. + * */ + +#define ARM_PMU_SW_INCR 0x0000 /*!< Software update to the PMU_SWINC register, architecturally executed and condition code check pass */ +#define ARM_PMU_L1I_CACHE_REFILL 0x0001 /*!< L1 I-Cache refill */ +#define ARM_PMU_L1D_CACHE_REFILL 0x0003 /*!< L1 D-Cache refill */ +#define ARM_PMU_L1D_CACHE 0x0004 /*!< L1 D-Cache access */ +#define ARM_PMU_LD_RETIRED 0x0006 /*!< Memory-reading instruction architecturally executed and condition code check pass */ +#define ARM_PMU_ST_RETIRED 0x0007 /*!< Memory-writing instruction architecturally executed and condition code check pass */ +#define ARM_PMU_INST_RETIRED 0x0008 /*!< Instruction architecturally executed */ +#define ARM_PMU_EXC_TAKEN 0x0009 /*!< Exception entry */ +#define ARM_PMU_EXC_RETURN 0x000A /*!< Exception return instruction architecturally executed and the condition code check pass */ +#define ARM_PMU_PC_WRITE_RETIRED 0x000C /*!< Software change to the Program Counter (PC). Instruction is architecturally executed and condition code check pass */ +#define ARM_PMU_BR_IMMED_RETIRED 0x000D /*!< Immediate branch architecturally executed */ +#define ARM_PMU_BR_RETURN_RETIRED 0x000E /*!< Function return instruction architecturally executed and the condition code check pass */ +#define ARM_PMU_UNALIGNED_LDST_RETIRED 0x000F /*!< Unaligned memory memory-reading or memory-writing instruction architecturally executed and condition code check pass */ +#define ARM_PMU_BR_MIS_PRED 0x0010 /*!< Mispredicted or not predicted branch speculatively executed */ +#define ARM_PMU_CPU_CYCLES 0x0011 /*!< Cycle */ +#define ARM_PMU_BR_PRED 0x0012 /*!< Predictable branch speculatively executed */ +#define ARM_PMU_MEM_ACCESS 0x0013 /*!< Data memory access */ +#define ARM_PMU_L1I_CACHE 0x0014 /*!< Level 1 instruction cache access */ +#define ARM_PMU_L1D_CACHE_WB 0x0015 /*!< Level 1 data cache write-back */ +#define ARM_PMU_L2D_CACHE 0x0016 /*!< Level 2 data cache access */ +#define ARM_PMU_L2D_CACHE_REFILL 0x0017 /*!< Level 2 data cache refill */ +#define ARM_PMU_L2D_CACHE_WB 0x0018 /*!< Level 2 data cache write-back */ +#define ARM_PMU_BUS_ACCESS 0x0019 /*!< Bus access */ +#define ARM_PMU_MEMORY_ERROR 0x001A /*!< Local memory error */ +#define ARM_PMU_INST_SPEC 0x001B /*!< Instruction speculatively executed */ +#define ARM_PMU_BUS_CYCLES 0x001D /*!< Bus cycles */ +#define ARM_PMU_CHAIN 0x001E /*!< For an odd numbered counter, increment when an overflow occurs on the preceding even-numbered counter on the same PE */ +#define ARM_PMU_L1D_CACHE_ALLOCATE 0x001F /*!< Level 1 data cache allocation without refill */ +#define ARM_PMU_L2D_CACHE_ALLOCATE 0x0020 /*!< Level 2 data cache allocation without refill */ +#define ARM_PMU_BR_RETIRED 0x0021 /*!< Branch instruction architecturally executed */ +#define ARM_PMU_BR_MIS_PRED_RETIRED 0x0022 /*!< Mispredicted branch instruction architecturally executed */ +#define ARM_PMU_STALL_FRONTEND 0x0023 /*!< No operation issued because of the frontend */ +#define ARM_PMU_STALL_BACKEND 0x0024 /*!< No operation issued because of the backend */ +#define ARM_PMU_L2I_CACHE 0x0027 /*!< Level 2 instruction cache access */ +#define ARM_PMU_L2I_CACHE_REFILL 0x0028 /*!< Level 2 instruction cache refill */ +#define ARM_PMU_L3D_CACHE_ALLOCATE 0x0029 /*!< Level 3 data cache allocation without refill */ +#define ARM_PMU_L3D_CACHE_REFILL 0x002A /*!< Level 3 data cache refill */ +#define ARM_PMU_L3D_CACHE 0x002B /*!< Level 3 data cache access */ +#define ARM_PMU_L3D_CACHE_WB 0x002C /*!< Level 3 data cache write-back */ +#define ARM_PMU_LL_CACHE_RD 0x0036 /*!< Last level data cache read */ +#define ARM_PMU_LL_CACHE_MISS_RD 0x0037 /*!< Last level data cache read miss */ +#define ARM_PMU_L1D_CACHE_MISS_RD 0x0039 /*!< Level 1 data cache read miss */ +#define ARM_PMU_OP_COMPLETE 0x003A /*!< Operation retired */ +#define ARM_PMU_OP_SPEC 0x003B /*!< Operation speculatively executed */ +#define ARM_PMU_STALL 0x003C /*!< Stall cycle for instruction or operation not sent for execution */ +#define ARM_PMU_STALL_OP_BACKEND 0x003D /*!< Stall cycle for instruction or operation not sent for execution due to pipeline backend */ +#define ARM_PMU_STALL_OP_FRONTEND 0x003E /*!< Stall cycle for instruction or operation not sent for execution due to pipeline frontend */ +#define ARM_PMU_STALL_OP 0x003F /*!< Instruction or operation slots not occupied each cycle */ +#define ARM_PMU_L1D_CACHE_RD 0x0040 /*!< Level 1 data cache read */ +#define ARM_PMU_LE_RETIRED 0x0100 /*!< Loop end instruction executed */ +#define ARM_PMU_LE_SPEC 0x0101 /*!< Loop end instruction speculatively executed */ +#define ARM_PMU_BF_RETIRED 0x0104 /*!< Branch future instruction architecturally executed and condition code check pass */ +#define ARM_PMU_BF_SPEC 0x0105 /*!< Branch future instruction speculatively executed and condition code check pass */ +#define ARM_PMU_LE_CANCEL 0x0108 /*!< Loop end instruction not taken */ +#define ARM_PMU_BF_CANCEL 0x0109 /*!< Branch future instruction not taken */ +#define ARM_PMU_SE_CALL_S 0x0114 /*!< Call to secure function, resulting in Security state change */ +#define ARM_PMU_SE_CALL_NS 0x0115 /*!< Call to non-secure function, resulting in Security state change */ +#define ARM_PMU_DWT_CMPMATCH0 0x0118 /*!< DWT comparator 0 match */ +#define ARM_PMU_DWT_CMPMATCH1 0x0119 /*!< DWT comparator 1 match */ +#define ARM_PMU_DWT_CMPMATCH2 0x011A /*!< DWT comparator 2 match */ +#define ARM_PMU_DWT_CMPMATCH3 0x011B /*!< DWT comparator 3 match */ +#define ARM_PMU_MVE_INST_RETIRED 0x0200 /*!< MVE instruction architecturally executed */ +#define ARM_PMU_MVE_INST_SPEC 0x0201 /*!< MVE instruction speculatively executed */ +#define ARM_PMU_MVE_FP_RETIRED 0x0204 /*!< MVE floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_SPEC 0x0205 /*!< MVE floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_HP_RETIRED 0x0208 /*!< MVE half-precision floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_HP_SPEC 0x0209 /*!< MVE half-precision floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_SP_RETIRED 0x020C /*!< MVE single-precision floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_SP_SPEC 0x020D /*!< MVE single-precision floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_MAC_RETIRED 0x0214 /*!< MVE floating-point multiply or multiply-accumulate instruction architecturally executed */ +#define ARM_PMU_MVE_FP_MAC_SPEC 0x0215 /*!< MVE floating-point multiply or multiply-accumulate instruction speculatively executed */ +#define ARM_PMU_MVE_INT_RETIRED 0x0224 /*!< MVE integer instruction architecturally executed */ +#define ARM_PMU_MVE_INT_SPEC 0x0225 /*!< MVE integer instruction speculatively executed */ +#define ARM_PMU_MVE_INT_MAC_RETIRED 0x0228 /*!< MVE multiply or multiply-accumulate instruction architecturally executed */ +#define ARM_PMU_MVE_INT_MAC_SPEC 0x0229 /*!< MVE multiply or multiply-accumulate instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_RETIRED 0x0238 /*!< MVE load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_SPEC 0x0239 /*!< MVE load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_RETIRED 0x023C /*!< MVE load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_SPEC 0x023D /*!< MVE load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_RETIRED 0x0240 /*!< MVE store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_SPEC 0x0241 /*!< MVE store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_CONTIG_RETIRED 0x0244 /*!< MVE contiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_CONTIG_SPEC 0x0245 /*!< MVE contiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_CONTIG_RETIRED 0x0248 /*!< MVE contiguous load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_CONTIG_SPEC 0x0249 /*!< MVE contiguous load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_CONTIG_RETIRED 0x024C /*!< MVE contiguous store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_CONTIG_SPEC 0x024D /*!< MVE contiguous store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_NONCONTIG_RETIRED 0x0250 /*!< MVE non-contiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_NONCONTIG_SPEC 0x0251 /*!< MVE non-contiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_NONCONTIG_RETIRED 0x0254 /*!< MVE non-contiguous load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_NONCONTIG_SPEC 0x0255 /*!< MVE non-contiguous load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_NONCONTIG_RETIRED 0x0258 /*!< MVE non-contiguous store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_NONCONTIG_SPEC 0x0259 /*!< MVE non-contiguous store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_MULTI_RETIRED 0x025C /*!< MVE memory instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_LDST_MULTI_SPEC 0x025D /*!< MVE memory instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_LD_MULTI_RETIRED 0x0260 /*!< MVE memory load instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_LD_MULTI_SPEC 0x0261 /*!< MVE memory load instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_ST_MULTI_RETIRED 0x0261 /*!< MVE memory store instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_ST_MULTI_SPEC 0x0265 /*!< MVE memory store instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_RETIRED 0x028C /*!< MVE unaligned memory load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_SPEC 0x028D /*!< MVE unaligned memory load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_UNALIGNED_RETIRED 0x0290 /*!< MVE unaligned load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_UNALIGNED_SPEC 0x0291 /*!< MVE unaligned load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_UNALIGNED_RETIRED 0x0294 /*!< MVE unaligned store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_UNALIGNED_SPEC 0x0295 /*!< MVE unaligned store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_RETIRED 0x0298 /*!< MVE unaligned noncontiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_SPEC 0x0299 /*!< MVE unaligned noncontiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_RETIRED 0x02A0 /*!< MVE vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_SPEC 0x02A1 /*!< MVE vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_FP_RETIRED 0x02A4 /*!< MVE floating-point vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_FP_SPEC 0x02A5 /*!< MVE floating-point vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_INT_RETIRED 0x02A8 /*!< MVE integer vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_INT_SPEC 0x02A9 /*!< MVE integer vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_PRED 0x02B8 /*!< Cycles where one or more predicated beats architecturally executed */ +#define ARM_PMU_MVE_STALL 0x02CC /*!< Stall cycles caused by an MVE instruction */ +#define ARM_PMU_MVE_STALL_RESOURCE 0x02CD /*!< Stall cycles caused by an MVE instruction because of resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_MEM 0x02CE /*!< Stall cycles caused by an MVE instruction because of memory resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_FP 0x02CF /*!< Stall cycles caused by an MVE instruction because of floating-point resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_INT 0x02D0 /*!< Stall cycles caused by an MVE instruction because of integer resource conflicts */ +#define ARM_PMU_MVE_STALL_BREAK 0x02D3 /*!< Stall cycles caused by an MVE chain break */ +#define ARM_PMU_MVE_STALL_DEPENDENCY 0x02D4 /*!< Stall cycles caused by MVE register dependency */ +#define ARM_PMU_ITCM_ACCESS 0x4007 /*!< Instruction TCM access */ +#define ARM_PMU_DTCM_ACCESS 0x4008 /*!< Data TCM access */ +#define ARM_PMU_TRCEXTOUT0 0x4010 /*!< ETM external output 0 */ +#define ARM_PMU_TRCEXTOUT1 0x4011 /*!< ETM external output 1 */ +#define ARM_PMU_TRCEXTOUT2 0x4012 /*!< ETM external output 2 */ +#define ARM_PMU_TRCEXTOUT3 0x4013 /*!< ETM external output 3 */ +#define ARM_PMU_CTI_TRIGOUT4 0x4018 /*!< Cross-trigger Interface output trigger 4 */ +#define ARM_PMU_CTI_TRIGOUT5 0x4019 /*!< Cross-trigger Interface output trigger 5 */ +#define ARM_PMU_CTI_TRIGOUT6 0x401A /*!< Cross-trigger Interface output trigger 6 */ +#define ARM_PMU_CTI_TRIGOUT7 0x401B /*!< Cross-trigger Interface output trigger 7 */ + +/** \brief PMU Functions */ + +__STATIC_INLINE void ARM_PMU_Enable(void); +__STATIC_INLINE void ARM_PMU_Disable(void); + +__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type); + +__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void); +__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void); + +__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask); +__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask); + +__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void); +__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num); + +__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void); +__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask); + +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask); +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask); + +__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask); + +/** + \brief Enable the PMU +*/ +__STATIC_INLINE void ARM_PMU_Enable(void) +{ + PMU->CTRL |= PMU_CTRL_ENABLE_Msk; +} + +/** + \brief Disable the PMU +*/ +__STATIC_INLINE void ARM_PMU_Disable(void) +{ + PMU->CTRL &= ~PMU_CTRL_ENABLE_Msk; +} + +/** + \brief Set event to count for PMU eventer counter + \param [in] num Event counter (0-30) to configure + \param [in] type Event to count +*/ +__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type) +{ + PMU->EVTYPER[num] = type; +} + +/** + \brief Reset cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void) +{ + PMU->CTRL |= PMU_CTRL_CYCCNT_RESET_Msk; +} + +/** + \brief Reset all event counters +*/ +__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void) +{ + PMU->CTRL |= PMU_CTRL_EVENTCNT_RESET_Msk; +} + +/** + \brief Enable counters + \param [in] mask Counters to enable + \note Enables one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask) +{ + PMU->CNTENSET = mask; +} + +/** + \brief Disable counters + \param [in] mask Counters to enable + \note Disables one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask) +{ + PMU->CNTENCLR = mask; +} + +/** + \brief Read cycle counter + \return Cycle count +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void) +{ + return PMU->CCNTR; +} + +/** + \brief Read event counter + \param [in] num Event counter (0-30) to read + \return Event count +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num) +{ + return PMU_EVCNTR_CNT_Msk & PMU->EVCNTR[num]; +} + +/** + \brief Read counter overflow status + \return Counter overflow status bits for the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void) +{ + return PMU->OVSSET; +} + +/** + \brief Clear counter overflow status + \param [in] mask Counter overflow status bits to clear + \note Clears overflow status bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask) +{ + PMU->OVSCLR = mask; +} + +/** + \brief Enable counter overflow interrupt request + \param [in] mask Counter overflow interrupt request bits to set + \note Sets overflow interrupt request bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask) +{ + PMU->INTENSET = mask; +} + +/** + \brief Disable counter overflow interrupt request + \param [in] mask Counter overflow interrupt request bits to clear + \note Clears overflow interrupt request bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask) +{ + PMU->INTENCLR = mask; +} + +/** + \brief Software increment event counter + \param [in] mask Counters to increment + \note Software increment bits for one or more event counters (0-30) +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask) +{ + PMU->SWINC = mask; +} + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h new file mode 100644 index 000000000000..82fb6d46f435 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h @@ -0,0 +1,818 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) Compiler ARMClang (Arm Compiler 6) Header File + */ + +#ifndef __CMSIS_ARMCLANG_M_H +#define __CMSIS_ARMCLANG_M_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_ARMCLANG_H + #error "This file must not be included directly" +#endif + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* ######################### Startup and Lowlevel Init ######################## */ +#ifndef __PROGRAM_START +#define __PROGRAM_START __main +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) +#endif + +#if (__ARM_FEATURE_CMSE == 3) +#ifndef __STACK_SEAL +#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; + } +#endif + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return (result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return (result); +#endif +} + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return (result); +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return (result); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return (result); +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif +#endif /* (__ARM_ARCH >= 8) */ +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} +#endif /* (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) */ + /** @} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCLANG_M_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h new file mode 100644 index 000000000000..a594442664c2 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h @@ -0,0 +1,824 @@ +/* + * Copyright (c) 2009-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) Compiler LLVM/Clang Header File + */ + +#ifndef __CMSIS_CLANG_M_H +#define __CMSIS_CLANG_M_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_CLANG_H + #error "This file must not be included directly" +#endif + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + + +/* ######################### Startup and Lowlevel Init ######################## */ +#ifndef __PROGRAM_START +#define __PROGRAM_START _start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP __stack +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT __stack_limit +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) +#endif + +#if (__ARM_FEATURE_CMSE == 3) +#ifndef __STACK_SEAL +#define __STACK_SEAL __stack_seal +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; + } +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return (result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return (result); +#endif +} + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return (result); +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return (result); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return (result); +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* (__ARM_ARCH >= 8) */ + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} + +#endif /* (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) */ + /** @} end of group CMSIS_SIMD_intrinsics */ +/** @} end of CMSIS_Core_RegAccFunctions */ + + +#endif /* __CMSIS_CLANG_M_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h new file mode 100644 index 000000000000..54d1f5495779 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h @@ -0,0 +1,717 @@ +/* + * Copyright (c) 2009-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) Compiler GCC Header File + */ + +#ifndef __CMSIS_GCC_M_H +#define __CMSIS_GCC_M_H + +#ifndef __CMSIS_GCC_H + #error "This file must not be included directly" +#endif + +#include + +/* ######################### Startup and Lowlevel Init ######################## */ +#ifndef __PROGRAM_START + +/** + \brief Initializes data and bss sections + \details This default implementations initialized all data and additional bss + sections relying on .copy.table and .zero.table specified properly + in the used linker script. + + */ +__STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) +{ + extern void _start(void) __NO_RETURN; + + typedef struct __copy_table { + uint32_t const* src; + uint32_t* dest; + uint32_t wlen; + } __copy_table_t; + + typedef struct __zero_table { + uint32_t* dest; + uint32_t wlen; + } __zero_table_t; + + extern const __copy_table_t __copy_table_start__; + extern const __copy_table_t __copy_table_end__; + extern const __zero_table_t __zero_table_start__; + extern const __zero_table_t __zero_table_end__; + + for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) { + for(uint32_t i=0u; iwlen; ++i) { + pTable->dest[i] = pTable->src[i]; + } + } + + for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) { + for(uint32_t i=0u; iwlen; ++i) { + pTable->dest[i] = 0u; + } + } + + _start(); +} + +#define __PROGRAM_START __cmsis_start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP __StackTop +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT __StackLimit +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +#ifndef __STACK_SEAL +#define __STACK_SEAL __StackSeal +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return (result); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return (result); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return (result); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return (result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return (result); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return (result); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return (result); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return (result); +#endif +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1))) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return (result); +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1))) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return (result); +#endif +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1))) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return (result); +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1))) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* (__ARM_ARCH >= 8) */ + +/*@} end of CMSIS_Core_RegAccFunctions */ + +#endif /* __CMSIS_GCC_M_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h new file mode 100644 index 000000000000..cfc6f8083653 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h @@ -0,0 +1,1043 @@ +/* + * Copyright (c) 2017-2021 IAR Systems + * Copyright (c) 2017-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) Compiler ICCARM (IAR Compiler for Arm) Header File + */ + +#ifndef __CMSIS_ICCARM_M_H__ +#define __CMSIS_ICCARM_M_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + + +/* Define compiler macros for CPU architecture, used in CMSIS 5. + */ +#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ || __ARM_ARCH_8_1M_MAIN__ +/* Macros already defined */ +#else + #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' + #if __ARM_ARCH == 6 + #define __ARM_ARCH_6M__ 1 + #elif __ARM_ARCH == 7 + #if __ARM_FEATURE_DSP + #define __ARM_ARCH_7EM__ 1 + #else + #define __ARM_ARCH_7M__ 1 + #endif + #elif __ARM_ARCH == 801 + #define __ARM_ARCH_8_1M_MAIN__ 1 + #endif /* __ARM_ARCH */ + #endif /* __ARM_ARCH_PROFILE == 'M' */ +#endif + +/* Alternativ core deduction for older ICCARM's */ +#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ + !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) && !defined(__ARM_ARCH_8_1M_MAIN__) + #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) + #define __ARM_ARCH_6M__ 1 + #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) + #define __ARM_ARCH_7M__ 1 + #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) + #define __ARM_ARCH_7EM__ 1 + #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' && __ARM_ARCH == 801 + #define __ARM_ARCH_8_1M_MAIN__ 1 + #else + #error "Unknown target." + #endif +#endif + + + +#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 + #define __IAR_M0_FAMILY 1 +#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 + #define __IAR_M0_FAMILY 1 +#else + #define __IAR_M0_FAMILY 0 +#endif + +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#endif + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if defined(__cplusplus) && __cplusplus >= 201103L + #define __NO_RETURN [[noreturn]] + #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define __NO_RETURN _Noreturn + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #if __ICCARM_V8 + #define __RESTRICT __restrict + #else + /* Needs IAR language extensions */ + #define __RESTRICT restrict + #endif +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef __UNALIGNED_UINT16_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint16_t __iar_uint16_read(void const *ptr) +{ + return *(__packed uint16_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) +{ + *(__packed uint16_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint32_t __iar_uint32_read(void const *ptr) +{ + return *(__packed uint32_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) +{ + *(__packed uint32_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32 /* deprecated */ +#pragma language=save +#pragma language=extended +__packed struct __iar_u32 { uint32_t v; }; +#pragma language=restore +#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#undef __WEAK /* undo the definition from DLib_Defaults.h */ +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + +#ifndef __PROGRAM_START +#define __PROGRAM_START __iar_program_start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP CSTACK$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT CSTACK$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __vector_table +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE @".intvec" +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL STACKSEAL$$Base +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + +#ifndef __ICCARM_INTRINSICS_VERSION__ + #define __ICCARM_INTRINSICS_VERSION__ 0 +#endif + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + + #if (defined(__ARM_ARCH_ISA_THUMB) && __ARM_ARCH_ISA_THUMB >= 2) + __IAR_FT void __disable_fault_irq() + { + __ASM volatile ("CPSID F" ::: "memory"); + } + + __IAR_FT void __enable_fault_irq() + { + __ASM volatile ("CPSIE F" ::: "memory"); + } + #endif + + + #define __get_APSR() (__arm_rsr("APSR")) + #define __get_BASEPRI() (__arm_rsr("BASEPRI")) + #define __get_CONTROL() (__arm_rsr("CONTROL")) + #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) + + #if (defined (__ARM_FP) && (__ARM_FP >= 1)) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + #else + #define __get_FPSCR() ( 0 ) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #define __get_IPSR() (__arm_rsr("IPSR")) + #define __get_MSP() (__arm_rsr("MSP")) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __get_MSPLIM() (0U) + #else + #define __get_MSPLIM() (__arm_rsr("MSPLIM")) + #endif + #define __get_PRIMASK() (__arm_rsr("PRIMASK")) + #define __get_PSP() (__arm_rsr("PSP")) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __get_PSPLIM() (0U) + #else + #define __get_PSPLIM() (__arm_rsr("PSPLIM")) + #endif + + #define __get_xPSR() (__arm_rsr("xPSR")) + + #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) + #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) + +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __arm_wsr("CONTROL", control); + __iar_builtin_ISB(); +} + + #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) + #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __set_MSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) + #endif + #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) + #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __set_PSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) + #endif + + #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) + +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __arm_wsr("CONTROL_NS", control); + __iar_builtin_ISB(); +} + + #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) + #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) + #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) + #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) + #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) + #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) + #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) + #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) + #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) + #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) + #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) + #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __TZ_get_PSPLIM_NS() (0U) + #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) + #else + #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) + #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) + #endif + + #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) + #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + + /* + * __iar_builtin_CLREX can be reordered w.r.t. STREX during high optimizations. + * As a workaround we use inline assembly and a memory barrier. + * (IAR issue EWARM-11901) + */ + #define __CLREX() (__ASM volatile ("CLREX" ::: "memory")) + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #if !__IAR_M0_FAMILY + #define __SSAT __iar_builtin_SSAT + #endif + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #if !__IAR_M0_FAMILY + #define __USAT __iar_builtin_USAT + #endif + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #if __ARM_MEDIA__ + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + #endif + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #define __CLZ __cmsis_iar_clz_not_active + #define __SSAT __cmsis_iar_ssat_not_active + #define __USAT __cmsis_iar_usat_not_active + #define __RBIT __cmsis_iar_rbit_not_active + #define __get_APSR __cmsis_iar_get_APSR_not_active + #endif + + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #define __set_FPSCR __cmsis_iar_set_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #undef __CLZ + #undef __SSAT + #undef __USAT + #undef __RBIT + #undef __get_APSR + + __STATIC_INLINE uint8_t __CLZ(uint32_t data) + { + if (data == 0U) { return 32U; } + + uint32_t count = 0U; + uint32_t mask = 0x80000000U; + + while ((data & mask) == 0U) + { + count += 1U; + mask = mask >> 1U; + } + return count; + } + + __STATIC_INLINE uint32_t __RBIT(uint32_t v) + { + uint8_t sc = 31U; + uint32_t r = v; + for (v >>= 1U; v; v >>= 1U) + { + r <<= 1U; + r |= v & 1U; + sc--; + } + return (r << sc); + } + + __STATIC_INLINE uint32_t __get_APSR(void) + { + uint32_t res; + __asm("MRS %0,APSR" : "=r" (res)); + return res; + } + + #endif + + #if (!(defined (__ARM_FP) && (__ARM_FP >= 1))) + #undef __get_FPSCR + #undef __set_FPSCR + #define __get_FPSCR() (0) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + #endif + + + /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + #if (__CORTEX_M >= 0x03) + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM volatile("RRX %0, %1" : "=r"(result) : "r" (value)); + return(result); + } + + __IAR_FT void __set_BASEPRI_MAX(uint32_t value) + { + __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); + } + + __IAR_FT void __disable_fault_irq() + { + __ASM volatile ("CPSID F" ::: "memory"); + } + + __IAR_FT void __enable_fault_irq() + { + __ASM volatile ("CPSIE F" ::: "memory"); + } + + + #endif /* (__CORTEX_M >= 0x03) */ + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + __IAR_FT uint32_t __get_MSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extension and secure, there is no stack limit check. + res = 0U; + #else + __asm volatile("MRS %0,MSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_MSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions and secure, there is no stack limit check. + (void)value; + #else + __asm volatile("MSR MSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __get_PSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions and secure, there is no stack limit check. + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_PSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions and secure, there is no stack limit check. + (void)value; + #else + __asm volatile("MSR PSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) + { + __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); + __iar_builtin_ISB(); + } + + __IAR_FT uint32_t __TZ_get_PSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PSP_NS(uint32_t value) + { + __asm volatile("MSR PSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_MSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSP_NS(uint32_t value) + { + __asm volatile("MSR MSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_SP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,SP_NS" : "=r" (res)); + return res; + } + __IAR_FT void __TZ_set_SP_NS(uint32_t value) + { + __asm volatile("MSR SP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) + { + __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) + { + __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) + { + __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + !(defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) + { + __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); + } + + #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ or __ARM_ARCH_8_1M_MAIN__ */ + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + +#if __IAR_M0_FAMILY + __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) + { + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; + } + + __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) + { + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; + } +#endif + +#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + + __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) + { + uint32_t res; + __ASM volatile ("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) + { + uint32_t res; + __ASM volatile ("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) + { + uint32_t res; + __ASM volatile ("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return res; + } + + __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) + { + __ASM volatile ("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) + { + __ASM volatile ("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) + { + __ASM volatile ("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); + } + +#endif /* (__CORTEX_M >= 0x03) */ + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + + __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) + { + __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) + { + __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) + { + __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXB %0, %2, [%1]" : "=&r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXH %0, %2, [%1]" : "=&r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEX %0, %2, [%1]" : "=&r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + +#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#undef __IAR_FT +#undef __IAR_M0_FAMILY +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +#endif /* __CMSIS_ICCARM_M_H__ */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h new file mode 100644 index 000000000000..5b193a17a5dc --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h @@ -0,0 +1,1451 @@ +/* + * Copyright (c) 2023-2024 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) Compiler TIARMClang Header File + */ + +#ifndef __CMSIS_TIARMCLANG_M_H +#define __CMSIS_TIARMCLANG_M_H + +#pragma clang system_header /* treat file as system include file */ + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#endif + +/* ######################### Startup and Lowlevel Init ######################## */ +#ifndef __PROGRAM_START +#define __PROGRAM_START _c_int00 +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP __STACK_END +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT __STACK_SIZE +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".intvecs"))) +#endif + +#if (__ARM_FEATURE_CMSE == 3) +#ifndef __STACK_SEAL +#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __nop() + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __wfi() + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE() __wfe() + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __sev() + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV(value) __rev(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16(value) __rev16(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REVSH(value) __revsh(value) + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +#define __ROR(op1, op2) __ror(op1, op2) + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT(value) __rbit(value) + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ(value) __clz(value) + + +/* __ARM_FEATURE_SAT is wrong for for Armv8-M Baseline devices */ +#if ((__ARM_FEATURE_SAT >= 1) && \ + (__ARM_ARCH_ISA_THUMB >= 2) ) +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(value, sat) __ssat(value, sat) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(value, sat) __usat(value, sat) + +#else /* (__ARM_FEATURE_SAT >= 1) */ +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return (max); + } + else if (val < min) + { + return (min); + } + } + return (val); +} + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return (max); + } + else if (val < 0) + { + return (0U); + } + } + return ((uint32_t)val); +} +#endif /* (__ARM_FEATURE_SAT >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 1) +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 2) +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 2) */ + + +#if (__ARM_FEATURE_LDREX >= 4) +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 4) */ + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : "=r" (result) : "r" (value)); + return (result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return (result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* (__ARM_ARCH >= 8) */ + +/** @}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} +#endif + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} +#endif + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return (result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return (result); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return (result); +#endif +} + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return (result); +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure PSPLIM is RAZ/WI */ + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return (result); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return (result); +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__ARM_FEATURE_CMSE < 3) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (__ARM_FEATURE_CMSE == 3) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) + /* without main extensions, the non-secure MSPLIM is RAZ/WI */ + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* (__ARM_ARCH >= 8) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + return (__builtin_arm_get_fpscr()); +#else + return (0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + __builtin_arm_set_fpscr(fpscr); +#else + (void)fpscr; +#endif +} + + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (__ARM_FEATURE_DSP == 1) +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/** @} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_TIARMCLANG_M_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h new file mode 100644 index 000000000000..fd9f0e9a16f6 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h @@ -0,0 +1,161 @@ +/**************************************************************************//** + * @file cmsis_armclang_r.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V6.0.0 + * @date 04. December 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_ARMCLANG_R_H +#define __CMSIS_ARMCLANG_R_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_ARMCLANG_H + #error "This file must not be included directly" +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : : "memory" + ); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack) : "memory" + ); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#endif /* __CMSIS_ARMCLANG_R_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h new file mode 100644 index 000000000000..f27eef08f6cf --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h @@ -0,0 +1,161 @@ +/**************************************************************************//** + * @file cmsis_clang_r.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V6.0.0 + * @date 04. December 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_CLANG_CORER_H +#define __CMSIS_CLANG_CORER_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_CLANG_H + #error "This file must not be included directly" +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : : "memory" + ); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack) : "memory" + ); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#endif /* __CMSIS_CLANG_COREA_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h new file mode 100644 index 000000000000..be2117c953e3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h @@ -0,0 +1,163 @@ +/**************************************************************************//** + * @file cmsis_gcc_r.h + * @brief CMSIS compiler GCC header file + * @version V6.0.0 + * @date 4. August 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_GCC_R_H +#define __CMSIS_GCC_R_H + +#ifndef __CMSIS_GCC_H + #error "This file must not be included directly" +#endif + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + + +/** \defgroup CMSIS_Core_intrinsics CMSIS Core Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr = __get_CPSR(); + uint32_t result; + __ASM volatile( + "CPS #0x1F \n" + "MOV %0, sp " : "=r"(result) : : "memory" + ); + __set_CPSR(cpsr); + __ISB(); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr = __get_CPSR(); + __ASM volatile( + "CPS #0x1F \n" + "MOV sp, %0 " : : "r" (topOfProcStack) : "memory" + ); + __set_CPSR(cpsr); + __ISB(); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +/*@} end of group CMSIS_Core_intrinsics */ + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_R_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h new file mode 100644 index 000000000000..e095956a8cb3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2017-2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS Core(M) Context Management for Armv8-M TrustZone + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef TZ_CONTEXT_H +#define TZ_CONTEXT_H + +#include + +#ifndef TZ_MODULEID_T +#define TZ_MODULEID_T +/// \details Data type that identifies secure software modules called by a process. +typedef uint32_t TZ_ModuleId_t; +#endif + +/// \details TZ Memory ID identifies an allocated memory slot. +typedef uint32_t TZ_MemoryId_t; + +/// Initialize secure context memory system +/// \return execution status (1: success, 0: error) +uint32_t TZ_InitContextSystem_S (void); + +/// Allocate context memory for calling secure software modules in TrustZone +/// \param[in] module identifies software modules called from non-secure mode +/// \return value != 0 id TrustZone memory slot identifier +/// \return value 0 no memory available or internal error +TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module); + +/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id); + +/// Load secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_LoadContext_S (TZ_MemoryId_t id); + +/// Store secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_StoreContext_S (TZ_MemoryId_t id); + +#endif // TZ_CONTEXT_H diff --git a/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/LICENSE b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/LICENSE new file mode 100644 index 000000000000..8dada3edaf50 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/arm/CMSIS_6/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board.h b/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board.h new file mode 100644 index 000000000000..808fbe3c8d7a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board.h @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup BOARDS + * @defgroup BOARD_RRQ61XXX_EVB BSP for the RRQ61XXX EVB + * @brief BSP for the RRQ61XXX EVB + * + * The RRQ61XXX_EVB is a development kit for the Renesas RRQ61XXX EVB. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_H +#define BOARD_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP Board Specific Includes. */ +#ifndef __ASSEMBLER__ + #include "board_init.h" + #include "board_leds.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BOARD_RRQ61XXX_EVB + +#define __IOM volatile + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** @} (end defgroup BOARD_RRQ61XXX_EVB) */ + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_init.h b/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_init.h new file mode 100644 index 000000000000..e1f326311da2 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_init.h @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RRQ61XXX_EVB + * @defgroup BOARD_RRQ61XXX_EVB_INIT + * @brief Board specific code for the RRQ61XXX EVB + * + * This include file is specific to the RRQ61XXX EVB. + * + * @{ + **********************************************************************************************************************/ + +#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 t + * his file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RRQ61XXX_EVB_INIT) */ diff --git a/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_leds.c b/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_leds.c new file mode 100644 index 000000000000..1351b5fdacac --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_leds.c @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RRQ61XXX_EVB_LEDS + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#if defined(BOARD_RRQ61XXX_EVB) + #include "bsp_pin_cfg.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/** Array of LED GPIO pins. + * @note In this board any GPIO can be used as an LED. For enabling an LED, a jumper wire must be connected + * between a GPIO and one of the pins of J611. Then, through the Pin Configurator of E2S, the + * BSP_GPIO_LED_ 'Symbolic Name' must be assigned to the corresponding GPIO. + */ +static const uint16_t g_bsp_prv_leds[] = +{ + #if defined(BSP_GPIO_LED_0) + (uint16_t) BSP_GPIO_LED_0, ///< LED0 + #endif + #if defined(BSP_GPIO_LED_1) + (uint16_t) BSP_GPIO_LED_1, ///< LED1 + #endif + #if defined(BSP_GPIO_LED_2) + (uint16_t) BSP_GPIO_LED_2, ///< LED2 + #endif + #if defined(BSP_GPIO_LED_3) + (uint16_t) BSP_GPIO_LED_3, ///< LED3 + #endif +}; + +/*********************************************************************************************************************** + * 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) FSP_ARRAY_LENGTH(g_bsp_prv_leds), + .p_leds = &g_bsp_prv_leds[0] +}; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +#endif + +/** @} (end addtogroup BOARD_RRQ61XXX_EVB_LEDS) */ diff --git a/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_leds.h b/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_leds.h new file mode 100644 index 000000000000..52b4653cd8ac --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/board/rrq61xxx_evb/board_leds.h @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RRQ61XXX_EVB + * @defgroup BOARD_RRQ61XXX_EVB_LEDS Board LEDs + * @brief LED information for this board. + * + * This is code specific to the RRQ61XXX EVB. It includes info on the number of LEDs and which pins 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_LED0 = 0, ///< LED0 + BSP_LED_LED1 = 1, ///< LED1 + BSP_LED_LED2 = 2, ///< LED2 + BSP_LED_LED3 = 3, ///< LED3 +} 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 t + * his file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RRQ61XXX_EVB_LEDS) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/bsp_api.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/bsp_api.h new file mode 100644 index 000000000000..961ee4a3c8f8 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/bsp_api.h @@ -0,0 +1,101 @@ +/* +* Copyright (c) 2020 - 2026 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/ra6w1-ek/ra/fsp/inc/api/fsp_common_api.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/fsp_common_api.h new file mode 100644 index 000000000000..7b0486c078b9 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/fsp_common_api.h @@ -0,0 +1,384 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef FSP_COMMON_API_H +#define FSP_COMMON_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include +#include + +/* Includes FSP version macros. */ +#include "fsp_version.h" + +/*******************************************************************************************************************//** + * @ingroup RENESAS_COMMON + * @defgroup RENESAS_ERROR_CODES Common Error Codes + * All FSP modules share these common error codes. + * @{ + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** This macro is used to suppress compiler messages about a parameter not being used in a function. The nice thing + * about using this implementation is that it does not take any extra RAM or ROM. */ + +#define FSP_PARAMETER_NOT_USED(p) (void) ((p)) + +/** Determine if a C++ compiler is being used. + * If so, ensure that standard C is used to process the API information. */ +#if defined(__cplusplus) + #define FSP_CPP_HEADER extern "C" { + #define FSP_CPP_FOOTER } +#else + #define FSP_CPP_HEADER + #define FSP_CPP_FOOTER +#endif + +/** FSP Header and Footer definitions */ +#define FSP_HEADER FSP_CPP_HEADER +#define FSP_FOOTER FSP_CPP_FOOTER + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/** Macro to be used when argument to function is ignored since function call is NSC and the parameter is statically + * defined on the Secure side. */ +#define FSP_SECURE_ARGUMENT (NULL) + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Common error codes */ +typedef enum e_fsp_err +{ + FSP_SUCCESS = 0, + + FSP_ERR_ASSERTION = 1, ///< A critical assertion has failed + FSP_ERR_INVALID_POINTER = 2, ///< Pointer points to invalid memory location + FSP_ERR_INVALID_ARGUMENT = 3, ///< Invalid input parameter + FSP_ERR_INVALID_CHANNEL = 4, ///< Selected channel does not exist + FSP_ERR_INVALID_MODE = 5, ///< Unsupported or incorrect mode + FSP_ERR_UNSUPPORTED = 6, ///< Selected mode not supported by this API + FSP_ERR_NOT_OPEN = 7, ///< Requested channel is not configured or API not open + FSP_ERR_IN_USE = 8, ///< Channel/peripheral is running/busy + FSP_ERR_OUT_OF_MEMORY = 9, ///< Allocate more memory in the driver's cfg.h + FSP_ERR_HW_LOCKED = 10, ///< Hardware is locked + FSP_ERR_IRQ_BSP_DISABLED = 11, ///< IRQ not enabled in BSP + FSP_ERR_OVERFLOW = 12, ///< Hardware overflow + FSP_ERR_UNDERFLOW = 13, ///< Hardware underflow + FSP_ERR_ALREADY_OPEN = 14, ///< Requested channel is already open in a different configuration + FSP_ERR_APPROXIMATION = 15, ///< Could not set value to exact result + FSP_ERR_CLAMPED = 16, ///< Value had to be limited for some reason + FSP_ERR_INVALID_RATE = 17, ///< Selected rate could not be met + FSP_ERR_ABORTED = 18, ///< An operation was aborted + FSP_ERR_NOT_ENABLED = 19, ///< Requested operation is not enabled + FSP_ERR_TIMEOUT = 20, ///< Timeout error + FSP_ERR_INVALID_BLOCKS = 21, ///< Invalid number of blocks supplied + FSP_ERR_INVALID_ADDRESS = 22, ///< Invalid address supplied + FSP_ERR_INVALID_SIZE = 23, ///< Invalid size/length supplied for operation + FSP_ERR_WRITE_FAILED = 24, ///< Write operation failed + FSP_ERR_ERASE_FAILED = 25, ///< Erase operation failed + FSP_ERR_INVALID_CALL = 26, ///< Invalid function call is made + FSP_ERR_INVALID_HW_CONDITION = 27, ///< Detected hardware is in invalid condition + FSP_ERR_INVALID_FACTORY_FLASH = 28, ///< Factory flash is not available on this MCU + FSP_ERR_INVALID_STATE = 30, ///< API or command not valid in the current state + FSP_ERR_NOT_ERASED = 31, ///< Erase verification failed + FSP_ERR_SECTOR_RELEASE_FAILED = 32, ///< Sector release failed + FSP_ERR_NOT_INITIALIZED = 33, ///< Required initialization not complete + FSP_ERR_NOT_FOUND = 34, ///< The requested item could not be found + FSP_ERR_NO_CALLBACK_MEMORY = 35, ///< Non-secure callback memory not provided for non-secure callback + FSP_ERR_BUFFER_EMPTY = 36, ///< No data available in buffer + FSP_ERR_INVALID_DATA = 37, ///< Accuracy of data is not guaranteed + + /* Start of RTOS only error codes */ + FSP_ERR_INTERNAL = 100, ///< Internal error + FSP_ERR_WAIT_ABORTED = 101, ///< Wait aborted + + /* Start of UART specific */ + FSP_ERR_FRAMING = 200, ///< Framing error occurs + FSP_ERR_BREAK_DETECT = 201, ///< Break signal detects + FSP_ERR_PARITY = 202, ///< Parity error occurs + FSP_ERR_RXBUF_OVERFLOW = 203, ///< Receive queue overflow + FSP_ERR_QUEUE_UNAVAILABLE = 204, ///< Can't open s/w queue + FSP_ERR_INSUFFICIENT_SPACE = 205, ///< Not enough space in transmission circular buffer + FSP_ERR_INSUFFICIENT_DATA = 206, ///< Not enough data in receive circular buffer + + /* Start of SPI specific */ + FSP_ERR_TRANSFER_ABORTED = 300, ///< The data transfer was aborted. + FSP_ERR_MODE_FAULT = 301, ///< Mode fault error. + FSP_ERR_READ_OVERFLOW = 302, ///< Read overflow. + FSP_ERR_SPI_PARITY = 303, ///< Parity error. + FSP_ERR_OVERRUN = 304, ///< Overrun error. + + /* Start of CGC Specific */ + FSP_ERR_CLOCK_INACTIVE = 400, ///< Inactive clock specified as system clock. + FSP_ERR_CLOCK_ACTIVE = 401, ///< Active clock source cannot be modified without stopping first. + FSP_ERR_NOT_STABILIZED = 403, ///< Clock has not stabilized after its been turned on/off + FSP_ERR_PLL_SRC_INACTIVE = 404, ///< PLL initialization attempted when PLL source is turned off + FSP_ERR_OSC_STOP_DET_ENABLED = 405, ///< Illegal attempt to stop LOCO when Oscillation stop is enabled + FSP_ERR_OSC_STOP_DETECTED = 406, ///< The Oscillation stop detection status flag is set + FSP_ERR_OSC_STOP_CLOCK_ACTIVE = 407, ///< Attempt to clear Oscillation Stop Detect Status with PLL/MAIN_OSC active + FSP_ERR_CLKOUT_EXCEEDED = 408, ///< Output on target output clock pin exceeds maximum supported limit + FSP_ERR_USB_MODULE_ENABLED = 409, ///< USB clock configure request with USB Module enabled + FSP_ERR_HARDWARE_TIMEOUT = 410, ///< A register read or write timed out + FSP_ERR_LOW_VOLTAGE_MODE = 411, ///< Invalid clock setting attempted in low voltage mode + + /* Start of FLASH Specific */ + FSP_ERR_PE_FAILURE = 500, ///< Unable to enter Programming mode. + FSP_ERR_CMD_LOCKED = 501, ///< Peripheral in command locked state + FSP_ERR_FCLK = 502, ///< FCLK must be >= 4 MHz + FSP_ERR_INVALID_LINKED_ADDRESS = 503, ///< Function or data are linked at an invalid region of memory + FSP_ERR_BLANK_CHECK_FAILED = 504, ///< Blank check operation failed + FSP_ERR_HUK_ZEROIZATION = 505, ///< W-HUK zeroization is in progress + + /* Start of CAC Specific */ + FSP_ERR_INVALID_CAC_REF_CLOCK = 600, ///< Measured clock rate < reference clock rate + + /* Start of IIRFA Specific */ + FSP_ERR_INVALID_RESULT = 700, ///< The result of one or more calculations was +/- infinity. + + /* Start of GLCD Specific */ + FSP_ERR_CLOCK_GENERATION = 1000, ///< Clock cannot be specified as system clock + FSP_ERR_INVALID_TIMING_SETTING = 1001, ///< Invalid timing parameter + FSP_ERR_INVALID_LAYER_SETTING = 1002, ///< Invalid layer parameter + FSP_ERR_INVALID_ALIGNMENT = 1003, ///< Invalid memory alignment found + FSP_ERR_INVALID_GAMMA_SETTING = 1004, ///< Invalid gamma correction parameter + FSP_ERR_INVALID_LAYER_FORMAT = 1005, ///< Invalid color format in layer + FSP_ERR_INVALID_UPDATE_TIMING = 1006, ///< Invalid timing for register update + FSP_ERR_INVALID_CLUT_ACCESS = 1007, ///< Invalid access to CLUT entry + FSP_ERR_INVALID_FADE_SETTING = 1008, ///< Invalid fade-in/fade-out setting + FSP_ERR_INVALID_BRIGHTNESS_SETTING = 1009, ///< Invalid gamma correction parameter + + /* Start of JPEG Specific */ + FSP_ERR_JPEG_ERR = 1100, ///< JPEG error + FSP_ERR_JPEG_SOI_NOT_DETECTED = 1101, ///< SOI not detected until EOI detected. + FSP_ERR_JPEG_SOF1_TO_SOFF_DETECTED = 1102, ///< SOF1 to SOFF detected. + FSP_ERR_JPEG_UNSUPPORTED_PIXEL_FORMAT = 1103, ///< Unprovided pixel format detected. + FSP_ERR_JPEG_SOF_ACCURACY_ERROR = 1104, ///< SOF accuracy error: other than 8 detected. + FSP_ERR_JPEG_DQT_ACCURACY_ERROR = 1105, ///< DQT accuracy error: other than 0 detected. + FSP_ERR_JPEG_COMPONENT_ERROR1 = 1106, ///< Component error 1: the number of SOF0 header components detected is other than 1, 3, or 4. + FSP_ERR_JPEG_COMPONENT_ERROR2 = 1107, ///< Component error 2: the number of components differs between SOF0 header and SOS. + FSP_ERR_JPEG_SOF0_DQT_DHT_NOT_DETECTED = 1108, ///< SOF0, DQT, and DHT not detected when SOS detected. + FSP_ERR_JPEG_SOS_NOT_DETECTED = 1109, ///< SOS not detected: SOS not detected until EOI detected. + FSP_ERR_JPEG_EOI_NOT_DETECTED = 1110, ///< EOI not detected (default) + FSP_ERR_JPEG_RESTART_INTERVAL_DATA_NUMBER_ERROR = 1111, ///< Restart interval data number error detected. + FSP_ERR_JPEG_IMAGE_SIZE_ERROR = 1112, ///< Image size error detected. + FSP_ERR_JPEG_LAST_MCU_DATA_NUMBER_ERROR = 1113, ///< Last MCU data number error detected. + FSP_ERR_JPEG_BLOCK_DATA_NUMBER_ERROR = 1114, ///< Block data number error detected. + FSP_ERR_JPEG_BUFFERSIZE_NOT_ENOUGH = 1115, ///< User provided buffer size not enough + FSP_ERR_JPEG_UNSUPPORTED_IMAGE_SIZE = 1116, ///< JPEG Image size is not aligned with MCU + + /* Start of touch panel framework specific */ + FSP_ERR_CALIBRATE_FAILED = 1200, ///< Calibration failed + + /* Start of IIRFA specific */ + FSP_ERR_IIRFA_ECC_1BIT = 1300, ///< 1-bit ECC error detected + FSP_ERR_IIRFA_ECC_2BIT = 1301, ///< 2-bit ECC error detected + + /* Start of IP specific */ + FSP_ERR_IP_HARDWARE_NOT_PRESENT = 1400, ///< Requested IP does not exist on this device + FSP_ERR_IP_UNIT_NOT_PRESENT = 1401, ///< Requested unit does not exist on this device + FSP_ERR_IP_CHANNEL_NOT_PRESENT = 1402, ///< Requested channel does not exist on this device + + /* Start of USB specific */ + FSP_ERR_USB_FAILED = 1500, + FSP_ERR_USB_BUSY = 1501, + FSP_ERR_USB_SIZE_SHORT = 1502, + FSP_ERR_USB_SIZE_OVER = 1503, + FSP_ERR_USB_NOT_OPEN = 1504, + FSP_ERR_USB_NOT_SUSPEND = 1505, + FSP_ERR_USB_PARAMETER = 1506, + + /* Start of Message framework specific */ + FSP_ERR_NO_MORE_BUFFER = 2000, ///< No more buffer found in the memory block pool + FSP_ERR_ILLEGAL_BUFFER_ADDRESS = 2001, ///< Buffer address is out of block memory pool + FSP_ERR_INVALID_WORKBUFFER_SIZE = 2002, ///< Work buffer size is invalid + FSP_ERR_INVALID_MSG_BUFFER_SIZE = 2003, ///< Message buffer size is invalid + FSP_ERR_TOO_MANY_BUFFERS = 2004, ///< Number of buffer is too many + FSP_ERR_NO_SUBSCRIBER_FOUND = 2005, ///< No message subscriber found + FSP_ERR_MESSAGE_QUEUE_EMPTY = 2006, ///< No message found in the message queue + FSP_ERR_MESSAGE_QUEUE_FULL = 2007, ///< No room for new message in the message queue + FSP_ERR_ILLEGAL_SUBSCRIBER_LISTS = 2008, ///< Message subscriber lists is illegal + FSP_ERR_BUFFER_RELEASED = 2009, ///< Buffer has been released + + /* Start of 2DG Driver specific */ + FSP_ERR_D2D_ERROR_INIT = 3000, ///< D/AVE 2D has an error in the initialization + FSP_ERR_D2D_ERROR_DEINIT = 3001, ///< D/AVE 2D has an error in the initialization + FSP_ERR_D2D_ERROR_RENDERING = 3002, ///< D/AVE 2D has an error in the rendering + FSP_ERR_D2D_ERROR_SIZE = 3003, ///< D/AVE 2D has an error in the rendering + + /* Start of ETHER Driver specific */ + FSP_ERR_ETHER_ERROR_NO_DATA = 4000, ///< No Data in Receive buffer. + FSP_ERR_ETHER_ERROR_LINK = 4001, ///< ETHERC/EDMAC has an error in the Auto-negotiation + FSP_ERR_ETHER_ERROR_MAGIC_PACKET_MODE = 4002, ///< As a Magic Packet is being detected, and transmission/reception is not enabled + FSP_ERR_ETHER_ERROR_TRANSMIT_BUFFER_FULL = 4003, ///< Transmit buffer is not empty + FSP_ERR_ETHER_ERROR_FILTERING = 4004, ///< Detect multicast frame when multicast frame filtering enable + FSP_ERR_ETHER_ERROR_PHY_COMMUNICATION = 4005, ///< ETHERC/EDMAC has an error in the phy communication + FSP_ERR_ETHER_RECEIVE_BUFFER_ACTIVE = 4006, ///< Receive buffer is active. + + /* Start of ETHER_PHY Driver specific */ + FSP_ERR_ETHER_PHY_ERROR_LINK = 5000, ///< PHY is not link up. + FSP_ERR_ETHER_PHY_NOT_READY = 5001, ///< PHY has an error in the Auto-negotiation + + /* Start of BYTEQ library specific */ + FSP_ERR_QUEUE_FULL = 10000, ///< Queue is full, cannot queue another data + FSP_ERR_QUEUE_EMPTY = 10001, ///< Queue is empty, no data to dequeue + + /* Start of CTSU Driver specific */ + FSP_ERR_CTSU_SCANNING = 6000, ///< Scanning. + FSP_ERR_CTSU_NOT_GET_DATA = 6001, ///< Not processed previous scan data. + FSP_ERR_CTSU_INCOMPLETE_TUNING = 6002, ///< Incomplete initial offset tuning. + FSP_ERR_CTSU_DIAG_NOT_YET = 6003, ///< Diagnosis of data collected no yet. + FSP_ERR_CTSU_DIAG_LDO_OVER_VOLTAGE = 6004, ///< Diagnosis of LDO over voltage failed. + FSP_ERR_CTSU_DIAG_CCO_HIGH = 6005, ///< Diagnosis of CCO into 19.2uA failed. + FSP_ERR_CTSU_DIAG_CCO_LOW = 6006, ///< Diagnosis of CCO into 2.4uA failed. + FSP_ERR_CTSU_DIAG_SSCG = 6007, ///< Diagnosis of SSCG frequency failed. + FSP_ERR_CTSU_DIAG_DAC = 6008, ///< Diagnosis of non-touch count value failed. + FSP_ERR_CTSU_DIAG_OUTPUT_VOLTAGE = 6009, ///< Diagnosis of LDO output voltage failed. + FSP_ERR_CTSU_DIAG_OVER_VOLTAGE = 6010, ///< Diagnosis of over voltage detection circuit failed. + FSP_ERR_CTSU_DIAG_OVER_CURRENT = 6011, ///< Diagnosis of over current detection circuit failed. + FSP_ERR_CTSU_DIAG_LOAD_RESISTANCE = 6012, ///< Diagnosis of LDO internal resistance value failed. + FSP_ERR_CTSU_DIAG_CURRENT_SOURCE = 6013, ///< Diagnosis of Current source value failed. + FSP_ERR_CTSU_DIAG_SENSCLK_GAIN = 6014, ///< Diagnosis of SENSCLK frequency gain failed. + FSP_ERR_CTSU_DIAG_SUCLK_GAIN = 6015, ///< Diagnosis of SUCLK frequency gain failed. + FSP_ERR_CTSU_DIAG_CLOCK_RECOVERY = 6016, ///< Diagnosis of SUCLK clock recovery function failed. + FSP_ERR_CTSU_DIAG_CFC_GAIN = 6017, ///< Diagnosis of CFC oscillator gain failed. + + /* Start of SDMMC specific */ + FSP_ERR_CARD_INIT_FAILED = 40000, ///< SD card or eMMC device failed to initialize. + FSP_ERR_CARD_NOT_INSERTED = 40001, ///< SD card not installed. + FSP_ERR_DEVICE_BUSY = 40002, ///< Device is holding DAT0 low or another operation is ongoing. + FSP_ERR_CARD_NOT_INITIALIZED = 40004, ///< SD card was removed. + FSP_ERR_CARD_WRITE_PROTECTED = 40005, ///< Media is write protected. + FSP_ERR_TRANSFER_BUSY = 40006, ///< Transfer in progress. + FSP_ERR_RESPONSE = 40007, ///< Card did not respond or responded with an error. + + /* Start of FX_IO specific */ + FSP_ERR_MEDIA_FORMAT_FAILED = 50000, ///< Media format failed. + FSP_ERR_MEDIA_OPEN_FAILED = 50001, ///< Media open failed. + + /* Start of CAN specific */ + FSP_ERR_CAN_DATA_UNAVAILABLE = 60000, ///< No data available. + FSP_ERR_CAN_MODE_SWITCH_FAILED = 60001, ///< Switching operation modes failed. + FSP_ERR_CAN_INIT_FAILED = 60002, ///< Hardware initialization failed. + FSP_ERR_CAN_TRANSMIT_NOT_READY = 60003, ///< Transmit in progress. + FSP_ERR_CAN_RECEIVE_MAILBOX = 60004, ///< Mailbox is setup as a receive mailbox. + FSP_ERR_CAN_TRANSMIT_MAILBOX = 60005, ///< Mailbox is setup as a transmit mailbox. + FSP_ERR_CAN_MESSAGE_LOST = 60006, ///< Receive message has been overwritten or overrun. + FSP_ERR_CAN_TRANSMIT_FIFO_FULL = 60007, ///< Transmit FIFO is full. + + /* Start of SF_WIFI Specific */ + FSP_ERR_WIFI_CONFIG_FAILED = 70000, ///< WiFi module Configuration failed. + FSP_ERR_WIFI_INIT_FAILED = 70001, ///< WiFi module initialization failed. + FSP_ERR_WIFI_TRANSMIT_FAILED = 70002, ///< Transmission failed + FSP_ERR_WIFI_INVALID_MODE = 70003, ///< API called when provisioned in client mode + FSP_ERR_WIFI_FAILED = 70004, ///< WiFi Failed. + FSP_ERR_WIFI_SCAN_COMPLETE = 70005, ///< Wifi scan has completed. + FSP_ERR_WIFI_AP_NOT_CONNECTED = 70006, ///< WiFi module is not connected to access point + FSP_ERR_WIFI_UNKNOWN_AT_CMD = 70007, ///< DA16XXX Unknown AT command Error + FSP_ERR_WIFI_INSUF_PARAM = 70008, ///< DA16XXX Insufficient parameter + FSP_ERR_WIFI_TOO_MANY_PARAMS = 70009, ///< DA16XXX Too many parameters + FSP_ERR_WIFI_INV_PARAM_VAL = 70010, ///< DA16XXX Wrong parameter value + FSP_ERR_WIFI_NO_RESULT = 70011, ///< DA16XXX No result + FSP_ERR_WIFI_RSP_BUF_OVFLW = 70012, ///< DA16XXX Response buffer overflow + FSP_ERR_WIFI_FUNC_NOT_CONFIG = 70013, ///< DA16XXX Function is not configured + FSP_ERR_WIFI_NVRAM_WR_FAIL = 70014, ///< DA16XXX NVRAM write failure + FSP_ERR_WIFI_RET_MEM_WR_FAIL = 70015, ///< DA16XXX Retention memory write failure + FSP_ERR_WIFI_UNKNOWN_ERR = 70016, ///< DA16XXX unknown error + + /* Start of SF_CELLULAR Specific */ + FSP_ERR_CELLULAR_CONFIG_FAILED = 80000, ///< Cellular module Configuration failed. + FSP_ERR_CELLULAR_INIT_FAILED = 80001, ///< Cellular module initialization failed. + FSP_ERR_CELLULAR_TRANSMIT_FAILED = 80002, ///< Transmission failed + FSP_ERR_CELLULAR_FW_UPTODATE = 80003, ///< Firmware is uptodate + FSP_ERR_CELLULAR_FW_UPGRADE_FAILED = 80004, ///< Firmware upgrade failed + FSP_ERR_CELLULAR_FAILED = 80005, ///< Cellular Failed. + FSP_ERR_CELLULAR_INVALID_STATE = 80006, ///< API Called in invalid state. + FSP_ERR_CELLULAR_REGISTRATION_FAILED = 80007, ///< Cellular Network registration failed + + /* Start of SF_BLE specific */ + FSP_ERR_BLE_FAILED = 90001, ///< BLE operation failed + FSP_ERR_BLE_INIT_FAILED = 90002, ///< BLE device initialization failed + FSP_ERR_BLE_CONFIG_FAILED = 90003, ///< BLE device configuration failed + FSP_ERR_BLE_PRF_ALREADY_ENABLED = 90004, ///< BLE device Profile already enabled + FSP_ERR_BLE_PRF_NOT_ENABLED = 90005, ///< BLE device not enabled + + /* Start of SF_BLE_ABS specific */ + FSP_ERR_BLE_ABS_INVALID_OPERATION = 91001, ///< Invalid operation is executed. + FSP_ERR_BLE_ABS_NOT_FOUND = 91002, ///< Valid data or free space is not found. + + /* Start of Crypto specific (0x10000) @note Refer to sf_cryoto_err.h for Crypto error code. */ + FSP_ERR_CRYPTO_CONTINUE = 0x10000, ///< Continue executing function + FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT = 0x10001, ///< Hardware resource busy + FSP_ERR_CRYPTO_SCE_FAIL = 0x10002, ///< Internal I/O buffer is not empty + FSP_ERR_CRYPTO_SCE_HRK_INVALID_INDEX = 0x10003, ///< Invalid index + FSP_ERR_CRYPTO_SCE_RETRY = 0x10004, ///< Retry + FSP_ERR_CRYPTO_SCE_VERIFY_FAIL = 0x10005, ///< Verify is failed + FSP_ERR_CRYPTO_SCE_ALREADY_OPEN = 0x10006, ///< HW SCE module is already opened + FSP_ERR_CRYPTO_NOT_OPEN = 0x10007, ///< Hardware module is not initialized + FSP_ERR_CRYPTO_UNKNOWN = 0x10008, ///< Some unknown error occurred + FSP_ERR_CRYPTO_NULL_POINTER = 0x10009, ///< Null pointer input as a parameter + FSP_ERR_CRYPTO_NOT_IMPLEMENTED = 0x1000a, ///< Algorithm/size not implemented + FSP_ERR_CRYPTO_RNG_INVALID_PARAM = 0x1000b, ///< An invalid parameter is specified + FSP_ERR_CRYPTO_RNG_FATAL_ERROR = 0x1000c, ///< A fatal error occurred + FSP_ERR_CRYPTO_INVALID_SIZE = 0x1000d, ///< Size specified is invalid + FSP_ERR_CRYPTO_INVALID_STATE = 0x1000e, ///< Function used in an valid state + FSP_ERR_CRYPTO_ALREADY_OPEN = 0x1000f, ///< control block is already opened + FSP_ERR_CRYPTO_INSTALL_KEY_FAILED = 0x10010, ///< Specified input key is invalid. + FSP_ERR_CRYPTO_AUTHENTICATION_FAILED = 0x10011, ///< Authentication failed + FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL = 0x10012, ///< Failure to Init Cipher + FSP_ERR_CRYPTO_SCE_AUTHENTICATION = 0x10013, ///< Authentication failed + FSP_ERR_CRYPTO_SCE_PARAMETER = 0x10014, ///< Input date is illegal. + FSP_ERR_CRYPTO_SCE_PROHIBIT_FUNCTION = 0x10015, ///< An invalid function call occurred. + FSP_ERR_CRYPTO_SCE_PASS_1 = 0x10016, // Private SCE return code + FSP_ERR_CRYPTO_SCE_PASS_2 = 0x10017, // Private SCE return code + + FSP_ERR_CRYPTO_SCE_LBIST_CHECK_BUSY = 0x100ff, ///< LBIST Check BUSY + + /* Start of Crypto RSIP specific (0x10100) */ + FSP_ERR_CRYPTO_RSIP_RESOURCE_CONFLICT = 0x10100, ///< Hardware resource is busy + FSP_ERR_CRYPTO_RSIP_FATAL = 0x10101, ///< Hardware fatal error or unexpected return + FSP_ERR_CRYPTO_RSIP_FAIL = 0x10102, ///< Internal error + FSP_ERR_CRYPTO_RSIP_KEY_SET_FAIL = 0x10103, ///< Input key type is illegal + FSP_ERR_CRYPTO_RSIP_AUTHENTICATION = 0x10104, ///< Authentication failed + FSP_ERR_CRYPTO_RSIP_DLMS_ERROR = 0x10105, ///< An error occurred during DLMS processing + + FSP_ERR_CRYPTO_RSIP_LBIST_CHECK_BUSY = 0x101ff, ///< LBIST Check BUSY + + /* Start of SF_CRYPTO specific */ + FSP_ERR_CRYPTO_COMMON_NOT_OPENED = 0x20000, ///< Crypto Framework Common is not opened + FSP_ERR_CRYPTO_HAL_ERROR = 0x20001, ///< Cryoto HAL module returned an error + FSP_ERR_CRYPTO_KEY_BUF_NOT_ENOUGH = 0x20002, ///< Key buffer size is not enough to generate a key + FSP_ERR_CRYPTO_BUF_OVERFLOW = 0x20003, ///< Attempt to write data larger than what the buffer can hold + FSP_ERR_CRYPTO_INVALID_OPERATION_MODE = 0x20004, ///< Invalid operation mode. + FSP_ERR_MESSAGE_TOO_LONG = 0x20005, ///< Message for RSA encryption is too long. + FSP_ERR_RSA_DECRYPTION_ERROR = 0x20006, ///< RSA Decryption error. + + /* 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/ra6w1-ek/ra/fsp/inc/api/r_external_irq_api.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_external_irq_api.h new file mode 100644 index 000000000000..f8f9bafaeb1d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_external_irq_api.h @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_INPUT_INTERFACES + * @defgroup EXTERNAL_IRQ_API External IRQ Interface + * @brief Interface for detecting external interrupts. + * + * @section EXTERNAL_IRQ_API_Summary Summary + * The External IRQ Interface is for configuring interrupts to fire when a trigger condition is detected on an + * external IRQ pin. + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_EXTERNAL_IRQ_API_H +#define R_EXTERNAL_IRQ_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Includes board and MCU related header files. */ +#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 + *********************************************************************************************************************/ + +/** Callback function parameter data */ +typedef struct st_external_irq_callback_args +{ + /** Placeholder for user data. Set in @ref external_irq_api_t::open function in @ref external_irq_cfg_t. */ + void * p_context; + uint32_t channel; ///< The physical hardware channel that caused the interrupt. +} external_irq_callback_args_t; + +#ifndef BSP_OVERRIDE_EXTERNAL_IRQ_TRIGGER_T + +/** Condition that will trigger an interrupt when detected. */ +typedef enum e_external_irq_trigger +{ + EXTERNAL_IRQ_TRIGGER_FALLING = 0, ///< Falling edge trigger + EXTERNAL_IRQ_TRIGGER_RISING = 1, ///< Rising edge trigger + EXTERNAL_IRQ_TRIGGER_BOTH_EDGE = 2, ///< Both edges trigger + EXTERNAL_IRQ_TRIGGER_LEVEL_LOW = 3, ///< Low level trigger + EXTERNAL_IRQ_TRIGGER_LEVEL_HIGH = 4, ///< High level trigger + EXTERNAL_IRQ_TRIG_FALLING = EXTERNAL_IRQ_TRIGGER_FALLING, ///< DEPRECATED, do not use + EXTERNAL_IRQ_TRIG_RISING = EXTERNAL_IRQ_TRIGGER_RISING, ///< DEPRECATED, do not use + EXTERNAL_IRQ_TRIG_BOTH_EDGE = EXTERNAL_IRQ_TRIGGER_BOTH_EDGE, ///< DEPRECATED, do not use + EXTERNAL_IRQ_TRIG_LEVEL_LOW = EXTERNAL_IRQ_TRIGGER_LEVEL_LOW, ///< DEPRECATED, do not use + EXTERNAL_IRQ_TRIG_LEVEL_HIGH = EXTERNAL_IRQ_TRIGGER_LEVEL_HIGH ///< DEPRECATED, do not use +} external_irq_trigger_t; +#endif + +#ifndef BSP_OVERRIDE_EXTERNAL_IRQ_PCLK_DIV_T + +/** External IRQ input pin digital filtering sample clock divisor settings. The digital filter rejects trigger + * conditions that are shorter than 3 periods of the filter clock. + */ +typedef enum e_external_irq_clock_source_div +{ + EXTERNAL_IRQ_CLOCK_SOURCE_DIV_1 = 0, ///< Filter using clock source divided by 1 + EXTERNAL_IRQ_CLOCK_SOURCE_DIV_8 = 1, ///< Filter using clock source divided by 8 + EXTERNAL_IRQ_CLOCK_SOURCE_DIV_32 = 2, ///< Filter using clock source divided by 32 + EXTERNAL_IRQ_CLOCK_SOURCE_DIV_64 = 3, ///< Filter using clock source divided by 64 +} external_irq_clock_source_div_t; +#endif + +/** User configuration structure, used in open function */ +typedef struct st_external_irq_cfg +{ + uint8_t channel; ///< Hardware channel used. + uint8_t ipl; ///< Interrupt priority + IRQn_Type irq; ///< Interrupt number assigned to this instance + external_irq_trigger_t trigger; ///< Trigger setting. + external_irq_clock_source_div_t clock_source_div; ///< Digital filter clock divisor setting. + bool filter_enable; ///< Digital filter enable/disable selection. + + /** Callback provided external input trigger occurs. */ + void (* p_callback)(external_irq_callback_args_t * p_args); + + /** Placeholder for user data. Passed to the user callback in @ref external_irq_callback_args_t. */ + void * p_context; + void const * p_extend; ///< External IRQ hardware dependent configuration. +} external_irq_cfg_t; + +/** External IRQ control block. Allocate an instance specific control block to pass into the external IRQ API calls. + */ +typedef void external_irq_ctrl_t; + +/** External interrupt driver structure. External interrupt functions implemented at the HAL layer will follow this API. */ +typedef struct st_external_irq_api +{ + /** Initial configuration. + * + * @param[out] p_ctrl Pointer to control block. Must be declared by user. Value set here. + * @param[in] p_cfg Pointer to configuration structure. All elements of the structure must be set by user. + */ + fsp_err_t (* open)(external_irq_ctrl_t * const p_ctrl, external_irq_cfg_t const * const p_cfg); + + /** Enable callback when an external trigger condition occurs. + * + * @param[in] p_ctrl Control block set in Open call for this external interrupt. + */ + fsp_err_t (* enable)(external_irq_ctrl_t * const p_ctrl); + + /** Disable callback when external trigger condition occurs. + * + * @param[in] p_ctrl Control block set in Open call for this external interrupt. + */ + fsp_err_t (* disable)(external_irq_ctrl_t * const p_ctrl); + + /** + * Specify callback function and optional context pointer and working memory pointer. + * + * @param[in] p_ctrl Pointer to the External IRQ 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)(external_irq_ctrl_t * const p_ctrl, void (* p_callback)(external_irq_callback_args_t *), + void * const p_context, external_irq_callback_args_t * const p_callback_memory); + + /** Allow driver to be reconfigured. May reduce power consumption. + * + * @param[in] p_ctrl Control block set in Open call for this external interrupt. + */ + fsp_err_t (* close)(external_irq_ctrl_t * const p_ctrl); +} external_irq_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_external_irq_instance +{ + external_irq_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + external_irq_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + external_irq_api_t const * p_api; ///< Pointer to the API structure for this instance +} external_irq_instance_t; + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +/*******************************************************************************************************************//** + * @} (end defgroup EXTERNAL_IRQ_API) + **********************************************************************************************************************/ + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_ioport_api.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_ioport_api.h new file mode 100644 index 000000000000..4a09f1006d80 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_ioport_api.h @@ -0,0 +1,192 @@ +/* +* Copyright (c) 2020 - 2026 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/ra6w1-ek/ra/fsp/inc/api/r_transfer_api.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_transfer_api.h new file mode 100644 index 000000000000..dc8622325dc9 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_transfer_api.h @@ -0,0 +1,389 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_TRANSFER_INTERFACES + * @defgroup TRANSFER_API Transfer Interface + * + * @brief Interface for data transfer functions. + * + * @section TRANSFER_API_SUMMARY Summary + * The transfer interface supports background data transfer (no CPU intervention). + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_TRANSFER_API_H +#define R_TRANSFER_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Common error codes and definitions. */ +#include "bsp_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#define TRANSFER_SETTINGS_MODE_BITS (30U) +#define TRANSFER_SETTINGS_SIZE_BITS (28U) +#define TRANSFER_SETTINGS_SRC_ADDR_BITS (26U) +#define TRANSFER_SETTINGS_CHAIN_MODE_BITS (22U) +#define TRANSFER_SETTINGS_IRQ_BITS (21U) +#define TRANSFER_SETTINGS_REPEAT_AREA_BITS (20U) +#define TRANSFER_SETTINGS_DEST_ADDR_BITS (18U) + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Transfer control block. Allocate an instance specific control block to pass into the transfer API calls. + */ +typedef void transfer_ctrl_t; + +#ifndef BSP_OVERRIDE_TRANSFER_MODE_T + +/** Transfer mode describes what will happen when a transfer request occurs. */ +typedef enum e_transfer_mode +{ + /** In normal mode, each transfer request causes a transfer of @ref transfer_size_t from the source pointer to + * the destination pointer. The transfer length is decremented and the source and address pointers are + * updated according to @ref transfer_addr_mode_t. After the transfer length reaches 0, transfer requests + * will not cause any further transfers. */ + TRANSFER_MODE_NORMAL = 0, + + /** Repeat mode is like normal mode, except that when the transfer length reaches 0, the pointer to the + * repeat area and the transfer length will be reset to their initial values. If DMAC is used, the + * transfer repeats only transfer_info_t::num_blocks times. After the transfer repeats + * transfer_info_t::num_blocks times, transfer requests will not cause any further transfers. If DTC is + * used, the transfer repeats continuously (no limit to the number of repeat transfers). */ + TRANSFER_MODE_REPEAT = 1, + + /** In block mode, each transfer request causes transfer_info_t::length transfers of @ref transfer_size_t. + * After each individual transfer, the source and destination pointers are updated according to + * @ref transfer_addr_mode_t. After the block transfer is complete, transfer_info_t::num_blocks is + * decremented. After the transfer_info_t::num_blocks reaches 0, transfer requests will not cause any + * further transfers. */ + TRANSFER_MODE_BLOCK = 2, + + /** In addition to block mode features, repeat-block mode supports a ring buffer of blocks and offsets + * within a block (to split blocks into arrays of their first data, second data, etc.) */ + TRANSFER_MODE_REPEAT_BLOCK = 3 +} transfer_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_SIZE_T + +/** Transfer size specifies the size of each individual transfer. + * Total transfer length = transfer_size_t * transfer_length_t + */ +typedef enum e_transfer_size +{ + TRANSFER_SIZE_1_BYTE = 0, ///< Each transfer transfers a 8-bit value + TRANSFER_SIZE_2_BYTE = 1, ///< Each transfer transfers a 16-bit value + TRANSFER_SIZE_4_BYTE = 2, ///< Each transfer transfers a 32-bit value + TRANSFER_SIZE_8_BYTE = 3 ///< Each transfer transfers a 64-bit value +} transfer_size_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_ADDR_MODE_T + +/** Address mode specifies whether to modify (increment or decrement) pointer after each transfer. */ +typedef enum e_transfer_addr_mode +{ + /** Address pointer remains fixed after each transfer. */ + TRANSFER_ADDR_MODE_FIXED = 0, + + /** Offset is added to the address pointer after each transfer. */ + TRANSFER_ADDR_MODE_OFFSET = 1, + + /** Address pointer is incremented by associated @ref transfer_size_t after each transfer. */ + TRANSFER_ADDR_MODE_INCREMENTED = 2, + + /** Address pointer is decremented by associated @ref transfer_size_t after each transfer. */ + TRANSFER_ADDR_MODE_DECREMENTED = 3 +} transfer_addr_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_REPEAT_AREA_T + +/** Repeat area options (source or destination). In @ref TRANSFER_MODE_REPEAT, the selected pointer returns to its + * original value after transfer_info_t::length transfers. In @ref TRANSFER_MODE_BLOCK and @ref TRANSFER_MODE_REPEAT_BLOCK, + * the selected pointer returns to its original value after each transfer. */ +typedef enum e_transfer_repeat_area +{ + /** Destination area repeated in @ref TRANSFER_MODE_REPEAT or @ref TRANSFER_MODE_BLOCK or @ref TRANSFER_MODE_REPEAT_BLOCK. */ + TRANSFER_REPEAT_AREA_DESTINATION = 0, + + /** Source area repeated in @ref TRANSFER_MODE_REPEAT or @ref TRANSFER_MODE_BLOCK or @ref TRANSFER_MODE_REPEAT_BLOCK. */ + TRANSFER_REPEAT_AREA_SOURCE = 1 +} transfer_repeat_area_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_CHAIN_MODE_T + +/** Chain transfer mode options. + * @note Only applies for DTC. */ +typedef enum e_transfer_chain_mode +{ + /** Chain mode not used. */ + TRANSFER_CHAIN_MODE_DISABLED = 0, + + /** Switch to next transfer after a single transfer from this @ref transfer_info_t. */ + TRANSFER_CHAIN_MODE_EACH = 2, + + /** Complete the entire transfer defined in this @ref transfer_info_t before chaining to next transfer. */ + TRANSFER_CHAIN_MODE_END = 3 +} transfer_chain_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_IRQ_T + +/** Interrupt options. */ +typedef enum e_transfer_irq +{ + /** Interrupt occurs only after last transfer. If this transfer is chained to a subsequent transfer, + * the interrupt will occur only after subsequent chained transfer(s) are complete. + * @warning DTC triggers the interrupt of the activation source. Choosing TRANSFER_IRQ_END with DTC will + * prevent activation source interrupts until the transfer is complete. */ + TRANSFER_IRQ_END = 0, + + /** Interrupt occurs after each transfer. + * @note Not available in all HAL drivers. See HAL driver for details. */ + TRANSFER_IRQ_EACH = 1 +} transfer_irq_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_CALLBACK_ARGS_T + +/** Callback function parameter data. */ +typedef struct st_transfer_callback_args_t +{ + void * p_context; ///< Placeholder for user data. Set in @ref transfer_api_t::open function in ::transfer_cfg_t. +} transfer_callback_args_t; + +#endif + +/** Driver specific information. */ +typedef struct st_transfer_properties +{ + uint32_t block_count_max; ///< Maximum number of blocks + uint32_t block_count_remaining; ///< Number of blocks remaining + uint32_t transfer_length_max; ///< Maximum number of transfers + uint32_t transfer_length_remaining; ///< Number of transfers remaining +} transfer_properties_t; + +#ifndef BSP_OVERRIDE_TRANSFER_INFO_T + +/** This structure specifies the properties of the transfer. + * @warning When using DTC, this structure corresponds to the descriptor block registers required by the DTC. + * The following components may be modified by the driver: p_src, p_dest, num_blocks, and length. + * @warning When using DTC, do NOT reuse this structure to configure multiple transfers. Each transfer must + * have a unique transfer_info_t. + * @warning When using DTC, this structure must not be allocated in a temporary location. Any instance of this + * structure must remain in scope until the transfer it is used for is closed. + * @note When using DTC, consider placing instances of this structure in a protected section of memory. */ +typedef struct st_transfer_info +{ + union + { + struct + { + uint32_t : 16; + uint32_t : 2; + + /** Select what happens to destination pointer after each transfer. */ + transfer_addr_mode_t dest_addr_mode : 2; + + /** Select to repeat source or destination area, unused in @ref TRANSFER_MODE_NORMAL. */ + transfer_repeat_area_t repeat_area : 1; + + /** Select if interrupts should occur after each individual transfer or after the completion of all planned + * transfers. */ + transfer_irq_t irq : 1; + + /** Select when the chain transfer ends. */ + transfer_chain_mode_t chain_mode : 2; + + uint32_t : 2; + + /** Select what happens to source pointer after each transfer. */ + transfer_addr_mode_t src_addr_mode : 2; + + /** Select number of bytes to transfer at once. @see transfer_info_t::length. */ + transfer_size_t size : 2; + + /** Select mode from @ref transfer_mode_t. */ + transfer_mode_t mode : 2; + } transfer_settings_word_b; + + uint32_t transfer_settings_word; + }; + + void const * volatile p_src; ///< Source pointer + void * volatile p_dest; ///< Destination pointer + + /** Number of blocks to transfer when using @ref TRANSFER_MODE_BLOCK (both DTC an DMAC) or + * @ref TRANSFER_MODE_REPEAT (DMAC only) or + * @ref TRANSFER_MODE_REPEAT_BLOCK (DMAC only), unused in other modes. */ + volatile uint16_t num_blocks; + + /** Length of each transfer. Range limited for @ref TRANSFER_MODE_BLOCK, @ref TRANSFER_MODE_REPEAT, + * and @ref TRANSFER_MODE_REPEAT_BLOCK + * see HAL driver for details. */ + volatile uint16_t length; +} transfer_info_t; + +#endif + +/** Driver configuration set in @ref transfer_api_t::open. All elements except p_extend are required and must be + * initialized. */ +typedef struct st_transfer_cfg +{ + /** Pointer to transfer configuration options. If using chain transfer (DTC only), this can be a pointer to + * an array of chained transfers that will be completed in order. */ + transfer_info_t * p_info; + + void const * p_extend; ///< Extension parameter for hardware specific settings. +} transfer_cfg_t; + +/** Select whether to start single or repeated transfer with software start. */ +typedef enum e_transfer_start_mode +{ + TRANSFER_START_MODE_SINGLE = 0, ///< Software start triggers single transfer. + TRANSFER_START_MODE_REPEAT = 1 ///< Software start transfer continues until transfer is complete. +} transfer_start_mode_t; + +/** Transfer functions implemented at the HAL layer will follow this API. */ +typedef struct st_transfer_api +{ + /** Initial configuration. + * + * @param[in,out] p_ctrl Pointer to control block. Must be declared by user. Elements set here. + * @param[in] p_cfg Pointer to configuration structure. All elements of this structure + * must be set by user. + */ + fsp_err_t (* open)(transfer_ctrl_t * const p_ctrl, transfer_cfg_t const * const p_cfg); + + /** Reconfigure the transfer. + * Enable the transfer if p_info is valid. + * + * @param[in,out] p_ctrl Pointer to control block. Must be declared by user. Elements set here. + * @param[in] p_info Pointer to a new transfer info structure. + */ + fsp_err_t (* reconfigure)(transfer_ctrl_t * const p_ctrl, transfer_info_t * p_info); + + /** Reset source address pointer, destination address pointer, and/or length, keeping all other settings the same. + * Enable the transfer if p_src, p_dest, and length are valid. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_src Pointer to source. Set to NULL if source pointer should not change. + * @param[in] p_dest Pointer to destination. Set to NULL if destination pointer should not change. + * @param[in] num_transfers Transfer length in normal mode or number of blocks in block mode. In DMAC only, + * resets number of repeats (initially stored in transfer_info_t::num_blocks) in + * repeat mode. Not used in repeat mode for DTC. + */ + fsp_err_t (* reset)(transfer_ctrl_t * const p_ctrl, void const * p_src, void * p_dest, + uint16_t const num_transfers); + + /** Enable transfer. Transfers occur after the activation source event (or when + * @ref transfer_api_t::softwareStart is called if no peripheral event is chosen as activation source). + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* enable)(transfer_ctrl_t * const p_ctrl); + + /** Disable transfer. Transfers do not occur after the activation source event (or when + * @ref transfer_api_t::softwareStart is called if no peripheral event is chosen as the DMAC activation source). + * @note If a transfer is in progress, it will be completed. Subsequent transfer requests do not cause a + * transfer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* disable)(transfer_ctrl_t * const p_ctrl); + + /** Start transfer in software. + * @warning Only works if no peripheral event is chosen as the DMAC activation source. + * @note Not supported for DTC. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] mode Select mode from @ref transfer_start_mode_t. + */ + fsp_err_t (* softwareStart)(transfer_ctrl_t * const p_ctrl, transfer_start_mode_t mode); + + /** Stop transfer in software. The transfer will stop after completion of the current transfer. + * @note Not supported for DTC. + * @note Only applies for transfers started with TRANSFER_START_MODE_REPEAT. + * @warning Only works if no peripheral event is chosen as the DMAC activation source. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* softwareStop)(transfer_ctrl_t * const p_ctrl); + + /** Provides information about this transfer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[out] p_properties Driver specific information. + */ + fsp_err_t (* infoGet)(transfer_ctrl_t * const p_ctrl, transfer_properties_t * const p_properties); + + /** Releases hardware lock. This allows a transfer to be reconfigured using @ref transfer_api_t::open. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* close)(transfer_ctrl_t * const p_ctrl); + + /** To update next transfer information without interruption during transfer. + * Allow further transfer continuation. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_src Pointer to source. Set to NULL if source pointer should not change. + * @param[in] p_dest Pointer to destination. Set to NULL if destination pointer should not change. + * @param[in] num_transfers Transfer length in normal mode or block mode. + */ + fsp_err_t (* reload)(transfer_ctrl_t * const p_ctrl, void const * p_src, void * p_dest, + uint32_t const num_transfers); + + /** Specify callback function and optional context pointer and working memory pointer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_callback Callback function to register + * @param[in] p_context Pointer to send to callback function + * @param[in] p_callback_memory Pointer to volatile memory where callback structure can be allocated. + * Callback arguments allocated here are only valid during the callback. + */ + fsp_err_t (* callbackSet)(transfer_ctrl_t * const p_ctrl, void (* p_callback)(transfer_callback_args_t *), + void * const p_context, transfer_callback_args_t * const p_callback_memory); +} transfer_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_transfer_instance +{ + transfer_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + transfer_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + transfer_api_t const * p_api; ///< Pointer to the API structure for this instance +} transfer_instance_t; + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/*******************************************************************************************************************//** + * @} (end defgroup TRANSFER_API) + **********************************************************************************************************************/ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_uart_api.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_uart_api.h new file mode 100644 index 000000000000..e0d7e0160da2 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/api/r_uart_api.h @@ -0,0 +1,266 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_CONNECTIVITY_INTERFACES + * @defgroup UART_API UART Interface + * @brief Interface for UART communications. + * + * @section UART_INTERFACE_SUMMARY Summary + * The UART interface provides common APIs for UART HAL drivers. The UART interface supports the following features: + * - Full-duplex UART communication + * - Interrupt driven transmit/receive processing + * - Callback function with returned event code + * - Runtime baud-rate change + * - Hardware resource locking during a transaction + * - CTS/RTS hardware flow control support (with an associated IOPORT pin) + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_UART_API_H +#define R_UART_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Includes board and MCU related header files. */ +#include "bsp_api.h" +#include "r_transfer_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** UART Event codes */ +#ifndef BSP_OVERRIDE_UART_EVENT_T +typedef enum e_sf_event +{ + UART_EVENT_RX_COMPLETE = (1UL << 0), ///< Receive complete event + UART_EVENT_TX_COMPLETE = (1UL << 1), ///< Transmit complete event + UART_EVENT_RX_CHAR = (1UL << 2), ///< Character received + UART_EVENT_ERR_PARITY = (1UL << 3), ///< Parity error event + UART_EVENT_ERR_FRAMING = (1UL << 4), ///< Mode fault error event + UART_EVENT_ERR_OVERFLOW = (1UL << 5), ///< FIFO Overflow error event + UART_EVENT_BREAK_DETECT = (1UL << 6), ///< Break detect error event + UART_EVENT_TX_DATA_EMPTY = (1UL << 7), ///< Last byte is transmitting, ready for more data +} uart_event_t; +#endif +#ifndef BSP_OVERRIDE_UART_DATA_BITS_T + +/** UART Data bit length definition */ +typedef enum e_uart_data_bits +{ + UART_DATA_BITS_9 = 0U, ///< Data bits 9-bit + UART_DATA_BITS_8 = 2U, ///< Data bits 8-bit + UART_DATA_BITS_7 = 3U, ///< Data bits 7-bit +} uart_data_bits_t; +#endif +#ifndef BSP_OVERRIDE_UART_PARITY_T + +/** UART Parity definition */ +typedef enum e_uart_parity +{ + UART_PARITY_OFF = 0U, ///< No parity + UART_PARITY_ZERO = 1U, ///< Zero parity + UART_PARITY_EVEN = 2U, ///< Even parity + UART_PARITY_ODD = 3U, ///< Odd parity +} uart_parity_t; +#endif + +/** UART Stop bits definition */ +typedef enum e_uart_stop_bits +{ + UART_STOP_BITS_1 = 0U, ///< Stop bit 1-bit + UART_STOP_BITS_2 = 1U, ///< Stop bits 2-bit +} uart_stop_bits_t; + +/** UART transaction definition */ +typedef enum e_uart_dir +{ + UART_DIR_RX_TX = 3U, ///< Both RX and TX + UART_DIR_RX = 1U, ///< Only RX + UART_DIR_TX = 2U, ///< Only TX +} uart_dir_t; + +/** UART driver specific information */ +typedef struct st_uart_info +{ + /** Maximum bytes that can be written at this time. Only applies if uart_cfg_t::p_transfer_tx is not NULL. */ + uint32_t write_bytes_max; + + /** Maximum bytes that are available to read at one time. Only applies if uart_cfg_t::p_transfer_rx is not NULL. */ + uint32_t read_bytes_max; +} uart_info_t; + +/** UART Callback parameter definition */ +typedef struct st_uart_callback_arg +{ + uint32_t channel; ///< Device channel number + uart_event_t event; ///< Event code + + /** Contains the next character received for the events UART_EVENT_RX_CHAR, UART_EVENT_ERR_PARITY, + * UART_EVENT_ERR_FRAMING, or UART_EVENT_ERR_OVERFLOW. Otherwise unused. */ + uint32_t data; + void * p_context; ///< Context provided to user during callback +} uart_callback_args_t; + +/** UART Configuration */ +typedef struct st_uart_cfg +{ + /* UART generic configuration */ + uint8_t channel; ///< Select a channel corresponding to the channel number of the hardware. + uart_data_bits_t data_bits; ///< Data bit length (8 or 7 or 9) + uart_parity_t parity; ///< Parity type (none or odd or even) + uart_stop_bits_t stop_bits; ///< Stop bit length (1 or 2) + uint8_t rxi_ipl; ///< Receive interrupt priority + IRQn_Type rxi_irq; ///< Receive interrupt IRQ number + uint8_t txi_ipl; ///< Transmit interrupt priority + IRQn_Type txi_irq; ///< Transmit interrupt IRQ number + uint8_t tei_ipl; ///< Transmit end interrupt priority + IRQn_Type tei_irq; ///< Transmit end interrupt IRQ number + uint8_t eri_ipl; ///< Error interrupt priority + IRQn_Type eri_irq; ///< Error interrupt IRQ number + + /** Optional transfer instance used to receive multiple bytes without interrupts. Set to NULL if unused. + * If NULL, the number of bytes allowed in the read API is limited to one byte at a time. */ + transfer_instance_t const * p_transfer_rx; + + /** Optional transfer instance used to send multiple bytes without interrupts. Set to NULL if unused. + * If NULL, the number of bytes allowed in the write APIs is limited to one byte at a time. */ + transfer_instance_t const * p_transfer_tx; + + /* Configuration for UART Event processing */ + void (* p_callback)(uart_callback_args_t * p_args); ///< Pointer to callback function + void * p_context; ///< User defined context passed into callback function + + /* Pointer to UART peripheral specific configuration */ + void const * p_extend; ///< UART hardware dependent configuration +} uart_cfg_t; + +/** UART control block. Allocate an instance specific control block to pass into the UART API calls. + */ +typedef void uart_ctrl_t; + +/** Shared Interface definition for UART */ +typedef struct st_uart_api +{ + /** Open UART device. + * + * @param[in,out] p_ctrl Pointer to the UART control block. Must be declared by user. Value set here. + * @param[in] uart_cfg_t Pointer to UART configuration structure. All elements of this structure must be set by + * user. + */ + fsp_err_t (* open)(uart_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); + + /** Read from UART device. The read buffer is used until the read is complete. When a transfer is complete, the + * callback is called with event UART_EVENT_RX_COMPLETE. Bytes received outside an active transfer are received in + * the callback function with event UART_EVENT_RX_CHAR. + * The maximum transfer size is reported by infoGet(). + * + * @param[in] p_ctrl Pointer to the UART control block for the channel. + * @param[in] p_dest Destination address to read data from. + * @param[in] bytes Read data length. + */ + fsp_err_t (* read)(uart_ctrl_t * const p_ctrl, uint8_t * const p_dest, uint32_t const bytes); + + /** Write to UART device. The write buffer is used until write is complete. Do not overwrite write buffer + * contents until the write is finished. When the write is complete (all bytes are fully transmitted on the wire), + * the callback called with event UART_EVENT_TX_COMPLETE. + * The maximum transfer size is reported by infoGet(). + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_src Source address to write data to. + * @param[in] bytes Write data length. + */ + fsp_err_t (* write)(uart_ctrl_t * const p_ctrl, uint8_t const * const p_src, uint32_t const bytes); + + /** Change baud rate. + * @warning Calling this API aborts any in-progress transmission and disables reception until the new baud + * settings have been applied. + * + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_baudrate_info Pointer to module specific information for configuring baud rate. + */ + fsp_err_t (* baudSet)(uart_ctrl_t * const p_ctrl, void const * const p_baudrate_info); + + /** Get the driver specific information. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[out] p_info Pointer to UART information structure. + */ + fsp_err_t (* infoGet)(uart_ctrl_t * const p_ctrl, uart_info_t * const p_info); + + /** + * Abort ongoing transfer. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] communication_to_abort Type of abort request. + */ + fsp_err_t (* communicationAbort)(uart_ctrl_t * const p_ctrl, uart_dir_t communication_to_abort); + + /** + * Specify callback function and optional context pointer and working memory pointer. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_callback Callback function + * @param[in] p_context Pointer to send to callback function + * @param[in] p_working_memory Pointer to volatile memory where callback structure can be allocated. + * Callback arguments allocated here are only valid during the callback. + */ + fsp_err_t (* callbackSet)(uart_ctrl_t * const p_ctrl, void (* p_callback)(uart_callback_args_t *), + void * const p_context, uart_callback_args_t * const p_callback_memory); + + /** Close UART device. + * + * @param[in] p_ctrl Pointer to the UART control block. + */ + fsp_err_t (* close)(uart_ctrl_t * const p_ctrl); + + /** Stop ongoing read and return the number of bytes remaining in the read. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in,out] remaining_bytes Pointer to location to store remaining bytes for read. + */ + fsp_err_t (* readStop)(uart_ctrl_t * const p_ctrl, uint32_t * remaining_bytes); + + /** Suspend RX operations for UART device. + * + * @param[in] p_ctrl Pointer to the UART control block. + */ + fsp_err_t (* receiveSuspend)(uart_ctrl_t * const p_ctrl); + + /** Resume RX operations for UART device. + * + * @param[in] p_ctrl Pointer to the UART control block. + */ + fsp_err_t (* receiveResume)(uart_ctrl_t * const p_ctrl); +} uart_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_uart_instance +{ + uart_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + uart_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + uart_api_t const * p_api; ///< Pointer to the API structure for this instance +} uart_instance_t; + +/** @} (end defgroup UART_API) */ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/inc/fsp_features.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/fsp_features.h new file mode 100644 index 000000000000..ce795c1a8cc3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/fsp_features.h @@ -0,0 +1,301 @@ +/* +* Copyright (c) 2020 - 2026 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" +#if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6W1 || BSP_MCU_GROUP_RA6W3 || BSP_MCU_GROUP_RA6U1 + #include "../../fsp/src/bsp_w/mcu/all/bsp_compiler_support.h" +#else + #include "../../fsp/src/bsp/mcu/all/bsp_compiler_support.h" +#endif + +/*********************************************************************************************************************** + * 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/ra6w1-ek/ra/fsp/inc/fsp_version.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/fsp_version.h new file mode 100644 index 000000000000..a73413122b74 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/fsp_version.h @@ -0,0 +1,76 @@ +/* +* Copyright (c) 2020 - 2026 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 (2U) + +/** FSP pack minor version. */ + #define FSP_VERSION_MINOR (0U) + +/** FSP pack patch version. */ + #define FSP_VERSION_PATCH (1U) + +/** FSP pack version build number (currently unused). */ + #define FSP_VERSION_BUILD (0U) + +/** Public FSP version name. */ + #define FSP_VERSION_STRING ("2.0.1") + +/** Unique FSP version ID. */ + #define FSP_VERSION_BUILD_STRING ("Built with RAFW Flexible Software Package version 2.0.1") + +/********************************************************************************************************************** + * 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/ra6w1-ek/ra/fsp/inc/fw_version.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/fw_version.h new file mode 100644 index 000000000000..f285b88e82ca --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/fw_version.h @@ -0,0 +1,3 @@ +#ifndef FIRMWARE_VERSION +#define FIRMWARE_VERSION "9092f23dda-1" "-e2studio" +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_ext_irq_w.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_ext_irq_w.h new file mode 100644 index 000000000000..1c66bb633f20 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_ext_irq_w.h @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup EXT_IRQ_W + * @{ + **********************************************************************************************************************/ + +#ifndef R_EXT_IRQ_W_H +#define R_EXT_IRQ_W_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "r_external_irq_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 + *********************************************************************************************************************/ + +/** Extended EXT_IRQ interface configuration */ +typedef struct st_ext_irq_w_extended_cfg +{ + bsp_io_port_pin_t irq_pin; ///< IRQ pin +} ext_irq_w_extended_cfg_t; + +/** EXT_IRQ private control block. DO NOT MODIFY. Initialization occurs when @ref R_EXT_IRQ_W_ExternalIrqOpen is called. */ +typedef struct st_ext_irq_w_instance_ctrl +{ + uint32_t open; ///< Used to determine if channel control block is in use + IRQn_Type irq; ///< NVIC interrupt number + uint8_t channel; ///< Channel + + bsp_io_port_pin_t irq_pin; ///< IRQ pin + + void (* p_callback)(external_irq_callback_args_t * p_args); // Pointer to callback that is called when an edge is detected on the external irq pin. + + /** Placeholder for user data. Passed to the user callback in ::external_irq_callback_args_t. */ + void * p_context; +} ext_irq_w_instance_ctrl_t; + +/********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/** @cond INC_HEADER_DEFS_SEC */ +/** Filled in Interface API structure for this Instance. */ +extern const external_irq_api_t g_external_irq_on_ext_irq_w; + +/** @endcond */ + +/*********************************************************************************************************************** + * Public APIs + **********************************************************************************************************************/ +fsp_err_t R_EXT_IRQ_W_ExternalIrqOpen(external_irq_ctrl_t * const p_api_ctrl, external_irq_cfg_t const * const p_cfg); + +fsp_err_t R_EXT_IRQ_W_ExternalIrqEnable(external_irq_ctrl_t * const p_api_ctrl); + +fsp_err_t R_EXT_IRQ_W_ExternalIrqDisable(external_irq_ctrl_t * const p_api_ctrl); + +fsp_err_t R_EXT_IRQ_W_ExternalIrqCallbackSet(external_irq_ctrl_t * const p_api_ctrl, + void ( * p_callback)(external_irq_callback_args_t *), + void * const p_context, + external_irq_callback_args_t * const p_callback_memory); + +fsp_err_t R_EXT_IRQ_W_ExternalIrqClose(external_irq_ctrl_t * const p_api_ctrl); + +/*******************************************************************************************************************//** + * @} (end defgroup EXT_IRQ_W) + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif // R_EXT_IRQ_W_H diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_gpio_w.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_gpio_w.h new file mode 100644 index 000000000000..5060250eda21 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_gpio_w.h @@ -0,0 +1,435 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup GPIO_W + * @{ + **********************************************************************************************************************/ + +#ifndef R_GPIO_W_H +#define R_GPIO_W_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "r_ioport_api.h" +#include "r_gpio_w_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 + **********************************************************************************************************************/ +#define GPIO_W_PXX_MODE_REG(_port, _pin) BSP_IO_PXX_MODE_REG(_port, _pin) + +#if !defined(BSP_MCU_GROUP_RA6W1) + #define GPIO_W_MODE_REG_VALID_BITS_MSK (0x3F3F3FU) + #define GPIO_W_PRV_FUNC_BITS (0x003FU) + +/* Macro for toggle action triggered by event with initial level */ + #define TOGGLE_GPIO_EVENTx_MASK(event, level) ((uint32_t) GPIO_W_CFG_PORT_DIRECTION_OUTPUT | \ + (uint32_t) GPIO_W_CFG_ELC_TASK_GPIO_TOGGLE | \ + (uint32_t) event | \ + (uint32_t) (level << GPIO_W_PRV_LEVEL_OFFSET)) + +/* Macro for set action triggered by event */ + #define SET_GPIO_EVENTx_MASK(event) ((uint32_t) GPIO_W_CFG_PORT_DIRECTION_OUTPUT | \ + (uint32_t) GPIO_W_CFG_ELC_TASK_GPIO_SET | \ + (uint32_t) event | \ + (uint32_t) GPIO_W_CFG_PORT_OUTPUT_LOW) + +/* Macro for reset action triggered by event */ + #define RESET_GPIO_EVENTx_MASK(event) ((uint32_t) GPIO_W_CFG_PORT_DIRECTION_OUTPUT | \ + (uint32_t) GPIO_W_CFG_ELC_TASK_GPIO_RESET | \ + (uint32_t) event | \ + (uint32_t) GPIO_W_CFG_PORT_OUTPUT_HIGH) +#else + #define GPIO_W_PRV_MODE_BITS (0xFF7FU) + #define GPIO_W_PRV_FUNC_BITS (0x007FU) +#endif + +#define GPIO_W_PRV_LEVEL_BITS (0x400000U) +#define GPIO_W_PRV_LEVEL_OFFSET (22U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/* TODO: This cannot be maintained, use similar solution as RA's BSP_OVERRIDE_IOPORT_PERIPHERAL_T. */ +/** Superset of all peripheral functions. */ +typedef enum e_gpio_w_peripheral +{ + GPIO_W_PERIPHERAL_DEBUG = 0, /**< Pin will function as a DEBUG pin (controlled by SYS_CTRL_REG[DEBUGGER_ENABLE]) */ + GPIO_W_PERIPHERAL_TRACE = 0, /**< Pin will function as a TRACE pin (controlled by DEBUG_REG[ETM_TRACE_MAP_ON_PINS_EN]) */ + GPIO_W_PERIPHERAL_ACOMP = 0, /**< Pin will function as an ACOMP Channel pin */ + GPIO_W_PERIPHERAL_QSPI = 0, /**< Pin will function as a QSPIC pin */ + +#if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + GPIO_W_PERIPHERAL_GPIO = 0, /**< GPIO */ + GPIO_W_PERIPHERAL_UART_RX = 1, /**< GPIO as UART RX */ + GPIO_W_PERIPHERAL_UART_TX = 2, /**< GPIO as UART TX */ + GPIO_W_PERIPHERAL_UART2_RX = 3, /**< GPIO as UART2 RX */ + GPIO_W_PERIPHERAL_UART2_TX = 4, /**< GPIO as UART2 TX */ + GPIO_W_PERIPHERAL_UART2_CTSN = 5, /**< GPIO as UART2 CTSN */ + GPIO_W_PERIPHERAL_UART2_RTSN = 6, /**< GPIO as UART2 RTSN */ + GPIO_W_PERIPHERAL_UART2_IRDA_RX = 7, /**< GPIO as IRDA RX */ + GPIO_W_PERIPHERAL_UART2_IRDA_TX = 8, /**< GPIO as IRDA TX*/ + GPIO_W_PERIPHERAL_UART3_RX = 9, /**< GPIO as UART3 RX */ + GPIO_W_PERIPHERAL_UART3_TX = 10, /**< GPIO as UART3 TX */ + GPIO_W_PERIPHERAL_UART3_CTSN = 11, /**< GPIO as UART3 CTSN */ + GPIO_W_PERIPHERAL_ISO_RST = 11, /**< GPIO as ISO7816 reset */ + GPIO_W_PERIPHERAL_UART3_RTSN = 12, /**< GPIO as UART3 RTSN */ + GPIO_W_PERIPHERAL_ISO_CARDINSERT = 12, /**< GPIO as ISO7816 card insert */ + GPIO_W_PERIPHERAL_UART4_RX = 13, /**< GPIO as UART4 RX */ + GPIO_W_PERIPHERAL_UART4_TX = 14, /**< GPIO as UART4 TX */ + GPIO_W_PERIPHERAL_UART4_CTSN = 15, /**< GPIO as UART4 CTSN */ + GPIO_W_PERIPHERAL_UART4_RTSN = 16, /**< GPIO as UART4 RTSN */ + GPIO_W_PERIPHERAL_ISO_CLK = 17, /**< GPIO as ISO CLK */ + GPIO_W_PERIPHERAL_ISO_DATA = 18, /**< GPIO as ISO DATA */ + GPIO_W_PERIPHERAL_SPI_DI = 19, /**< GPIO as SPI DI */ + GPIO_W_PERIPHERAL_SPI_DO = 20, /**< GPIO as SPI DO */ + GPIO_W_PERIPHERAL_SPI_CLK = 21, /**< GPIO as SPI CLK */ + GPIO_W_PERIPHERAL_SPI_CS = 22, /**< GPIO as SPI EN */ + GPIO_W_PERIPHERAL_SPI_CS2 = 23, /**< GPIO as SPI EN2 */ + GPIO_W_PERIPHERAL_SPI2_DI = 24, /**< GPIO as SPI2 DI */ + GPIO_W_PERIPHERAL_SPI2_DO = 25, /**< GPIO as SPI2 DO */ + GPIO_W_PERIPHERAL_SPI2_CLK = 26, /**< GPIO as SPI2 CLK */ + GPIO_W_PERIPHERAL_SPI2_CS = 27, /**< GPIO as SPI2 EN */ + GPIO_W_PERIPHERAL_SPI2_CS2 = 28, /**< GPIO as SPI2 EN2 */ + GPIO_W_PERIPHERAL_SPI3_DI = 29, /**< GPIO as SPI3 DI */ + GPIO_W_PERIPHERAL_SPI3_DO = 30, /**< GPIO as SPI3 DO */ + GPIO_W_PERIPHERAL_SPI3_CLK = 31, /**< GPIO as SPI3 CLK */ + GPIO_W_PERIPHERAL_SPI3_CS = 32, /**< GPIO as SPI3 EN */ + GPIO_W_PERIPHERAL_SPI3_CS2 = 33, /**< GPIO as SPI3 EN2 */ + GPIO_W_PERIPHERAL_I2C_SCL = 34, /**< GPIO as I2C SCL */ + GPIO_W_PERIPHERAL_I2C_SDA = 35, /**< GPIO as I2C SDA */ + GPIO_W_PERIPHERAL_I2C2_SCL = 36, /**< GPIO as I2C2 SCL */ + GPIO_W_PERIPHERAL_I2C2_SDA = 37, /**< GPIO as I2C2 SDA */ + GPIO_W_PERIPHERAL_I2C3_SCL = 38, /**< GPIO as I2C3 SCL */ + GPIO_W_PERIPHERAL_I2C3_SDA = 39, /**< GPIO as I2C3 SDA */ + GPIO_W_PERIPHERAL_I3C_SCL = 40, /**< GPIO as I3C SCL */ + GPIO_W_PERIPHERAL_I3C_SDA = 41, /**< GPIO as I3C SDA */ + GPIO_W_PERIPHERAL_USB_SOF = 42, /**< GPIO as USB SOF */ + GPIO_W_PERIPHERAL_CAN_RX = 43, /**< GPIO as CAN RX */ + GPIO_W_PERIPHERAL_CAN_TX = 44, /**< GPIO as CAN TX */ + GPIO_W_PERIPHERAL_ADC = 45, /**< GPIO as ADC (dedicated pin) */ + GPIO_W_PERIPHERAL_USB = 46, /**< GPIO as USB (dedicated pins) */ + GPIO_W_PERIPHERAL_IRGEN = 47, /**< GPIO as IR generator */ + GPIO_W_PERIPHERAL_KBSCN_COL = 48, /**< GPIO as Keyboard Scanner */ + GPIO_W_PERIPHERAL_PCM_DI = 49, /**< GPIO as PCM DI */ + GPIO_W_PERIPHERAL_PCM_DO = 50, /**< GPIO as PCM DO */ + GPIO_W_PERIPHERAL_PCM_FSC = 51, /**< GPIO as PCM FSC */ + GPIO_W_PERIPHERAL_PCM_CLK = 52, /**< GPIO as PCM CLK */ + GPIO_W_PERIPHERAL_PDM_DATA = 53, /**< GPIO as PDM DATA */ + GPIO_W_PERIPHERAL_PDM_CLK = 54, /**< GPIO as PDM CLK */ + GPIO_W_PERIPHERAL_TIMX_PWM = 55, /**< GPIO as TIMx PWM (dedicated pins) */ + GPIO_W_PERIPHERAL_TIMX_1SHOT_PULSE = 56, /**< GPIO as TIMx 1SHOT pulse (dedicated pins) */ + GPIO_W_PERIPHERAL_CLOCK = 57, /**< GPIO as CLOCK */ + GPIO_W_PERIPHERAL_COEX_EXT_ACT = 58, /**< GPIO as COEX EXT ACT */ + GPIO_W_PERIPHERAL_COEX_SMART_ACT = 59, /**< GPIO as COEX SMART ACT */ + GPIO_W_PERIPHERAL_COEX_SMART_PRI = 60, /**< GPIO as COEX SMART PRI */ + GPIO_W_PERIPHERAL_RF_DIAG = 61, /**< GPIO as RF DIAG (dedicated pins) */ + GPIO_W_PERIPHERAL_RFFE_SCLK = 62, /**< GPIO as RFFE SCLK */ + GPIO_W_PERIPHERAL_RFFE_SDATA = 63, /**< GPIO as RFFE SDATA */ +#elif BSP_MCU_GROUP_RA6B2 + GPIO_W_PERIPHERAL_GPIO = 0, /**< GPIO */ + GPIO_W_PERIPHERAL_UART_RX = 1, /**< GPIO as UART RX */ + GPIO_W_PERIPHERAL_UART_TX = 2, /**< GPIO as UART TX */ + GPIO_W_PERIPHERAL_UART2_RX = 3, /**< GPIO as UART2 RX */ + GPIO_W_PERIPHERAL_UART2_TX = 4, /**< GPIO as UART2 TX */ + GPIO_W_PERIPHERAL_UART2_CTSN = 5, /**< GPIO as UART2 CTSN */ + GPIO_W_PERIPHERAL_UART2_RTSN = 6, /**< GPIO as UART2 RTSN */ + GPIO_W_PERIPHERAL_UART2_IRDA_RX = 7, /**< GPIO as IRDA RX */ + GPIO_W_PERIPHERAL_UART2_IRDA_TX = 8, /**< GPIO as IRDA TX*/ + GPIO_W_PERIPHERAL_UART3_RX = 9, /**< GPIO as UART3 RX */ + GPIO_W_PERIPHERAL_UART3_TX = 10, /**< GPIO as UART3 TX */ + GPIO_W_PERIPHERAL_UART3_CTSN = 11, /**< GPIO as UART3 CTSN */ + GPIO_W_PERIPHERAL_UART3_RTSN = 12, /**< GPIO as UART3 RTSN */ + GPIO_W_PERIPHERAL_ISO_CLK = 13, /**< GPIO as ISO CLK */ + GPIO_W_PERIPHERAL_ISO_DATA = 14, /**< GPIO as ISO DATA */ + GPIO_W_PERIPHERAL_SPI_DI = 15, /**< GPIO as SPI DI */ + GPIO_W_PERIPHERAL_SPI_DO = 16, /**< GPIO as SPI DO */ + GPIO_W_PERIPHERAL_SPI_CLK = 17, /**< GPIO as SPI CLK */ + GPIO_W_PERIPHERAL_SPI_CS = 18, /**< GPIO as SPI EN */ + GPIO_W_PERIPHERAL_SPI_CS2 = 19, /**< GPIO as SPI EN2 */ + GPIO_W_PERIPHERAL_SPI2_DI = 20, /**< GPIO as SPI2 DI */ + GPIO_W_PERIPHERAL_SPI2_DO = 21, /**< GPIO as SPI2 DO */ + GPIO_W_PERIPHERAL_SPI2_CLK = 22, /**< GPIO as SPI2 CLK */ + GPIO_W_PERIPHERAL_SPI2_CS = 23, /**< GPIO as SPI2 EN */ + GPIO_W_PERIPHERAL_SPI2_CS2 = 24, /**< GPIO as SPI2 EN2 */ + GPIO_W_PERIPHERAL_SPI3_DI = 25, /**< GPIO as SPI3 DI */ + GPIO_W_PERIPHERAL_SPI3_DO = 26, /**< GPIO as SPI3 DO */ + GPIO_W_PERIPHERAL_SPI3_CLK = 27, /**< GPIO as SPI3 CLK */ + GPIO_W_PERIPHERAL_SPI3_CS = 28, /**< GPIO as SPI3 EN */ + GPIO_W_PERIPHERAL_SPI3_CS2 = 29, /**< GPIO as SPI3 EN2 */ + GPIO_W_PERIPHERAL_I2C_SCL = 30, /**< GPIO as I2C SCL */ + GPIO_W_PERIPHERAL_I2C_SDA = 31, /**< GPIO as I2C SDA */ + GPIO_W_PERIPHERAL_I2C2_SCL = 32, /**< GPIO as I2C2 SCL */ + GPIO_W_PERIPHERAL_I2C2_SDA = 33, /**< GPIO as I2C2 SDA */ + GPIO_W_PERIPHERAL_I3C_SCL = 34, /**< GPIO as I3C SCL */ + GPIO_W_PERIPHERAL_I3C_SDA = 35, /**< GPIO as I3C SDA */ + GPIO_W_PERIPHERAL_CAN_RX = 36, /**< GPIO as CAN RX */ + GPIO_W_PERIPHERAL_CAN_TX = 37, /**< GPIO as CAN TX */ + GPIO_W_PERIPHERAL_ADC = 38, /**< GPIO as ADC (dedicated pin) */ + GPIO_W_PERIPHERAL_IRGEN = 39, /**< GPIO as IR generator */ + GPIO_W_PERIPHERAL_KBSCN_COL = 40, /**< GPIO as Keyboard Scanner */ + GPIO_W_PERIPHERAL_PCM_DI = 41, /**< GPIO as PCM DI */ + GPIO_W_PERIPHERAL_PCM_DO = 42, /**< GPIO as PCM DO */ + GPIO_W_PERIPHERAL_PCM_FSC = 43, /**< GPIO as PCM FSC */ + GPIO_W_PERIPHERAL_PCM_CLK = 44, /**< GPIO as PCM CLK */ + GPIO_W_PERIPHERAL_PDM_DATA = 45, /**< GPIO as PDM DATA */ + GPIO_W_PERIPHERAL_PDM_CLK = 46, /**< GPIO as PDM CLK */ + GPIO_W_PERIPHERAL_TIMX_PWM = 47, /**< GPIO as TIMx PWM (dedicated pins) */ + GPIO_W_PERIPHERAL_TIMX_1SHOT_PULSE = 48, /**< GPIO as TIMx 1SHOT pulse (dedicated pins) */ + GPIO_W_PERIPHERAL_CLOCK = 49, /**< GPIO as CLOCK */ + GPIO_W_PERIPHERAL_COEX_EXT_ACT = 50, /**< GPIO as COEX EXT ACT */ + GPIO_W_PERIPHERAL_COEX_SMART_ACT = 51, /**< GPIO as COEX SMART ACT */ + GPIO_W_PERIPHERAL_COEX_SMART_PRI = 52, /**< GPIO as COEX SMART PRI */ + GPIO_W_PERIPHERAL_RF_DIAG = 53, /**< GPIO as RF DIAG (dedicated pins) */ +#elif BSP_MCU_GROUP_RA6W1 + GPIO_W_PERIPHERAL_GPIO = 0, /**< GPIO */ + GPIO_W_PERIPHERAL_UART_RX = 1, /**< GPIO as UART RX */ + GPIO_W_PERIPHERAL_UART_TX = 2, /**< GPIO as UART TX */ + GPIO_W_PERIPHERAL_UART_CTSN = 3, /**< GPIO as UART CTSN */ + GPIO_W_PERIPHERAL_UART_RTSN = 4, /**< GPIO as UART RTSN */ + GPIO_W_PERIPHERAL_UART_TXDOE = 5, /**< GPIO as UART TXDOE */ + GPIO_W_PERIPHERAL_UART2_RX = 6, /**< GPIO as UART2 RX */ + GPIO_W_PERIPHERAL_UART2_TX = 7, /**< GPIO as UART2 TX */ + GPIO_W_PERIPHERAL_UART2_CTSN = 8, /**< GPIO as UART2 CTSN */ + GPIO_W_PERIPHERAL_UART2_RTSN = 9, /**< GPIO as UART2 RTSN */ + GPIO_W_PERIPHERAL_UART2_TXDOE = 10, /**< GPIO as UART2 TXDOE */ + GPIO_W_PERIPHERAL_UART3_RX = 11, /**< GPIO as UART3 RX */ + GPIO_W_PERIPHERAL_UART3_TX = 12, /**< GPIO as UART3 TX */ + GPIO_W_PERIPHERAL_UART3_CTSN = 13, /**< GPIO as UART3 CTSN */ + GPIO_W_PERIPHERAL_UART3_RTSN = 14, /**< GPIO as UART3 RTSN */ + GPIO_W_PERIPHERAL_UART3_TXDOE = 15, /**< GPIO as UART3 TXDOE */ + GPIO_W_PERIPHERAL_SPI_DI = 16, /**< GPIO as SPI DI */ + GPIO_W_PERIPHERAL_SPI_DO = 17, /**< GPIO as SPI DO */ + GPIO_W_PERIPHERAL_SPI_CLK = 18, /**< GPIO as SPI CLK */ + GPIO_W_PERIPHERAL_SPI_CSN0 = 19, /**< GPIO as SPI CSN0 */ + GPIO_W_PERIPHERAL_SPI_CSN1 = 20, /**< GPIO as SPI CSN1 */ + GPIO_W_PERIPHERAL_SPI2_DI = 21, /**< GPIO as SPI2 DI */ + GPIO_W_PERIPHERAL_SPI2_DO = 22, /**< GPIO as SPI2 DO */ + GPIO_W_PERIPHERAL_SPI2_CLK = 23, /**< GPIO as SPI2 CLK */ + GPIO_W_PERIPHERAL_SPI2_CSN0 = 24, /**< GPIO as SPI2 CSN0 */ + GPIO_W_PERIPHERAL_SPI2_CSN1 = 25, /**< GPIO as SPI2 CSN1 */ + GPIO_W_PERIPHERAL_I2C_SCL = 26, /**< GPIO as I2C SCL */ + GPIO_W_PERIPHERAL_I2C_SDA = 27, /**< GPIO as I2C SDA */ + GPIO_W_PERIPHERAL_I2C2_SCL = 28, /**< GPIO as I2C2 SCL */ + GPIO_W_PERIPHERAL_I2C2_SDA = 29, /**< GPIO as I2C2 SDA */ + GPIO_W_PERIPHERAL_ADC = 30, /**< GPIO as ADC (dedicated pin) */ + GPIO_W_PERIPHERAL_PCM_DI = 31, /**< GPIO as PCM DI */ + GPIO_W_PERIPHERAL_PCM_DO = 32, /**< GPIO as PCM DO */ + GPIO_W_PERIPHERAL_PCM_FSC = 33, /**< GPIO as PCM FSC */ + GPIO_W_PERIPHERAL_PCM_CLK = 34, /**< GPIO as PCM CLK */ + GPIO_W_PERIPHERAL_DMICA_DI = 35, /**< GPIO as DMICA DI */ + GPIO_W_PERIPHERAL_DMIC_CLK = 36, /**< GPIO as DMIC CLK */ + GPIO_W_PERIPHERAL_MCLK = 37, /**< GPIO as MCLK */ + GPIO_W_PERIPHERAL_TIM_PWM = 38, /**< GPIO as TIM PWM */ + GPIO_W_PERIPHERAL_TIM2_PWM = 39, /**< GPIO as TIM2 PWM */ + GPIO_W_PERIPHERAL_TIM3_PWM = 40, /**< GPIO as TIM3 PWM */ + GPIO_W_PERIPHERAL_TIM4_PWM = 41, /**< GPIO as TIM4 PWM */ + GPIO_W_PERIPHERAL_TIM5_PWM = 42, /**< GPIO as TIM5 PWM */ + GPIO_W_PERIPHERAL_TIM6_PWM = 43, /**< GPIO as TIM6 PWM */ + GPIO_W_PERIPHERAL_TIM7_PWM = 44, /**< GPIO as TIM7 PWM */ + GPIO_W_PERIPHERAL_TIM8_PWM = 45, /**< GPIO as TIM8 PWM */ + GPIO_W_PERIPHERAL_TIM_1SHOT = 46, /**< GPIO as TIM 1SHOT */ + GPIO_W_PERIPHERAL_TIM2_1SHOT = 47, /**< GPIO as TIM2 1SHOT */ + GPIO_W_PERIPHERAL_TIM3_1SHOT = 48, /**< GPIO as TIM3 1SHOT */ + GPIO_W_PERIPHERAL_TIM4_1SHOT = 49, /**< GPIO as TIM4 1SHOT */ + GPIO_W_PERIPHERAL_TIM5_1SHOT = 50, /**< GPIO as TIM5 1SHOT */ + GPIO_W_PERIPHERAL_TIM6_1SHOT = 51, /**< GPIO as TIM6 1SHOT */ + GPIO_W_PERIPHERAL_TIM7_1SHOT = 52, /**< GPIO as TIM7 1SHOT */ + GPIO_W_PERIPHERAL_TIM8_1SHOT = 53, /**< GPIO as TIM8 1SHOT */ + GPIO_W_PERIPHERAL_CLOCK = 54, /**< GPIO as CLOCK */ + GPIO_W_PERIPHERAL_FEM_BS = 55, /**< GPIO as FEM_BS */ + GPIO_W_PERIPHERAL_FEM_CS = 56, /**< GPIO as FEM_CS */ + GPIO_W_PERIPHERAL_FEM_CTRL0 = 57, /**< GPIO as FEM CTRL0 */ + GPIO_W_PERIPHERAL_FEM_CTRL1 = 58, /**< GPIO as FEM CTRL1 */ + GPIO_W_PERIPHERAL_FEM_CTRL2 = 59, /**< GPIO as FEM CTRL2 */ + GPIO_W_PERIPHERAL_BT_COEX_CBT = 60, /**< GPIO as BT COEX CBT */ + GPIO_W_PERIPHERAL_BT_WLAN_ACT = 61, /**< GPIO as BT WLAN ACT */ + GPIO_W_PERIPHERAL_BT_ACT = 62, /**< GPIO as BT ACT */ + GPIO_W_PERIPHERAL_BT_PRI = 63, /**< GPIO as BT PRI */ + GPIO_W_PERIPHERAL_RF_SW1 = 64, /**< GPIO as RF SW1 */ + GPIO_W_PERIPHERAL_RF_SW2 = 65, /**< GPIO as RF SW2 */ + GPIO_W_PERIPHERAL_EXT_INTR = 66, /**< GPIO as EXT INTR */ + + GPIO_W_PERIPHERAL_SWCLK = 99, /**< GPIO as SWCLK */ + GPIO_W_PERIPHERAL_SWDIO = 100, /**< GPIO as SWDIO */ + GPIO_W_PERIPHERAL_WPROTECT = 101, /**< GPIO as WPROTECT */ + GPIO_W_PERIPHERAL_CDETECT = 102, /**< GPIO as CDETECT */ + GPIO_W_PERIPHERAL_ZB_WLAN_ACT = 103, /**< GPIO as ZB WLAN ACT */ + GPIO_W_PERIPHERAL_ZB_ACT = 104, /**< GPIO as ZB ACT */ + GPIO_W_PERIPHERAL_ZB_PRI = 105, /**< GPIO as ZB PRI */ + GPIO_W_PERIPHERAL_BTCOEX_ASC0 = 106, /**< GPIO as BTCOEX ASC0 */ + GPIO_W_PERIPHERAL_BTCOEX_ASC1 = 107, /**< GPIO as BTCOEX ASC1 */ + GPIO_W_PERIPHERAL_BTCOEX_ASC2 = 108, /**< GPIO as BTCOEX ASC2 */ +#elif BSP_MCU_GROUP_RA6W3 + GPIO_W_PERIPHERAL_GPIO = 0, /**< GPIO */ + GPIO_W_PERIPHERAL_UART2_TX = 1, /**< GPIO as UART2 TX */ + GPIO_W_PERIPHERAL_UART2_RX = 2, /**< GPIO as UART2 RX */ + GPIO_W_PERIPHERAL_UART2_RTSN = 3, /**< GPIO as UART2 RTSN */ + GPIO_W_PERIPHERAL_UART2_CTSN = 4, /**< GPIO as UART2 CTSN */ + GPIO_W_PERIPHERAL_UART3_TX = 5, /**< GPIO as UART3 TX */ + GPIO_W_PERIPHERAL_UART3_RX = 6, /**< GPIO as UART3 RX */ + GPIO_W_PERIPHERAL_UART3_RTSN = 7, /**< GPIO as UART3 RTSN */ + GPIO_W_PERIPHERAL_UART3_CTSN = 8, /**< GPIO as UART3 CTSN */ + GPIO_W_PERIPHERAL_UART4_TX = 9, /**< GPIO as UART4 TX */ + GPIO_W_PERIPHERAL_UART4_RX = 10, /**< GPIO as UART4 RX */ + GPIO_W_PERIPHERAL_UART4_RTSN = 11, /**< GPIO as UART4 RTSN */ + GPIO_W_PERIPHERAL_UART4_CTSN = 12, /**< GPIO as UART4 CTSN */ + GPIO_W_PERIPHERAL_I2C_SDA = 13, /**< GPIO as I2C SDA */ + GPIO_W_PERIPHERAL_I2C_SCL = 14, /**< GPIO as I2C SCL */ + GPIO_W_PERIPHERAL_I2C2_SDA = 15, /**< GPIO as I2C2 SDA */ + GPIO_W_PERIPHERAL_I2C2_SCL = 16, /**< GPIO as I2C2 SCL */ + GPIO_W_PERIPHERAL_SPI2_CLK = 17, /**< GPIO as SPI2 CLK */ + GPIO_W_PERIPHERAL_SPI2_DI = 18, /**< GPIO as SPI2 DI */ + GPIO_W_PERIPHERAL_SPI2_DO = 19, /**< GPIO as SPI2 DO */ + GPIO_W_PERIPHERAL_SPI2_CS = 20, /**< GPIO as SPI2 CS */ + GPIO_W_PERIPHERAL_SPI3_CLK = 21, /**< GPIO as SPI3 CLK */ + GPIO_W_PERIPHERAL_SPI3_DI = 22, /**< GPIO as SPI3 DI */ + GPIO_W_PERIPHERAL_SPI3_DO = 23, /**< GPIO as SPI3 DO */ + GPIO_W_PERIPHERAL_SPI3_CS = 24, /**< GPIO as SPI3 CS */ + GPIO_W_PERIPHERAL_TIM1_PWM = 25, /**< GPIO as TIM1 PWM */ + GPIO_W_PERIPHERAL_TIM2_PWM = 26, /**< GPIO as TIM2 PWM */ + GPIO_W_PERIPHERAL_TIM3_PWM = 27, /**< GPIO as TIM3 PWM */ + GPIO_W_PERIPHERAL_TIM4_PWM = 28, /**< GPIO as TIM4 PWM */ + GPIO_W_PERIPHERAL_TIM5_PWM = 29, /**< GPIO as TIM5 PWM */ + GPIO_W_PERIPHERAL_TIM6_PWM = 30, /**< GPIO as TIM6 PWM */ + GPIO_W_PERIPHERAL_TIM7_PWM = 31, /**< GPIO as TIM7 PWM */ + GPIO_W_PERIPHERAL_TIM8_PWM = 32, /**< GPIO as TIM8 PWM */ + GPIO_W_PERIPHERAL_TIM9_PWM = 33, /**< GPIO as TIM9 PWM */ + GPIO_W_PERIPHERAL_TIM10_PWM = 34, /**< GPIO as TIM10 PWM */ + GPIO_W_PERIPHERAL_TIM1_1SHOT_PULSE = 35, /**< GPIO as TIM1 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM2_1SHOT_PULSE = 36, /**< GPIO as TIM2 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM3_1SHOT_PULSE = 37, /**< GPIO as TIM3 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM4_1SHOT_PULSE = 38, /**< GPIO as TIM4 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM5_1SHOT_PULSE = 39, /**< GPIO as TIM5 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM6_1SHOT_PULSE = 40, /**< GPIO as TIM6 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM7_1SHOT_PULSE = 41, /**< GPIO as TIM7 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM8_1SHOT_PULSE = 42, /**< GPIO as TIM8 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM9_1SHOT_PULSE = 43, /**< GPIO as TIM9 1SHOT pulse */ + GPIO_W_PERIPHERAL_TIM10_1SHOT_PULSE = 44, /**< GPIO as TIM10 1SHOT pulse */ + GPIO_W_PERIPHERAL_USB_SOF = 45, /**< GPIO as USB SOF */ + GPIO_W_PERIPHERAL_ADC = 46, /**< GPIO as ADC (dedicated pin) */ + GPIO_W_PERIPHERAL_PCM_DI = 47, /**< GPIO as PCM DI */ + GPIO_W_PERIPHERAL_PCM_MCLK = 48, /**< GPIO as PCM ΜCLK */ + GPIO_W_PERIPHERAL_PCM_DO = 49, /**< GPIO as PCM DO */ + GPIO_W_PERIPHERAL_PCM_BCLK = 50, /**< GPIO as PCM ΒCLK */ + GPIO_W_PERIPHERAL_PCM_CLK = 51, /**< GPIO as PCM CLK */ + GPIO_W_PERIPHERAL_DMIC_CLK = 52, /**< GPIO as DMIC CLK */ + GPIO_W_PERIPHERAL_DMIC_DATA = 53, /**< GPIO as DMIC DATA */ + GPIO_W_PERIPHERAL_TEST_CLOCK = 54, /**< GPIO as TEST CLOCK */ + GPIO_W_PERIPHERAL_CMAC_DIAG = 55, /**< GPIO as CMAC DIAG */ + GPIO_W_PERIPHERAL_COEX_REQ = 56, /**< GPIO as COEX REQ */ + GPIO_W_PERIPHERAL_COEX_CNT = 57, /**< GPIO as COEX CNT */ + GPIO_W_PERIPHERAL_COEX_PRI = 58, /**< GPIO as COEX PRI */ +#endif +} gpio_w_peripheral_t; + +// TIN_HACK_WIFI - TEMP for keeping r_ble_gtl.c compatible with both rrq and da during the transition +#define IOPORT_CFG_IRQ_ENABLE GPIO_W_CFG_IRQ_ENABLE + +/** GPIO_W private control block. DO NOT MODIFY. Initialization occurs when R_GPIO_W_Open() is called. */ +typedef struct st_gpio_w_instance_ctrl +{ + uint32_t open; + void const * p_context; + volatile uint32_t * p_reg_p0_data; + volatile uint32_t * p_reg_p0_set_data; + volatile uint32_t * p_reg_p0_reset_data; + volatile uint32_t * p_reg_p0_00_mode; +} gpio_w_instance_ctrl_t; + +/* TIN-TODO: HW dependent types should be guarded with features, not device families. */ +#if !defined(BSP_MCU_GROUP_RA6W1) + +/** Pins power configuration structure */ +typedef struct e_pad_power_t +{ + uint32_t p0_pwr; /**< Pins output power for P0 */ + uint32_t p1_pwr; /**< Pins output power for P1 */ + #if BSP_FEATURE_IO_PORT2_GPIO_COUNT > 0 + uint16_t p2_pwr; /**< Pins output Power for P2 */ + #endif +} pad_power_t; + +/** Pins driving strength configuration structure */ +typedef struct e_pad_weak_t +{ + #if BSP_FEATURE_IO_HAS_WEAK_CONFIG_PER_PORT + uint32_t p0_pwr; /**< Pins driving strength for P0 */ + uint32_t p1_pwr; /**< Pins driving strength for P1 */ + #if BSP_FEATURE_IO_PORT2_GPIO_COUNT > 0 + uint32_t p2_pwr; /**< Pins driving strength for P2 */ + #endif + #else + uint32_t aggregate; + #endif +} pad_weak_t; + +/* TIN-TODO: Selecting a clock output is supported through GPIO_CLK_SEL_REG but was not implemented. */ +/** Map clock output to selectable pin structure */ +typedef struct e_sel_pin_clk_out_t +{ + bsp_io_clk_func_t clk_sel; /**< Select which clock to map */ + bool clk_en; /**< Enable mapping of the selected clock signal */ +} sel_pin_clk_out_t; + +/** Extended configuration struct */ +typedef struct st_gpio_w_extended_cfg +{ + pad_power_t power; /**< Pins power configuration */ + pad_weak_t weak_pad_power; /**< Pins driving strength configuration */ + bsp_io_clk_output_t fixed_pin_clk_out; /**< Map clock output to fixed pin */ + sel_pin_clk_out_t sel_pin_clk_out; /**< Map clock output to selectable pin */ +} gpio_w_extended_cfg_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_gpio_w; + +/** @endcond */ + +/*********************************************************************************************************************** + * Public APIs + **********************************************************************************************************************/ + +fsp_err_t R_GPIO_W_Open(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); +fsp_err_t R_GPIO_W_Close(ioport_ctrl_t * const p_ctrl); +fsp_err_t R_GPIO_W_PinsCfg(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); +fsp_err_t R_GPIO_W_PinCfg(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg); +fsp_err_t R_GPIO_W_PinEventInputRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event); +fsp_err_t R_GPIO_W_PinEventOutputWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value); +fsp_err_t R_GPIO_W_PinRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value); +fsp_err_t R_GPIO_W_PinWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level); +fsp_err_t R_GPIO_W_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_GPIO_W_PortEventInputRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * event_data); +fsp_err_t R_GPIO_W_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_GPIO_W_PortRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value); +fsp_err_t R_GPIO_W_PortWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask); + +/*******************************************************************************************************************//** + * @} (end defgroup GPIO_W) + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif // R_GPIO_W_H diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_uart_w.h b/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_uart_w.h new file mode 100644 index 000000000000..46efbecdbdce --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/inc/instances/r_uart_w.h @@ -0,0 +1,232 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef R_UART_W_H +#define R_UART_W_H + +/*******************************************************************************************************************//** + * @addtogroup UART_W + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "r_uart_api.h" +#include "r_uart_w_cfg.h" +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR + #include "FreeRTOS.h" + #include "event_groups.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 + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define DEFAULT_UART_W_IRQ_PRIORITY 5 + +#if !BSP_MCU_GROUP_RA6W1 + #define UART1_CHANNEL_NUM 0 + #define UART2_CHANNEL_NUM 1 + #define UART3_CHANNEL_NUM 2 + #define UART4_CHANNEL_NUM 3 +#endif + +#if (BSP_FEATURE_UART_W_VALID_CHANNEL_MASK & 0x1) + #define UART_W_CHANNEL_OFFSET 0 +#elif (BSP_FEATURE_UART_W_VALID_CHANNEL_MASK & 0x2) + #define UART_W_CHANNEL_OFFSET 1 +#endif + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** UART flow control mode definition */ +typedef enum e_uart_w_auto_flow_control +{ + UART_W_AUTO_FLOW_CONTROL_DISABLED = 0, ///< Disable auto flow control + UART_W_AUTO_FLOW_CONTROL_ENABLED = 1, ///< Enable auto flow control +} uart_w_auto_flow_control_t; + +typedef enum e_uart_w_loop_back +{ + UART_W_LOOP_BACK_DISABLE = 0, ///< Disable loop back + UART_W_LOOP_BACK_ENABLE = 1, ///< Enable loop back +} uart_w_loop_back_t; + +typedef enum e_uart_w_fifo_enable +{ + UART_W_FIFO_DISABLE = 0, ///< Disable fifo + UART_W_FIFO_ENABLE = 1, ///< Enable fifo +} uart_w_fifo_enable_t; + +typedef enum e_uart_w_extended_data_bits +{ + UART_W_EXTENDED_DATA_BITS_DISABLE = 0, ///< Disable extended word length configuration + UART_W_EXTENDED_DATA_BITS_ENABLE = 1, ///< Enable extended word length configuration +} uart_w_extended_data_bits_t; + +/** UART Data bit length definition */ +typedef enum e_uart_w_data_bits +{ + UART_W_DATA_BITS_5 = 0U, ///< Data bits 5-bit + UART_W_DATA_BITS_6 = 1U, ///< Data bits 6-bit + UART_W_DATA_BITS_7 = 2U, ///< Data bits 7-bit + UART_W_DATA_BITS_8 = 3U, ///< Data bits 8-bit +} uart_w_data_bits_t; + +/** Receive FIFO trigger configuration. */ +typedef enum e_uart_w_rx_fifo_trigger +{ + UART_W_RX_FIFO_TRIGGER_EIGHTH = 0x0, ///< Received Data Available Interrupt when FIFO is 1/8 full + UART_W_RX_FIFO_TRIGGER_QUARTER = 0x1, ///< Received Data Available Interrupt when FIFO is 1/4 full + UART_W_RX_FIFO_TRIGGER_HALF = 0x2, ///< Received Data Available Interrupt when FIFO is 1/2 full + UART_W_RX_FIFO_TRIGGER_THREE_QUARTERS = 0x3, ///< Received Data Available Interrupt when FIFO is 3/4 full + UART_W_RX_FIFO_TRIGGER_SEVEN_EIGHTHS = 0x4, ///< Received Data Available Interrupt when FIFO is 7/8 full +} uart_w_rx_fifo_trigger_t; + +/** Transmit FIFO trigger configuration. */ +typedef enum e_uart_w_tx_fifo_trigger +{ + UART_W_TX_FIFO_TRIGGER_EIGHTH = 0x0, ///< Transmit Data Interrupt when FIFO is 1/8 full + UART_W_TX_FIFO_TRIGGER_QUARTER = 0x1, ///< Transmit Data Interrupt when FIFO is 1/4 full + UART_W_TX_FIFO_TRIGGER_HALF = 0x2, ///< Transmit Data Interrupt when FIFO is 1/2 full + UART_W_TX_FIFO_TRIGGER_THREE_QUARTERS = 0x3, ///< Transmit Data Interrupt when FIFO is 3/4 full + UART_W_TX_FIFO_TRIGGER_SEVEN_EIGHTHS = 0x4, ///< Transmit Data Interrupt when FIFO is 7/8 full +} uart_w_tx_fifo_trigger_t; + +/** RS-485 Enable/Disable. */ +typedef enum e_uart_w_rs485_enable +{ + UART_W_RS485_DISABLE = 0, ///< RS-485 disabled. + UART_W_RS485_ENABLE = 1, ///< RS-485 enabled. +} uart_w_rs485_enable_t; + +/** UART channel control block. */ +typedef struct st_uart_w_instance_ctrl +{ + /* Parameters to control UART peripheral device */ + /* FIFO depth of the UART channel */ + uint8_t fifo_depth; + + /* Used to determine if the channel is configured */ + uint32_t open; + + /* 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 * 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 */ + UART_Type * p_reg; + + /* Pointer to callback that is called when a uart_event_t occurs. */ + void (* p_callback)(uart_callback_args_t *); + + /* Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. */ + uart_callback_args_t * p_callback_memory; + + /* Pointer to context to be passed into callback function */ + void * p_context; +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR + + /* Timer handler for uart tx completion */ + TimerHandle_t uart_tx_done_timer; + + /* Flag that indicates that uart trnsmition is ongoing */ + bool tx_onging_flag; + #endif +#endif +} uart_w_instance_ctrl_t; + +/** Register settings to achieve a desired baud rate and modulation duty. */ +typedef struct st_uart_w_baud_setting_t +{ + uint32_t fra_baud; ///< Baud rate fractional part + uint32_t int_baud; ///< Baud rate integer part +} uart_w_baud_setting_t; + +/** UART on SCI device Configuration */ +typedef struct st_uart_w_extended_cfg +{ + uart_w_baud_setting_t * p_baud_setting; ///< Register settings for a desired baud rate. + uart_w_loop_back_t loop_back_enable; ///< Enable loop back. + uart_w_fifo_enable_t fifo_enable; ///< Enable FIFO. + uart_w_rx_fifo_trigger_t rx_fifo_trigger; ///< RX FIFO trigger level. + uart_w_tx_fifo_trigger_t tx_fifo_trigger; ///< TX FIFO trigger level. + uart_w_auto_flow_control_t flow_control; ///< CTS/RTS function + uart_w_rs485_enable_t rs485_enable; ///< RS-485 settings. +#if !BSP_MCU_GROUP_RA6W1 + uart_w_extended_data_bits_t extended_data_bits_enable; ///< Enable extended data bits configuration. + uart_w_data_bits_t data_bits; ///< Data bit length (5, 6 or 7 or 8) + uint8_t gen_ipl; ///< Generic interrupt priority. + IRQn_Type gen_irq; +#endif ///< Generic interrupt IRQ number. +} uart_w_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_uart_w; + +/** @endcond */ + +fsp_err_t R_UART_W_Open(uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * const p_cfg); +fsp_err_t R_UART_W_Read(uart_ctrl_t * const p_api_ctrl, uint8_t * const p_dest, uint32_t const bytes); +fsp_err_t R_UART_W_Write(uart_ctrl_t * const p_api_ctrl, uint8_t const * const p_src, uint32_t const bytes); +fsp_err_t R_UART_W_BaudSet(uart_ctrl_t * const p_api_ctrl, void const * const p_baud_setting); +fsp_err_t R_UART_W_InfoGet(uart_ctrl_t * const p_api_ctrl, uart_info_t * const p_info); +fsp_err_t R_UART_W_Close(uart_ctrl_t * const p_api_ctrl); +fsp_err_t R_UART_W_Abort(uart_ctrl_t * const p_api_ctrl, uart_dir_t communication_to_abort); +fsp_err_t R_UART_W_ReadStop(uart_ctrl_t * const p_api_ctrl, uint32_t * remaining_bytes); + +#if BSP_MCU_GROUP_RA6W1 +fsp_err_t R_UART_W_ConfSet(uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * const p_cfg); +fsp_err_t R_UART_W_ReceiveSuspend(uart_ctrl_t * const p_api_ctrl); +fsp_err_t R_UART_W_ReceiveResume(uart_ctrl_t * const p_api_ctrl); + +#endif + +fsp_err_t R_UART_W_BaudCalculate(uint32_t baudrate, uart_w_baud_setting_t * const p_baud_setting); +fsp_err_t R_UART_W_CallbackSet(uart_ctrl_t * const p_api_ctrl, + void ( * p_callback)(uart_callback_args_t *), + void * const p_context, + uart_callback_args_t * const p_callback_memory); +bool R_UART_W_IsWritting(uart_ctrl_t * const p_api_ctrl); +bool R_UART_W_IsOpened(uart_ctrl_t * const p_api_ctrl); + +#if !BSP_MCU_GROUP_RA6W1 +void hw_clk_enable_uart_w_clk(uint8_t channel); + +#endif + +/*******************************************************************************************************************/ /** + * @} (end addtogroup UART_W) + **********************************************************************************************************************/ + +/* 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/ra6w1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h new file mode 100644 index 000000000000..c69923618c24 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h @@ -0,0 +1,202 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/* Ensure Renesas MCU variation definitions are included to ensure MCU + * specific register variations are handled correctly. */ +#ifndef BSP_FEATURE_H + #error "INTERNAL ERROR: bsp_feature.h must be included before renesas.h." +#endif + +/** @addtogroup Renesas + * @{ + */ + +/** @addtogroup RA + * @{ + */ + +#ifndef RA_H + #define RA_H + + #ifdef __cplusplus +extern "C" { + #endif + + #include "cmsis_compiler.h" + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ +/* IRQn_Type is provided in bsp_exceptions.h. Vectors generated by the FSP Configuration tool are in vector_data.h */ + +/** @} */ /* End of group Configuration_of_CMSIS */ + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + + #if BSP_MCU_GROUP_RA0E1 + #include "R7FA0E107.h" + #elif BSP_MCU_GROUP_RA0E2 + #include "R7FA0E209.h" + #elif BSP_MCU_GROUP_RA0L1 + #include "R7FA0L107.h" + #elif BSP_MCU_GROUP_RA2A1 + #include "R7FA2A1AB.h" + #elif BSP_MCU_GROUP_RA2A2 + #include "R7FA2A2AD.h" + #elif BSP_MCU_GROUP_RA2E1 + #include "R7FA2E1A9.h" + #elif BSP_MCU_GROUP_RA2E2 + #include "R7FA2E2A7.h" + #elif BSP_MCU_GROUP_RA2E3 + #include "R7FA2E307.h" + #elif BSP_MCU_GROUP_RA2L1 + #include "R7FA2L1AB.h" + #elif BSP_MCU_GROUP_RA2L2 + #include "R7FA2L209.h" + #elif BSP_MCU_GROUP_RA2T1 + #include "R7FA2T107.h" + #elif BSP_MCU_GROUP_RA4C1 + #include "R7FA4C1BD.h" + #elif BSP_MCU_GROUP_RA4E1 + #include "R7FA4E10D.h" + #elif BSP_MCU_GROUP_RA4E2 + #include "R7FA4E2B9.h" + #elif BSP_MCU_GROUP_RA4M1 + #include "R7FA4M1AB.h" + #elif BSP_MCU_GROUP_RA4M2 + #include "R7FA4M2AD.h" + #elif BSP_MCU_GROUP_RA4M3 + #include "R7FA4M3AF.h" + #elif BSP_MCU_GROUP_RA4T1 + #include "R7FA4T1BB.h" + #elif BSP_MCU_GROUP_RA4W1 + #include "R7FA4W1AD.h" + #elif BSP_MCU_GROUP_RA4L1 + #include "R7FA4L1BD.h" + #elif BSP_MCU_GROUP_RA6E1 + #include "R7FA6E10F.h" + #elif BSP_MCU_GROUP_RA6E2 + #include "R7FA6E2BB.h" + #elif BSP_MCU_GROUP_RA6M1 + #include "R7FA6M1AD.h" + #elif BSP_MCU_GROUP_RA6M2 + #include "R7FA6M2AF.h" + #elif BSP_MCU_GROUP_RA6M3 + #include "R7FA6M3AH.h" + #elif BSP_MCU_GROUP_RA6M4 + #include "R7FA6M4AF.h" + #elif BSP_MCU_GROUP_RA6M5 + #include "R7FA6M5BH.h" + #elif BSP_MCU_GROUP_RA6T1 + #include "R7FA6T1AD.h" + #elif BSP_MCU_GROUP_RA6T2 + #include "R7FA6T2BD.h" + #elif BSP_MCU_GROUP_RA6T3 + #include "R7FA6T3BB.h" + #elif BSP_MCU_GROUP_RA8D1 + #include "R7FA8D1BH.h" + #elif BSP_MCU_GROUP_RA8E1 + #include "R7FA8E1AF.h" + #elif BSP_MCU_GROUP_RA8E2 + #include "R7FA8E2AF.h" + #elif BSP_MCU_GROUP_RA8M1 + #include "R7FA8M1AH.h" + #elif BSP_MCU_GROUP_RA8P1 + #if 0U == BSP_CFG_CPU_CORE + #include "R7KA8P1KF_core0.h" + #elif 1U == BSP_CFG_CPU_CORE + #include "R7KA8P1KF_core1.h" + #else + #warning "Unsupported CPU number" + #endif + #elif BSP_MCU_GROUP_RA8T1 + #include "R7FA8T1AH.h" + #elif BSP_MCU_GROUP_RA8T2 + #if 0U == BSP_CFG_CPU_CORE + #include "R7KA8T2LF_core0.h" + #elif 1U == BSP_CFG_CPU_CORE + #include "R7KA8T2LF_core1.h" + #else + #warning "Unsupported CPU number" + #endif + #elif BSP_MCU_GROUP_RA6B1 + #if defined(BOARD_RA6B1_PRODK) + #include "../../../../../bsp_w/cmsis/Device/RENESAS/Include/R7KA6B1BG.h" + #else + #if __has_include("../../../../../bsp_w/cmsis/Device/RENESAS/Include/D3108BA.h") + #include "../../../../../bsp_w/cmsis/Device/RENESAS/Include/D3108BA.h" + #else + #include "../../../../../bsp_w/cmsis/Device/RENESAS/Include/R7KA6B1BG.h" + #endif + #endif + #elif BSP_MCU_GROUP_RA6W1 + #include "../../../../../bsp_w/cmsis/Device/RENESAS/Include/R7SA6W1CE.h" + #elif BSP_MCU_GROUP_RA6W3 + #include "../../../../../bsp_w/cmsis/Device/RENESAS/Include/R7SA6W3xx.h" + #elif BSP_MCU_GROUP_RA6B2 + #include "../../../../../bsp_w/cmsis/Device/RENESAS/Include/D3333.h" + #elif BSP_MCU_GROUP_RA6U1 + #if defined(BOARD_RA6U1_EK) + #include "../../../../../bsp_w/cmsis/Device/RENESAS/Include/R7KA6U1BG.h" + #endif + #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/ra6w1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h new file mode 100644 index 000000000000..30afe29e7e06 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2026 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/ra6w1-ek/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h new file mode 100644 index 000000000000..faa8da1086db --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2020 - 2026 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 + **********************************************************************************************************************/ + + #if !defined(BSP_API_OVERRIDE) + +/* 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; + #endif + + #ifdef __cplusplus +} + #endif + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/R7SA6W1CE.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/R7SA6W1CE.h new file mode 100644 index 000000000000..339fa346ed65 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/R7SA6W1CE.h @@ -0,0 +1,34879 @@ +/* + * Copyright (C) 2024 Renesas Electronics Corporation. + * This computer program includes Confidential, Proprietary Information + * of Renesas Electronics Corporation. All Rights Reserved. + * + * @file /workspaces/ahwang/bbtester/development/software_include/D3095BA/DA1640x.h + * @brief CMSIS HeaderFile + * @version 1.2 + * @date 31. October 2024 + * @note Generated by SVDConv V3.3.35 on Thursday, 31.10.2024 10:40:45 + * from File '/workspaces/ahwang/bbtester/development/software_include/D3095BA/datasheet_cmsis.svd', + */ + +/** @addtogroup Renesas Electronics Corporation + * @{ + */ + +/** @addtogroup DA1640x + * @{ + */ + +#ifndef DA1640X_H + #define DA1640X_H + + #ifdef __cplusplus +extern "C" { + #endif + + #ifndef CMSIS_STRIP_HEADER + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ + +typedef enum +{ +/* ======================================= ARM Cortex-M33 Specific Interrupt Numbers ======================================= */ + Reset_IRQn = -15, /*!< -15 Reset Vector, invoked on Power up and warm reset */ + NonMaskableInt_IRQn = -14, /*!< -14 Non maskable Interrupt, cannot be stopped or preempted */ + HardFault_IRQn = -13, /*!< -13 Hard Fault, all classes of Fault */ + MemoryManagement_IRQn = -12, /*!< -12 Memory Management, MPU mismatch, including Access Violation + * and No Match */ + BusFault_IRQn = -11, /*!< -11 Bus Fault, Pre-Fetch-, Memory Access Fault, other address/memory + * related Fault */ + UsageFault_IRQn = -10, /*!< -10 Usage Fault, i.e. Undef Instruction, Illegal State Transition */ + SecureFault_IRQn = -9, /*!< -9 Secure Fault Handler */ + SVCall_IRQn = -5, /*!< -5 System Service Call via SVC instruction */ + DebugMonitor_IRQn = -4, /*!< -4 Debug Monitor */ + PendSV_IRQn = -2, /*!< -2 Pendable request for system service */ + SysTick_IRQn = -1, /*!< -1 System Tick Timer */ +/* ========================================== DA1640x Specific Interrupt Numbers =========================================== */ + DMA_IRQn = 0, /*!< 0 General Purpose DMA interrupt request. */ + KDMA_IRQn = 1, /*!< 1 kDMA interrupt request */ + UART_IRQn = 2, /*!< 2 UART interrupt request. */ + UART2_IRQn = 3, /*!< 3 UART2 interrupt request. */ + UART3_IRQn = 4, /*!< 4 UART3 interrupt request. */ + I2C_IRQn = 5, /*!< 5 I2C interrupt request. */ + I2C2_IRQn = 6, /*!< 6 I2C2 interrupt request. */ + SPI_IRQn = 7, /*!< 7 SPI interrupt request. */ + SPI2_IRQn = 8, /*!< 8 SPI2 interrupt request. */ + DAI_TX_IRQn = 9, /*!< 9 DAI TX interrupt request. */ + DAI_RX_IRQn = 10, /*!< 10 DAI RX interrupt request. */ + SRC_IN_IRQn = 11, /*!< 11 SRC input interrupt request. */ + SRC_OUT_IRQn = 12, /*!< 12 SRC output interrupt request. */ + SDIO_IRQn = 13, /*!< 13 SDIO interrupt request. */ + SDIO_WKUP_IRQn = 14, /*!< 14 SDIO Wakeup interrupt request. */ + TDES_CBC_IRQn = 15, /*!< 15 TDES interrupt request. */ + PSK_SHA1_IRQn = 16, /*!< 16 PSK SHA1 interrupt request. */ + CLKCAL_IRQn = 18, /*!< 18 Clock Calibration interrupt request. */ + TIMER_IRQn = 19, /*!< 19 Timer interrupt request. */ + TIMER2_IRQn = 20, /*!< 20 Timer2 interrupt request. */ + TIMER3_IRQn = 21, /*!< 21 Timer3 interrupt request. */ + TIMER4_IRQn = 22, /*!< 22 Timer4 interrupt request. */ + TIMER5_IRQn = 23, /*!< 23 Timer5 interrupt request. */ + TIMER6_IRQn = 24, /*!< 24 Timer6 interrupt request. */ + TIMER7_IRQn = 25, /*!< 25 Timer7 interrupt request. */ + TIMER8_IRQn = 26, /*!< 26 Timer8 interrupt request. */ + CAPTIMER_IRQn = 27, /*!< 27 GPIO capture interrupt request. */ + SYSPLL_LOCK_IRQn = 28, /*!< 28 PLL480M lock interrupt request */ + AUX_ADC_IRQn = 29, /*!< 29 Aux ADC interrupt request */ + RTC_IF_EXTWK_IRQn = 30, /*!< 30 External wakeup interrupt request */ + RTC_IF_BLACK_IRQn = 31, /*!< 31 Voltage blackout interrupt request */ + RTC_IF_BROWN_IRQn = 32, /*!< 32 Voltage brownout interrupt request */ + RTC_IF_PCNT_IRQn = 33, /*!< 33 Pulse count interrupt request */ + RTC_IF_BCF_MSR_IRQn = 34, /*!< 34 Bus clock measure interrupt request */ + RTC_IF_RTC_ACC_IRQn = 35, /*!< 35 access to RTC Core interrupt request */ + RTC_IF_EXP_IRQn = 36, /*!< 36 RTC mirror Free running count interrupt request */ + RTC_IF_LMR_IRQn = 37, /*!< 37 FRC to mirroring, loading done interrupt request */ + MRM_IRQn = 38, /*!< 38 MRM */ + DCACHE_MRM_IRQn = 39, /*!< 39 Data cache Miss Rate Monitor interrupt request. */ + CC312_IRQn = 40, /*!< 40 CryptoCell-312 interrupt request. */ + GPIO_P0_IRQn = 41, /*!< 41 GPIO port 0 toggle interrupt request. */ + GPIO_P1_IRQn = 42, /*!< 42 GPIO port 1 toggle interrupt request. */ + FPLL_LOCK_IRQn = 43, /*!< 43 FPLL lock interrupt request */ + WIFI_HSU_IRQn = 44, /*!< 44 WIFI Hardware Security Unit interrupt request. */ + WIFI_MODEM_IRQn = 45, /*!< 45 WIFI Modem interrupt request. */ + WIFI_MACTIMER_IRQn = 46, /*!< 46 WIFI MAC TX/RX Timer interrupt request. */ + WIFI_MACOTHER_IRQn = 47, /*!< 47 WIFI MAC TX/RX misc interrupt request. */ + WIFI_MACRX_IRQn = 48, /*!< 48 WIFI MAC RX Trigger interrupt request. */ + WIFI_MACTX_IRQn = 49, /*!< 49 WIFI MAC TX Trigger interrupt request. */ + WIFI_MACPROT_IRQn = 50, /*!< 50 WIFI MAC Protocol Trigger interrupt request. */ + WIFI_MACINTGEN_IRQn = 51, /*!< 51 WIFI MAC General interrupt request. */ + WIFI_MACBCN_IRQn = 52, /*!< 52 WIFI MAC Beacon Reception interrupt request. */ + WIFI_RC_IRQn = 53, /*!< 53 WIFI Radio Controller interrupt request. */ + SDEMMC_IRQn = 54, /*!< 54 SDEMMC interrupt request. */ + SDEMMC_WKUP_IRQn = 55, /*!< 55 SDEMMC Wakeup interrupt request. */ + KDMA_CH0_IRQn = 60, /*!< 60 kDMA channel 0 interrupt request */ + KDMA_CH1_IRQn = 61, /*!< 61 kDMA channel 1 interrupt request */ + KDMA_CH2_IRQn = 62, /*!< 62 kDMA channel 2 interrupt request */ + KDMA_CH3_IRQn = 63, /*!< 63 kDMA channel 3 interrupt request */ + KDMA_CH4_IRQn = 64, /*!< 64 kDMA channel 4 interrupt request */ + KDMA_CH5_IRQn = 65, /*!< 65 kDMA channel 5 interrupt request */ + KDMA_CH6_IRQn = 66, /*!< 66 kDMA channel 6 interrupt request */ + KDMA_CH7_IRQn = 67, /*!< 67 kDMA channel 7 interrupt request */ + KDMA_CH8_IRQn = 68, /*!< 68 kDMA channel 8 interrupt request */ + KDMA_CH9_IRQn = 69, /*!< 69 kDMA channel 9 interrupt request */ + KDMA_CH10_IRQn = 70, /*!< 70 kDMA channel 10 interrupt request */ + KDMA_CH11_IRQn = 71 /*!< 71 kDMA channel 11 interrupt request */ +} IRQn_Type; + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/* ========================== Configuration of the ARM Cortex-M33 Processor and Core Peripherals =========================== */ + #define __CM33_REV 0x0100U /*!< 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 */ + + #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 Peripheral Section ================ */ +/* =========================================================================================================================== */ + + #endif /*CMSIS_STRIP_HEADER*/ + +/** @addtogroup Device_Peripheral_peripherals + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ APU_AUD ================ */ +/* =========================================================================================================================== */ + +/** + * @brief APU_AUD registers (APU_AUD) + */ + +typedef struct /*!< (@ 0x400E0400) APU_AUD Structure */ +{ + union + { + __IOM uint32_t APU_DMIC_CTRL_REG; /*!< (@ 0x00000000) DMIC delay and master mode control */ + + struct + { + __IOM uint32_t DMIC_MASTER_MODE : 1; /*!< [0..0] DMIC master mode0: Slave mode (DMICx_IN_DELAY)1: Master + * mode (DMICx_PHASE) */ + uint32_t : 15; + __IOM uint32_t DMIC1_IN_DELAY : 2; /*!< [17..16] DMIC1 input delay0: No delay1: 6ns2: 12ns3: 18ns */ + uint32_t : 14; + } APU_DMIC_CTRL_REG_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t APU_DMIC_DIV_REG; /*!< (@ 0x0000000C) DMIC clock control */ + + struct + { + __IOM uint32_t DMIC1_CLK_EN : 1; /*!< [0..0] DMIC1 clock divider enable for sampling input data0: + * Disable1: Enable */ + uint32_t : 7; + __IOM uint32_t DMIC_DIV : 5; /*!< [12..8] DMIC out clock divider from AUD_CLK0x00: Divided by + * 320x02: Divided by 20x04: Divided by 4..0x1E: Divided by + * 30 */ + uint32_t : 3; + __IOM uint32_t DMIC1_PHASE : 5; /*!< [20..16] Clock phase shift to sampling DMIC1 input data0x00: + * Sampled at DMIC CLK0x01- (DMIC_DIV -2): Sampled at DMIC_CLK + * delayed with half of DMIC_PHASE cyclesOthers: Reserved */ + uint32_t : 11; + } APU_DMIC_DIV_REG_b; + }; + __IM uint32_t RESERVED1[5]; + + union + { + __IOM uint32_t APU_MAIN_DIV_REG; /*!< (@ 0x00000024) Main divider control */ + + struct + { + __IOM uint32_t APU_MAIN_DIV : 12; /*!< [11..0] APU main divider0x0000: divided by 40960x0001: divided + * by 10x0002: divided by 20xFFFF: divided by 4095 */ + __IOM uint32_t APU_MAIN_DIV_EN : 1; /*!< [12..12] APU main divider enable0: Disable1: Enable */ + uint32_t : 19; + } APU_MAIN_DIV_REG_b; + }; + + union + { + __IOM uint32_t APU_SYNC_DIV_SEL_REG; /*!< (@ 0x00000028) APU SYNC control for APU SYNC DIV */ + + struct + { + __IOM uint32_t APU_SYNC_DIV_SEL : 2; /*!< [1..0] SYNC source selection for APU SYNC DIV0x00: SRC1_in_M0x01: + * SRC1_out_M0x02: DAI1_SYNC0x03: MAIN_DIVNote: Refer to the + * datasheet PCM_SYNC Matrix diagram for invalid combinations */ + uint32_t : 30; + } APU_SYNC_DIV_SEL_REG_b; + }; + + union + { + __IOM uint32_t APU_SYNC_DIV_REG; /*!< (@ 0x0000002C) APU SYNC divider control */ + + struct + { + __IOM uint32_t APU_SYNC_DIV : 5; /*!< [4..0] APU SYNC divider0x00: divided by 320x01: divided by 10x1F: + * divided by31 */ + uint32_t : 3; + __IOM uint32_t APU_SYNC_DIV_EN : 1; /*!< [8..8] APU SYNC divider enable0: Disable1: Enable */ + uint32_t : 23; + } APU_SYNC_DIV_REG_b; + }; +} APU_AUD_Type; /*!< Size = 48 (0x30) */ + +/* =========================================================================================================================== */ +/* ================ APU_DSP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief APU_DSP registers (APU_DSP) + */ + +typedef struct /*!< (@ 0x400E0800) APU_DSP Structure */ +{ + union + { + __IOM uint32_t APU_CTRL_REG; /*!< (@ 0x00000000) audio IP enable */ + + struct + { + __IOM uint32_t DAI1_EN : 1; /*!< [0..0] DAI1 enable in APU0: Disable1: Enable */ + uint32_t : 31; + } APU_CTRL_REG_b; + }; + + union + { + __IOM uint32_t APU_MUX_CTRL_REG; /*!< (@ 0x00000004) APU mux control */ + + struct + { + uint32_t : 24; + __IOM uint32_t APU_DSP_MUX_CTL : 8; /*!< [31..24] bus1_to_src = APU_DSP_MUX_CTL[0]bus2_to_src = APU_DSP_MUX_CTL[1]src_t + * _bus1 = APU_DSP_MUX_CTL[2]src_to_bus2 = APU_DSP_MUX_CTL[3]src_to_dai + * = APU_DSP_MUX_CTL[4]bus3_to_dai = APU_DSP_MUX_CTL[5]dai_to_src + * = APU_DSP_MUX_CTL[6]dai_to_bus3 = APU_DSP_MUX_CTL[7] */ + } APU_MUX_CTRL_REG_b; + }; + + union + { + __IOM uint32_t APU_SYNC_SRC1IN_SEL_REG; /*!< (@ 0x00000008) APU SYNC control for SRC1 IN */ + + struct + { + __IOM uint32_t SRC1_IN_A_SEL : 2; /*!< [1..0] SYNC source selection for SRC1_IN_A0x00: SRC1_in_M0x01: + * SRC1_out_M0x02: DAI1_SYNC0x03: SYNC_DIVNote: Refer to the + * datasheet APU_SYNC Matrix diagram for invalid combinations */ + uint32_t : 30; + } APU_SYNC_SRC1IN_SEL_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t APU_SYNC_SRC1OUT_SEL_REG; /*!< (@ 0x00000010) APU SYNC control for SRC1 OUT */ + + struct + { + __IOM uint32_t SRC1_OUT_A_SEL : 2; /*!< [1..0] SYNC source selection for SRC1_OUT_Asame as SRC1_IN_A_SEL */ + uint32_t : 30; + } APU_SYNC_SRC1OUT_SEL_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t APU_PCM_CLK_REG; /*!< (@ 0x00000020) PCM clock enable */ + + struct + { + __IOM uint32_t PCM1_CLK_EN : 1; /*!< [0..0] DAI clock divider enable0: Disable1: Enable */ + uint32_t : 1; + __IOM uint32_t PCM_USE_FDIV : 1; /*!< [2..2] PCM_USE_FDIV */ + uint32_t : 29; + } APU_PCM_CLK_REG_b; + }; + + union + { + __IOM uint32_t APU_PCM1_DIV_REG; /*!< (@ 0x00000024) PCM clock divider control */ + + struct + { + __IOM uint32_t PCM1_DIV : 7; /*!< [6..0] PCM_DIV clock divider0x0: divide by 80x1: divide by 10x2: + * divide by 20x3: divide by 30x4: divide by 40x5: divide + * by 50x6: divide by 60x7: divide by 70x8-0x7F:reserved */ + uint32_t : 25; + } APU_PCM1_DIV_REG_b; + }; + + union + { + __IOM uint32_t APU_PCM1_FDIV_REG; /*!< (@ 0x00000028) APU_PCM1_FDIV_REG */ + + struct + { + __IOM uint32_t PCM1_FDIV : 32; /*!< [31..0] PCM1_FDIV */ + } APU_PCM1_FDIV_REG_b; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IOM uint32_t APU_PCM1_FDIV_HIGH_REG; /*!< (@ 0x00000034) APU_PCM1_FDIV_HIGH_REG */ + + struct + { + __IOM uint32_t PCM1_FDIV_HIGH : 16; /*!< [15..0] PCM1_FDIV_HIGH */ + uint32_t : 16; + } APU_PCM1_FDIV_HIGH_REG_b; + }; +} APU_DSP_Type; /*!< Size = 56 (0x38) */ + +/* =========================================================================================================================== */ +/* ================ AUXADC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief AUXADC registers (AUXADC) + */ + +typedef struct /*!< (@ 0x40090500) AUXADC Structure */ +{ + union + { + __IOM uint32_t XADC12B_CTRL_REG; /*!< (@ 0x00000000) AuxADC 12b Control register */ + + struct + { + __IOM uint32_t ADC12B_RESET : 1; /*!< [0..0] ASIC Aux ADC12B control signal for Reset.0: no reset1: + * reset */ + __IOM uint32_t ADC12B_PWRDOEN : 1; /*!< [1..1] ASIC Aux ADC12B control signal for Power down.0: no power + * down1: power downFPGA Aux ADC12B Power on,0: power off1: + * power on */ + __IOM uint32_t ADC12B_CS : 3; /*!< [4..2] ASIC Aux ADC12B control signal.CS[2:0]: Select input + * pin,0: VIN11: VIN22: for ADC testFPGA Aux ADC7472 for 12-bit + * modebit[2] : XADC_AD7472_CS */ + __IOM uint32_t ADC12B_TRIM : 3; /*!< [7..5] ASIC Aux ADC12B control signal.TRIM[2:0]: Trim VREF Voltage. */ + __IOM uint32_t ADC12B_DATA_FORMAT : 1; /*!< [8..8] ASIC aux adc12b data format0: 2's complemnt1: offset + * binary */ + uint32_t : 23; + } XADC12B_CTRL_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t SWITCHING_MODE_REG; /*!< (@ 0x00000008) Switching mode register */ + + struct + { + __IOM uint32_t SWITCHING_MODE : 9; /*!< [8..0] AUX ADC switching mode :if change setting value, should + * set "0x00" -> "0x1xx"[8] : switching auto enable[7] : 12-bit + * 4th enable[6] : 12-bit 3rd enable[5] : 12-bit 2nd enable[4] + * : 12-bit 1st enable */ + uint32_t : 23; + } SWITCHING_MODE_REG_b; + }; + + union + { + __IOM uint32_t XADC12B_THR_INTR_MASK_REG; /*!< (@ 0x0000000C) Interrupt Mask register */ + + struct + { + __IOM uint32_t OVER_THR_FIFO0_MASK : 1; /*!< [0..0] Interrupt mask enable for FIFO0Refer to AX12B_INT_THR_OVER_REG */ + __IOM uint32_t OVER_THR_FIFO1_MASK : 1; /*!< [1..1] Interrupt mask enable for FIFO1Refer to AX12B_INT_THR_OVER_REG */ + __IOM uint32_t OVER_THR_FIFO2_MASK : 1; /*!< [2..2] Interrupt mask enable for FIFO2Refer to AX12B_INT_THR_OVER_REG */ + __IOM uint32_t OVER_THR_FIFO3_MASK : 1; /*!< [3..3] Interrupt mask enable for FIFO3Refer to AX12B_INT_THR_OVER_REG */ + __IOM uint32_t UNDER_THR_FIFO0_MASK : 1; /*!< [4..4] Interrupt mask enable for FIFO0Refer to AX12B_INT_THR_UNDER_REG */ + __IOM uint32_t UNDER_THR_FIFO1_MASK : 1; /*!< [5..5] Interrupt mask enable for FIFO1Refer to AX12B_INT_THR_UNDER_REG */ + __IOM uint32_t UNDER_THR_FIFO2_MASK : 1; /*!< [6..6] Interrupt mask enable for FIFO2Refer to AX12B_INT_THR_UNDER_REG */ + __IOM uint32_t UNDER_THR_FIFO3_MASK : 1; /*!< [7..7] Interrupt mask enable for FIFO3Refer to AX12B_INT_THR_UNDER_REG */ + __IOM uint32_t DIFF_THR_FIFO0_MASK : 1; /*!< [8..8] Interrupt mask enable for FIFO0Refer to AX12B_INT_THR_DIFF_REG */ + __IOM uint32_t DIFF_THR_FIFO1_MASK : 1; /*!< [9..9] Interrupt mask enable for FIFO1Refer to AX12B_INT_THR_DIFF_REG */ + __IOM uint32_t DIFF_THR_FIFO2_MASK : 1; /*!< [10..10] Interrupt mask enable for FIFO2Refer to AX12B_INT_THR_DIFF_REG */ + __IOM uint32_t DIFF_THR_FIFO3_MASK : 1; /*!< [11..11] Interrupt mask enable for FIFO3Refer to AX12B_INT_THR_DIFF_REG */ + uint32_t : 20; + } XADC12B_THR_INTR_MASK_REG_b; + }; + + union + { + __IOM uint32_t XADC12B_THR_INTR_CLR_REG; /*!< (@ 0x00000010) Interrupt Clear register */ + + struct + { + __IOM uint32_t OVER_THR_FIFO0_CLR : 1; /*!< [0..0] Over Level interrupt clear of FIFO0 */ + __IOM uint32_t OVER_THR_FIFO1_CLR : 1; /*!< [1..1] Over Level interrupt clear of FIFO1 */ + __IOM uint32_t OVER_THR_FIFO2_CLR : 1; /*!< [2..2] Over Level interrupt clear of FIFO2 */ + __IOM uint32_t OVER_THR_FIFO3_CLR : 1; /*!< [3..3] Over Level interrupt clear of FIFO3 */ + __IOM uint32_t UNDER_THR_FIFO0_CLR : 1; /*!< [4..4] Under Level interrupt clear of FIFO0 */ + __IOM uint32_t UNDER_THR_FIFO1_CLR : 1; /*!< [5..5] Under Level interrupt clear of FIFO1 */ + __IOM uint32_t UNDER_THR_FIFO2_CLR : 1; /*!< [6..6] Under Level interrupt clear of FIFO2 */ + __IOM uint32_t UNDER_THR_FIFO3_CLR : 1; /*!< [7..7] Under Level interrupt clear of FIFO3 */ + __IOM uint32_t DIFF_THR_FIFO0_CLR : 1; /*!< [8..8] Threshold Difference interrupt clear of FIFO0 */ + __IOM uint32_t DIFF_THR_FIFO1_CLR : 1; /*!< [9..9] Threshold Difference interrupt clear of FIFO1 */ + __IOM uint32_t DIFF_THR_FIFO2_CLR : 1; /*!< [10..10] Threshold Difference interrupt clear of FIFO2 */ + __IOM uint32_t DIFF_THR_FIFO3_CLR : 1; /*!< [11..11] Threshold Difference interrupt clear of FIFO3 */ + uint32_t : 20; + } XADC12B_THR_INTR_CLR_REG_b; + }; + + union + { + __IOM uint32_t XADC12B_FIFO_INTR_MASK_REG; /*!< (@ 0x00000014) FIFO level Interrupt Mask register */ + + struct + { + __IOM uint32_t HL_FIFO0_MASK : 1; /*!< [0..0] Interrupt mask for half level of FIFO 0 */ + __IOM uint32_t HL_FIFO1_MASK : 1; /*!< [1..1] Interrupt mask for half level of FIFO 1 */ + __IOM uint32_t HL_FIFO2_MASK : 1; /*!< [2..2] Interrupt mask for half level of FIFO 2 */ + __IOM uint32_t HL_FIFO3_MASK : 1; /*!< [3..3] Interrupt mask for half level of FIFO 3 */ + __IOM uint32_t FL_FIFO0_MASK : 1; /*!< [4..4] Interrupt mask for full level of FIFO 0 */ + __IOM uint32_t FL_FIFO1_MASK : 1; /*!< [5..5] Interrupt mask for full level of FIFO 1 */ + __IOM uint32_t FL_FIFO2_MASK : 1; /*!< [6..6] Interrupt mask for full level of FIFO 2 */ + __IOM uint32_t FL_FIFO3_MASK : 1; /*!< [7..7] Interrupt mask for full level of FIFO 3 */ + uint32_t : 24; + } XADC12B_FIFO_INTR_MASK_REG_b; + }; + + union + { + __IOM uint32_t XADC12B_INTR_STATUS_REG; /*!< (@ 0x00000018) Interrupt Status register */ + + struct + { + __IM uint32_t HL_FIFO0_STS : 1; /*!< [0..0] Interrupt status for half level of FIFO 0 */ + __IM uint32_t HL_FIFO1_STS : 1; /*!< [1..1] Interrupt status for half level of FIFO 1 */ + __IM uint32_t HL_FIFO2_STS : 1; /*!< [2..2] Interrupt status for half level of FIFO 2 */ + __IM uint32_t HL_FIFO3_STS : 1; /*!< [3..3] Interrupt status for half level of FIFO 3 */ + __IM uint32_t FL_FIFO0_STS : 1; /*!< [4..4] Interrupt status for full level of FIFO 0 */ + __IM uint32_t FL_FIFO1_STS : 1; /*!< [5..5] Interrupt status for full level of FIFO 1 */ + __IM uint32_t FL_FIFO2_STS : 1; /*!< [6..6] Interrupt status for full level of FIFO 2 */ + __IM uint32_t FL_FIFO3_STS : 1; /*!< [7..7] Interrupt status for full level of FIFO 3 */ + __IM uint32_t OVER_THR_FIFO0_STS : 1; /*!< [8..8] Interrupt status for Threshold Over of FIFO 0 */ + __IM uint32_t OVER_THR_FIFO1_STS : 1; /*!< [9..9] Interrupt status for Threshold Over of FIFO 1 */ + __IM uint32_t OVER_THR_FIFO2_STS : 1; /*!< [10..10] Interrupt status for Threshold Over of FIFO 2 */ + __IM uint32_t OVER_THR_FIFO3_STS : 1; /*!< [11..11] Interrupt status for Threshold Over of FIFO 3 */ + __IM uint32_t UNDER_THR_FIFO0_STS : 1; /*!< [12..12] Interrupt status for Threshold Under of FIFO 0 */ + __IM uint32_t UNDER_THR_FIFO1_STS : 1; /*!< [13..13] Interrupt status for Threshold Under of FIFO 1 */ + __IM uint32_t UNDER_THR_FIFO2_STS : 1; /*!< [14..14] Interrupt status for Threshold Under of FIFO 2 */ + __IM uint32_t UNDER_THR_FIFO3_STS : 1; /*!< [15..15] Interrupt status for Threshold Under of FIFO 3 */ + __IM uint32_t DIFF_THR_FIFO0_STS : 1; /*!< [16..16] Interrupt status for Threshold Difference of FIFO 0 */ + __IM uint32_t DIFF_THR_FIFO1_STS : 1; /*!< [17..17] Interrupt status for Threshold Difference of FIFO 1 */ + __IM uint32_t DIFF_THR_FIFO2_STS : 1; /*!< [18..18] Interrupt status for Threshold Difference of FIFO 2 */ + __IM uint32_t DIFF_THR_FIFO3_STS : 1; /*!< [19..19] Interrupt status for Threshold Difference of FIFO 3 */ + uint32_t : 12; + } XADC12B_INTR_STATUS_REG_b; + }; + + union + { + __IOM uint32_t XADC12B_DMA_EN_REG; /*!< (@ 0x0000001C) FIFO DMA enable register */ + + struct + { + __IOM uint32_t FIFO0_ENABLE : 1; /*!< [0..0] FIFO 0 DMA enable0: diable1: enable */ + __IOM uint32_t FIFO1_ENABLE : 1; /*!< [1..1] FIFO 1 DMA enable0: diable1: enable */ + __IOM uint32_t FIFO2_ENABLE : 1; /*!< [2..2] FIFO 2 DMA enable0: diable1: enable */ + __IOM uint32_t FIFO3_ENABLE : 1; /*!< [3..3] FIFO 3 DMA enable0: diable1: enable */ + uint32_t : 28; + } XADC12B_DMA_EN_REG_b; + }; + + union + { + __IOM uint32_t FIFO0_DMA_DATA_REG; /*!< (@ 0x00000020) ADC12b sample data register */ + + struct + { + __IM uint32_t FIFO0_DMA_DATA : 16; /*!< [15..0] FIFO0 DMA data,Intterupt indicate 4 consecutive sampled + * data */ + uint32_t : 16; + } FIFO0_DMA_DATA_REG_b; + }; + + union + { + __IOM uint32_t FIFO1_DMA_DATA_REG; /*!< (@ 0x00000024) ADC16b sample data register */ + + struct + { + __IM uint32_t FIFO1_DMA_DATA : 16; /*!< [15..0] FIFO1 DMA data,Intterupt indicate 4 consecutive sampled + * data */ + uint32_t : 16; + } FIFO1_DMA_DATA_REG_b; + }; + + union + { + __IOM uint32_t FIFO2_DMA_DATA_REG; /*!< (@ 0x00000028) ADC12b sample data register for FPGA */ + + struct + { + __IM uint32_t FIFO2_DMA_DATA : 16; /*!< [15..0] FIFO2 DMA data,Intterupt indicate 4 consecutive sampled + * data */ + uint32_t : 16; + } FIFO2_DMA_DATA_REG_b; + }; + + union + { + __IOM uint32_t FIFO3_DMA_DATA_REG; /*!< (@ 0x0000002C) ADC16b sample data register for FPGA */ + + struct + { + __IM uint32_t FIFO3_DMA_DATA : 16; /*!< [15..0] FIFO3 DMA data,Intterupt indicate 4 consecutive sampled + * data */ + uint32_t : 16; + } FIFO3_DMA_DATA_REG_b; + }; + + union + { + __IOM uint32_t XADC12B_RM_SAMPLE_REG; /*!< (@ 0x00000030) Removing Sample register */ + + struct + { + uint32_t : 8; + __IOM uint32_t XADC12B_RM_SAMPLE : 8; /*!< [15..8] The number of removing initial samples of AuxAdc 12B */ + uint32_t : 16; + } XADC12B_RM_SAMPLE_REG_b; + }; + + union + { + __IOM uint32_t XADC12B_ST_SAMPLE_REG; /*!< (@ 0x00000034) Sampleing interval register */ + + struct + { + uint32_t : 4; + __IOM uint32_t XADC12B_SP_INTERVAL : 4; /*!< [7..4] The number of sampling interval of aux adc12B in Auto + * switching mode0, 1 : internal none2~15 : N-1 interval sampling */ + uint32_t : 24; + } XADC12B_ST_SAMPLE_REG_b; + }; + + union + { + __IOM uint32_t XADC12B_INT_THR_OVER_REG; /*!< (@ 0x00000038) AuxADC 12b Over Threshold level register */ + + struct + { + __IOM uint32_t OVER_THR_EN : 1; /*!< [0..0] Over Threshold enable0: disable1: enable */ + __IOM uint32_t OVER_THR_VAL : 15; /*!< [15..1] Over Threshould value of interrupt */ + uint32_t : 16; + } XADC12B_INT_THR_OVER_REG_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t XADC12B_INT_THR_UNDER_REG; /*!< (@ 0x00000040) AuxADC 12b Under Threshold level register */ + + struct + { + __IOM uint32_t UNDER_THR_EN : 1; /*!< [0..0] Under Threshold enable0: disable1: enable */ + __IOM uint32_t UNDER_THR_VAL : 15; /*!< [15..1] Under Threshould value of interrupt */ + uint32_t : 16; + } XADC12B_INT_THR_UNDER_REG_b; + }; + __IM uint32_t RESERVED2; + + union + { + __IOM uint32_t XADC12B_INT_THR_DIFF_REG; /*!< (@ 0x00000048) AuxADC 12b Difference Threshold level register */ + + struct + { + __IOM uint32_t DIFF_THR_EN : 1; /*!< [0..0] Difference Threshold enable0: disable1: enable */ + __IOM uint32_t DIFF_THR_VAL : 15; /*!< [15..1] Difference Threshould value of interrupt */ + uint32_t : 16; + } XADC12B_INT_THR_DIFF_REG_b; + }; + __IM uint32_t RESERVED3; + + union + { + __IOM uint32_t FIFO0_DATA_CURR_REG; /*!< (@ 0x00000050) AuxAdc 12b data register */ + + struct + { + __IM uint32_t FIFO0_CURR_DATA : 16; /*!< [15..0] Current FIFO 0 ADC data */ + uint32_t : 16; + } FIFO0_DATA_CURR_REG_b; + }; + + union + { + __IOM uint32_t FIFO1_DATA_CURR_REG; /*!< (@ 0x00000054) AuxAdc 16b data register */ + + struct + { + __IM uint32_t FIFO1_CURR_DATA : 16; /*!< [15..0] Current FIFO 1 ADC data */ + uint32_t : 16; + } FIFO1_DATA_CURR_REG_b; + }; + + union + { + __IOM uint32_t FIFO2_DATA_CURR_REG; /*!< (@ 0x00000058) AuxAdc 12b data register */ + + struct + { + __IM uint32_t FIFO2_CURR_DATA : 16; /*!< [15..0] Current FIFO 2 ADC data */ + uint32_t : 16; + } FIFO2_DATA_CURR_REG_b; + }; + + union + { + __IOM uint32_t FIFO3_DATA_CURR_REG; /*!< (@ 0x0000005C) AuxAdc 16b data register */ + + struct + { + __IM uint32_t FIFO3_CURR_DATA : 16; /*!< [15..0] Current FIFO 3 ADC data */ + uint32_t : 16; + } FIFO3_DATA_CURR_REG_b; + }; + + union + { + __IOM uint32_t TIMESTAMP_CTRL_REG; /*!< (@ 0x00000060) Time Stamp register */ + + struct + { + uint32_t : 8; + __IOM uint32_t TIMESTAMP_12B : 4; /*!< [11..8] Time Stamp base count level[11:8] : 12-bit ADC (default + * = 'd5) */ + uint32_t : 20; + } TIMESTAMP_CTRL_REG_b; + }; + __IM uint32_t RESERVED4[3]; + + union + { + __IOM uint32_t FXADC_CLK_CTRL_REG; /*!< (@ 0x00000070) Clock control register for FPGA */ + + struct + { + uint32_t : 8; + __IOM uint32_t FXADC12B_CLK : 8; /*!< [15..8] just for FPGA version, 12-bit ADC model[15:12] : XADC_AD7472_CONVST0= + * PCLK/2, , 8=PCLK/512[11:8] : for XADC_AD7472_CLK0= PCLK, + * 1=PCLK/2, , 9=PCLK/512 */ + uint32_t : 16; + } FXADC_CLK_CTRL_REG_b; + }; +} AUXADC_Type; /*!< Size = 116 (0x74) */ + +/* =========================================================================================================================== */ +/* ================ CACHE ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CACHE registers (CACHE) + */ + +typedef struct /*!< (@ 0x0E010000) CACHE Structure */ +{ + union + { + __IOM uint32_t CACHE_CTRL1_REG; /*!< (@ 0x00000000) CACHE_CTRL1_REG */ + + struct + { + __IM uint32_t CACHE_FLUSH : 1; /*!< [0..0] CACHE_FLUSH */ + __IM uint32_t CACHE_RES1 : 1; /*!< [1..1] CACHE_RES1 */ + uint32_t : 30; + } CACHE_CTRL1_REG_b; + }; + + union + { + __IOM uint32_t CACHE_LNSIZECFG_REG; /*!< (@ 0x00000004) CACHE_LNSIZECFG_REG */ + + struct + { + __IM uint32_t CACHE_LINE : 2; /*!< [1..0] CACHE_LINE */ + uint32_t : 30; + } CACHE_LNSIZECFG_REG_b; + }; + + union + { + __IOM uint32_t CACHE_ASSOCCFG_REG; /*!< (@ 0x00000008) CACHE_ASSOCCFG_REG */ + + struct + { + __IM uint32_t CACHE_ASSOC : 2; /*!< [1..0] CACHE_ASSOC */ + uint32_t : 30; + } CACHE_ASSOCCFG_REG_b; + }; + __IM uint32_t RESERVED[5]; + + union + { + __IOM uint32_t CACHE_CTRL2_REG; /*!< (@ 0x00000020) Cache control register 2 (only Word (32-bits) + * access supported). */ + + struct + { + __IOM uint32_t CACHE_LEN : 12; /*!< [11..0] Length of OQSPI FLASH cacheable memory.N*64 KBytes. + * N = 0 to 2048, incl. 2048 (max. of 128 Mbytes).Setting + * CACHE_LEN=0 disables the caching.Note 1: The max. relevant + * CACHE_LEN setting depends on the chosen Flash region (program) + * size.Note 2: The first block (CACHE_LEN=1) includes the + * memory space specified by CACHE_FLASH_REG[FLASH_REGION_OFFSET]. */ + __IOM uint32_t CACHE_WEN : 1; /*!< [12..12] 0: Cache Data and TAG memory read only.1: Cache Data + * and TAG memory read/write.The Data and TAG memory are only + * updated by the cache controller.There is no HW protection + * to prevent unauthorized access by the ARM.Note 1: When + * accessing the memory mapped Cache Data and TAG memory (which + * is only allowed for debugging purposes) only 32 bits access + * is supported.Note 2: SYS_CTRL_REG[CACHERAM_MUX] must be + * set to '0' before accessing the memory mapped Cache Data + * and TAG memory.See also th */ + __IOM uint32_t CACHE_CGEN : 1; /*!< [13..13] 0: Cache controller clock gating is not enabled.1: + * Cache controller clock gating is enabled (enabling power + * saving). */ + __IOM uint32_t CACHE_CWF_DISABLE : 1; /*!< [14..14] 0: Default.1: The cache line refill is performed with + * INCR type burst and "Critical Word First" is disabled.Note:This + * bit is only relevant for executing from QSPI Flash (when + * set to '1' it will improve performance).This bit should + * be kept on '0' for executing from eFlash. */ + __IOM uint32_t CACHE_MHCLKEN_DISABLE : 1; /*!< [15..15] 0: Default.1: The "m_HCLK_EN" input is ignored and + * the controller avoids inserting m_HTRANS=BUSY because of + * wait states.Note:This bit is only relevant for executing + * from QSPI Flash (when set to '1' it will improve performance). + * This bit should be kept on '0' for executing from eFlash. */ + __IOM uint32_t CACHE_USE_FULL_DB_RANGE : 2; /*!< [17..16] 00: CACHERAM (mirrored) read/write and NO use of the + * full 184 bits databus (for executing program code or extension + * of the SysRAM with the Cache RAM).In this mode 8 bits, + * 16 bits and 32 bits write access is supported.01: CACHERAM + * (mirrored) read and use of the full 184 bits databus of + * 'SRAM_1_0' (for testing and debugging purposes).In this + * mode only 32 bits write access is supported.10: CACHERAM + * (mirrored) read and use of the full 184 bits databus of + * 'SRAM_3_2' (for testing and de */ + __IOM uint32_t CACHE_FLUSH_DISABLE : 1; /*!< [18..18] 0: Default.1: Flushing of the Cache memory is disabled + * when SYS_CTRL_REG[CACHERAM_MUX] is switched from '1' to + * '0'.Note: Setting this bit to '1' is only allowed for debugging + * purposes. */ + __IOM uint32_t CACHE_FLUSHED : 1; /*!< [19..19] 0: Cache is not flushed yet.1: Cache is flushed.Note + * 1: Setting and clearing of this (status) bit field is automatically + * done by the hardware. It is set on the falling edge and + * cleared on the rising edge of the (Cache Controller) CACHE_RAM_INIT + * signal.Note 2: When the Cache is flushed by disabling and + * enabling the Cache Controller with a SYS_CTRL_REG[CACHERAM_MUX] + * sequence of 1 -> 0 -> 1, the CACHE_FLUSHED bit can also + * be cleared first by the software (if needed) with writing + * a CACHE_CTRL */ + __IM uint32_t CACHE_RAM_INIT : 1; /*!< [20..20] Cache Controller RO status bit.0: Default.1: Set to + * '1' when SRAM is being initialized (i.e. being flushed).Note: + * The flushing of the cache memory takes 256 HCLK cycles. */ + __IM uint32_t CACHE_READY : 1; /*!< [21..21] Cache Controller RO status bit.0: Default.1: Set to + * '1' when CACHE_CTRL is enabled, initialized and immediately + * ready for a cacheable access to service. */ + __IOM uint32_t CACHE_ROM_REGION_EN : 1; /*!< [22..22] cache enable for the ROM region (0x0F02_0000 ~ 0x0F05_FFFF)this + * option is valid only if the cache is enabled. */ + uint32_t : 9; + } CACHE_CTRL2_REG_b; + }; + + union + { + __IOM uint32_t CACHE_CTRL3_REG; /*!< (@ 0x00000024) CACHE_CTRL3_REG */ + + struct + { + __IM uint32_t CACHE_ASSOCIATIVITY_RESET_VALUE : 2; /*!< [1..0] CACHE_ASSOCIATIVITY_RESET_VALUE */ + __IM uint32_t CACHE_LINE_SIZE_RESET_VALUE : 2; /*!< [3..2] CACHE_LINE_SIZE_RESET_VALUE */ + __IM uint32_t CACHE_RAM_SIZE_RESET_VALUE : 3; /*!< [6..4] CACHE_RAM_SIZE_RESET_VALUE */ + __IM uint32_t CACHE_CONTROLLER_RESET : 1; /*!< [7..7] CACHE_CONTROLLER_RESET */ + __IOM uint32_t CACHE_TM_CBUS_SLOW_PERIPH_FOR_SBUS : 1; /*!< [8..8] CACHE_TM_CBUS_SLOW_PERIPH_FOR_SBUS */ + uint32_t : 23; + } CACHE_CTRL3_REG_b; + }; + + union + { + __IOM uint32_t CACHE_MRM_HITS_REG; /*!< (@ 0x00000028) Cache MRM (Miss Rate Monitor) HITS register (only + * Word (32-bits) access supported). */ + + struct + { + __IOM uint32_t MRM_HITS : 32; /*!< [31..0] Contains the amount of cache hits. */ + } CACHE_MRM_HITS_REG_b; + }; + + union + { + __IOM uint32_t CACHE_MRM_MISSES_REG; /*!< (@ 0x0000002C) Cache MRM (Miss Rate Monitor) MISSES register + * (only Word (32-bits) access supported). */ + + struct + { + __IOM uint32_t MRM_MISSES : 32; /*!< [31..0] Contains the amount of cache misses. */ + } CACHE_MRM_MISSES_REG_b; + }; + + union + { + __IOM uint32_t CACHE_MRM_CTRL_REG; /*!< (@ 0x00000030) Cache MRM (Miss Rate Monitor) CONTROL register + * (only Word (32-bits) access supported). */ + + struct + { + __IOM uint32_t MRM_START : 1; /*!< [0..0] 0: Freeze the "misses/hits" counters and reset the time + * interval counter to the programmed value in CACHE_MRM_TINT_REG.1: + * Enables the counters.Note: In case CACHE_MRM_CTRL_REG[MRM_START] + * is set to '1' and CACHE_MRM_TINT_REG (!=0) is used for + * the MRM interrupt generation, the time interval counter + * counts down (on a fixed reference clock of 32 MHz) until + * it's '0'. At that time CACHE_MRM_CTRL_REG[MRM_START] will + * be reset automatically to '0' by the MRM hardware and the + * MRM interrupt will be generate */ + __IOM uint32_t MRM_IRQ_MASK : 1; /*!< [1..1] 0: Disables interrupt generation.1: Enables interrupt + * generation.Note: The Cache MRM generates a pulse-sensitive + * interrupt towards the ARM processor, */ + __IOM uint32_t MRM_IRQ_TINT_STATUS : 1; /*!< [2..2] 0: No interrupt is generated.1: Interrupt (pulse-sensitive) + * is generated because the time interval counter reached + * the end (time interval != 0). */ + __IOM uint32_t MRM_IRQ_MISSES_THRES_STATUS : 1; /*!< [3..3] 0: No interrupt is generated.1: Interrupt (pulse-sensitive) + * is generated because the number of cache misses reached + * the programmed threshold (threshold != 0). */ + __IOM uint32_t MRM_IRQ_HITS_THRES_STATUS : 1; /*!< [4..4] 0: No interrupt is generated.1: Interrupt (pulse-sensitive) + * is generated because the number of cache hits reached the + * programmed threshold (threshold != 0). */ + uint32_t : 27; + } CACHE_MRM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t CACHE_MRM_TINT_REG; /*!< (@ 0x00000034) Cache MRM (Miss Rate Monitor) TIME INTERVAL register + * (only Word (32-bits) access supported). */ + + struct + { + __IOM uint32_t MRM_TINT : 19; /*!< [18..0] Defines the time interval for the monitoring in (bus + * clock/4) clock cycles. See also the description of CACHE_MRM_CTRL_REG[MRM + * IRQ_TINT_STATUS].Note: When MRM_TINT=0 (unrealistic value), + * no interrupt will be generated. */ + uint32_t : 13; + } CACHE_MRM_TINT_REG_b; + }; + + union + { + __IOM uint32_t CACHE_MRM_MISSES_THRES_REG; /*!< (@ 0x00000038) Cache MRM (Miss Rate Monitor) THRESHOLD register + * (only Word (32-bits) access supported). */ + + struct + { + __IOM uint32_t MRM_MISSES_THRES : 32; /*!< [31..0] Defines the misses threshold to trigger the interrupt + * generation. See also the description of CACHE_MRM_CTRL_REG[MRM_IRQ_MISSES + * THRES_STATUS].Note: When MRM_MISSES_THRES=0 (unrealistic + * value), no interrupt will be generated. */ + } CACHE_MRM_MISSES_THRES_REG_b; + }; + + union + { + __IOM uint32_t CACHE_MRM_HITS_THRES_REG; /*!< (@ 0x0000003C) Cache MRM (Miss Rate Monitor) HITS THRESHOLD + * register (only Word (32-bits) access supported). */ + + struct + { + __IOM uint32_t MRM_HITS_THRES : 32; /*!< [31..0] Defines the hits threshold to trigger the interrupt + * generation. See also the description of CACHE_MRM_CTRL_REG[MRM_IRQ_HITS_T + * RES_STATUS].Note: When MRM_HITS_THRES=0 (unrealistic value), + * no interrupt will be generated. */ + } CACHE_MRM_HITS_THRES_REG_b; + }; + + union + { + __IOM uint32_t CACHE_FLASH_REG; /*!< (@ 0x00000040) Cache QSPI Flash program size and base address + * register (only Word (32-bits) access supported). */ + + struct + { + __IOM uint32_t FLASH_REGION_SIZE : 4; /*!< [3..0] Flash region size.Default value is '1' (0.5 MBytes).0 + * = 0.25 MBytes,1 = 0.5 MBytes,2 = 1 MBytes,3 = 2 MBytes,4 + * = 4 MBytes,5 = 8 MBytes,6 = 16 MBytes,7 = 32 MBytes,8 = + * 64 MBytes,9 = 128 MBytes.These register bits are retained.Note + * 1: The updated value takes effect only after a software + * reset.Note 2: See for the max. region (program) size the + * memory map. */ + __IOM uint32_t FLASH_REGION_OFFSET : 12; /*!< [15..4] Flash region offset address (in words).This value is + * added to the Flash (CPU) address bits [13:2].These register + * bits are retained.Note 1: The updated value takes effect + * only after a software reset. */ + __IOM uint32_t FLASH_REGION_BASE : 16; /*!< [31..16] These bits correspond with the Flash region base address + * bits [31:16].Default value is '0x1800'.The Flash region + * base address bits [31:27] are fixed to '0b00011', supporting + * the range of 0x1800-0x1FFF'.These register bits are retained.Note + * 1: The updated value takes effect only after a software + * reset.Note 2 The Flash region base address setting depends + * on the chosen Flash region size. */ + } CACHE_FLASH_REG_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t CACHE_MRM_HITS1WS_REG; /*!< (@ 0x00000048) Cache MRM (Miss Rate Monitor) HITS with 1 Wait + * State register (only Word (32-bits) access + * supported). */ + + struct + { + __IOM uint32_t MRM_HITS1WS : 32; /*!< [31..0] Contains the amount of cache hits. */ + } CACHE_MRM_HITS1WS_REG_b; + }; + __IM uint32_t RESERVED2; + + union + { + __IOM uint32_t SWD_RESET_REG; /*!< (@ 0x00000050) SWD HW reset control register (only Word (32-bits) + * access supported). */ + + struct + { + __OM uint32_t SWD_HW_RESET_REQ : 1; /*!< [0..0] 0: default.1: HW reset request (from the debugger tool). + * The register is automatically reset with a HW_RESET.This + * bit can only be accessed by the debugger software and not + * by the application. */ + uint32_t : 31; + } SWD_RESET_REG_b; + }; + __IM uint32_t RESERVED3[3]; + + union + { + __IOM uint32_t CACHE_CPU_M_HADDR_REG; /*!< (@ 0x00000060) CACHE_CPU_M_HADDR_REG */ + + struct + { + __IM uint32_t CACHE_CPU_M_HADDR : 32; /*!< [31..0] CACHE_CPU_M_HADDR */ + } CACHE_CPU_M_HADDR_REG_b; + }; + + union + { + __IOM uint32_t CACHE_M_HADDR_MAP0_REG; /*!< (@ 0x00000064) CACHE_M_HADDR_MAP0_REG */ + + struct + { + __IM uint32_t CACHE_M_HADDR_MAP0 : 32; /*!< [31..0] CACHE_M_HADDR_MAP0 */ + } CACHE_M_HADDR_MAP0_REG_b; + }; + + union + { + __IOM uint32_t CACHE_CTRLR_M_HADDR_REG; /*!< (@ 0x00000068) CACHE_CTRLR_M_HADDR_REG */ + + struct + { + __IM uint32_t CACHE_CTRLR_M_HADDR : 32; /*!< [31..0] CACHE_CTRLR_M_HADDR */ + } CACHE_CTRLR_M_HADDR_REG_b; + }; +} CACHE_Type; /*!< Size = 108 (0x6c) */ + +/* =========================================================================================================================== */ +/* ================ CC312 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CC312 registers (CC312) + */ + +typedef struct /*!< (@ 0x400F0000) CC312 Structure */ +{ + union + { + __IOM uint32_t CC312_MEMORY_MAP0_REG; /*!< (@ 0x00000000) This register maps the virtual register R0 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP0 : 10; /*!< [10..1] Contains the physical address in memory to map the R0 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP0_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP1_REG; /*!< (@ 0x00000004) This register maps the virtual register R1 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP1 : 10; /*!< [10..1] Contains the physical address in memory to map the R1 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP1_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP2_REG; /*!< (@ 0x00000008) This register maps the virtual register R2 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP2 : 10; /*!< [10..1] Contains the physical address in memory to map the R2 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP2_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP3_REG; /*!< (@ 0x0000000C) This register maps the virtual register R3 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP3 : 10; /*!< [10..1] Contains the physical address in memory to map the R3 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP3_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP4_REG; /*!< (@ 0x00000010) This register maps the virtual register R4 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP4 : 10; /*!< [10..1] Contains the physical address in memory to map the R4 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP4_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP5_REG; /*!< (@ 0x00000014) This register maps the virtual register R5 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP5 : 10; /*!< [10..1] Contains the physical address in memory to map the R5 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP5_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP6_REG; /*!< (@ 0x00000018) This register maps the virtual register R6 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP6 : 10; /*!< [10..1] Contains the physical address in memory to map the R6 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP6_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP7_REG; /*!< (@ 0x0000001C) This register maps the virtual register R7 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP7 : 10; /*!< [10..1] Contains the physical address in memory to map the R7 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP7_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP8_REG; /*!< (@ 0x00000020) This register maps the virtual register R8 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP8 : 10; /*!< [10..1] Contains the physical address in memory to map the R8 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP8_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP9_REG; /*!< (@ 0x00000024) This register maps the virtual register R9 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP9 : 10; /*!< [10..1] Contains the physical address in memory to map the R9 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP9_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP10_REG; /*!< (@ 0x00000028) This register maps the virtual register R10 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP10 : 10; /*!< [10..1] Contains the physical address in memory to map the R10 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP10_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP11_REG; /*!< (@ 0x0000002C) This register maps the virtual register R11 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP11 : 10; /*!< [10..1] Contains the physical address in memory to map the R11 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP11_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP12_REG; /*!< (@ 0x00000030) This register maps the virtual register R12 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP12 : 10; /*!< [10..1] Contains the physical address in memory to map the R12 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP12_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP13_REG; /*!< (@ 0x00000034) This register maps the virtual register R13 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP13 : 10; /*!< [10..1] Contains the physical address in memory to map the R13 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP13_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP14_REG; /*!< (@ 0x00000038) This register maps the virtual register R14 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP14 : 10; /*!< [10..1] Contains the physical address in memory to map the R14 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP14_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP15_REG; /*!< (@ 0x0000003C) This register maps the virtual register R15 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP15 : 10; /*!< [10..1] Contains the physical address in memory to map the R15 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP15_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP16_REG; /*!< (@ 0x00000040) This register maps the virtual register R16 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP16 : 10; /*!< [10..1] Contains the physical address in memory to map the R16 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP16_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP17_REG; /*!< (@ 0x00000044) This register maps the virtual register R17 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP17 : 10; /*!< [10..1] Contains the physical address in memory to map the R17 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP17_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP18_REG; /*!< (@ 0x00000048) This register maps the virtual register R18 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP18 : 10; /*!< [10..1] Contains the physical address in memory to map the R18 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP18_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP19_REG; /*!< (@ 0x0000004C) This register maps the virtual register R19 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP19 : 10; /*!< [10..1] Contains the physical address in memory to map the R19 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP19_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP20_REG; /*!< (@ 0x00000050) This register maps the virtual register R20 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP20 : 10; /*!< [10..1] Contains the physical address in memory to map the R20 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP20_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP21_REG; /*!< (@ 0x00000054) This register maps the virtual register R21 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP21 : 10; /*!< [10..1] Contains the physical address in memory to map the R21 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP21_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP22_REG; /*!< (@ 0x00000058) This register maps the virtual register R22 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP22 : 10; /*!< [10..1] Contains the physical address in memory to map the R22 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP22_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP23_REG; /*!< (@ 0x0000005C) This register maps the virtual register R23 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP23 : 10; /*!< [10..1] Contains the physical address in memory to map the R23 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP23_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP24_REG; /*!< (@ 0x00000060) This register maps the virtual register R24 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP24 : 10; /*!< [10..1] Contains the physical address in memory to map the R24 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP24_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP25_REG; /*!< (@ 0x00000064) This register maps the virtual register R25 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP25 : 10; /*!< [10..1] Contains the physical address in memory to map the R25 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP25_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP26_REG; /*!< (@ 0x00000068) This register maps the virtual register R26 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP26 : 10; /*!< [10..1] Contains the physical address in memory to map the R26 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP26_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP27_REG; /*!< (@ 0x0000006C) This register maps the virtual register R27 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP27 : 10; /*!< [10..1] Contains the physical address in memory to map the R27 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP27_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP28_REG; /*!< (@ 0x00000070) This register maps the virtual register R28 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP28 : 10; /*!< [10..1] Contains the physical address in memory to map the R28 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP28_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP29_REG; /*!< (@ 0x00000074) This register maps the virtual register R29 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP29 : 10; /*!< [10..1] Contains the physical address in memory to map the R29 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP29_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP30_REG; /*!< (@ 0x00000078) This register maps the virtual register R30 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP30 : 10; /*!< [10..1] Contains the physical address in memory to map the R30 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP30_REG_b; + }; + + union + { + __IOM uint32_t CC312_MEMORY_MAP31_REG; /*!< (@ 0x0000007C) This register maps the virtual register R31 to + * a physical address in memory. */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_MEMORY_MAP31 : 10; /*!< [10..1] Contains the physical address in memory to map the R31 + * register to. */ + uint32_t : 21; + } CC312_MEMORY_MAP31_REG_b; + }; + + union + { + __IOM uint32_t CC312_OPCODE_REG; /*!< (@ 0x00000080) This register holds the PKA's OPCODE. */ + + struct + { + __IOM uint32_t CC312_TAG : 6; /*!< [5..0] Holds the opreation's tag or the operand C virtual address. */ + __IOM uint32_t CC312_REG_R : 6; /*!< [11..6] Result register virtual address 0-15. */ + __IOM uint32_t CC312_REG_B : 6; /*!< [17..12] Operand B virtual address 0-15. */ + __IOM uint32_t CC312_REG_A : 6; /*!< [23..18] Operand A virtual address 0-15. */ + __IOM uint32_t CC312_LEN : 3; /*!< [26..24] The length of the operation. The value serves as a + * pointer to PKA length register, for example, if the value + * is 0, PKA_L0 holds the size of the operation. */ + __IOM uint32_t CC312_PKA_OPCODE : 5; /*!< [31..27] Defines the PKA operation: @0x4 - Add,Inc @0x5 - Sub,Dec,Neg + * @0x6 - ModAdd,ModInc @0x7 - ModSub,ModDec,ModNeg @0x8 - + * AND,TST0,CLR0 @0x9 - OR,COPY,SET0 @0xa - XOR,FLIP0,INVERT,COMPARE + * @0xc - SHR0 @0xd - SHR1 @0xe - SHL0 @0xf - SHL1 @0x10 - + * MulLow @0x11 - ModMul @0x12 - ModMulN @0x13 - ModExp @0x14 + * - Division @0x15 - Div @0x16 - ModDiv @0x00 - Terminate */ + } CC312_OPCODE_REG_b; + }; + + union + { + __IOM uint32_t CC312_N_NP_T0_T1_ADDR_REG; /*!< (@ 0x00000084) This register maps N_NP_T0_T1 to a virtual address. */ + + struct + { + __IOM uint32_t CC312_N_VIRTUAL_ADDR : 5; /*!< [4..0] Virtual address of register N. */ + __IOM uint32_t CC312_NP_VIRTUAL_ADDR : 5; /*!< [9..5] Virtual address of register NP. */ + __IOM uint32_t CC312_T0_VIRTUAL_ADDR : 5; /*!< [14..10] Virtual address of temporary register number 0 */ + __IOM uint32_t CC312_T1_VIRTUAL_ADDR : 5; /*!< [19..15] Virtual address of temporary register number 1 */ + uint32_t : 12; + } CC312_N_NP_T0_T1_ADDR_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_STATUS_REG; /*!< (@ 0x00000088) This register holds the PKA pipe status. */ + + struct + { + __IM uint32_t CC312_ALU_MSB_4BITS : 4; /*!< [3..0] The most significant 4-bits of the operand updated in + * shift operation. */ + __IM uint32_t CC312_ALU_LSB_4BITS : 4; /*!< [7..4] The least significant 4-bits of the operand updated in + * shift operation. */ + __IM uint32_t CC312_ALU_SIGN_OUT : 1; /*!< [8..8] Indicates the last operation's sign (MSB). */ + __IM uint32_t CC312_ALU_CARRY : 1; /*!< [9..9] Holds the carry of the last ALU operation. */ + __IM uint32_t CC312_ALU_CARRY_MOD : 1; /*!< [10..10] holds the carry of the last Modular operation. */ + __IM uint32_t CC312_ALU_SUB_IS_ZERO : 1; /*!< [11..11] Indicates the last subtraction operation's sign . */ + __IM uint32_t CC312_ALU_OUT_ZERO : 1; /*!< [12..12] Indicates if the result of ALU OUT is zero. */ + __IM uint32_t CC312_ALU_MODOVRFLW : 1; /*!< [13..13] Modular overflow flag. */ + __IM uint32_t CC312_DIV_BY_ZERO : 1; /*!< [14..14] Indication if the division is done by zero. */ + __IM uint32_t CC312_MODINV_OF_ZERO : 1; /*!< [15..15] Indicates the Modular inverse of zero. */ + __IM uint32_t CC312_LAST_OPCODE : 5; /*!< [20..16] Opcode of the last operation */ + uint32_t : 11; + } CC312_PKA_STATUS_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_SW_RESET_REG; /*!< (@ 0x0000008C) Writing to this register triggers a software + * reset of the PKA. */ + + struct + { + __OM uint32_t CC312_PKA_SW_RESET : 1; /*!< [0..0] The reset mechanism takes about four PKA clock cycles + * until the reset line is deasserted */ + uint32_t : 31; + } CC312_PKA_SW_RESET_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_L0_REG; /*!< (@ 0x00000090) This register holds one of the optional size + * of the operation. */ + + struct + { + __IOM uint32_t CC312_PKA_L0 : 13; /*!< [12..0] Size of the operation in bytes. */ + uint32_t : 19; + } CC312_PKA_L0_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_L1_REG; /*!< (@ 0x00000094) This register holds one of the optional size + * of the operation. */ + + struct + { + __IOM uint32_t CC312_PKA_L1 : 13; /*!< [12..0] Size of the operation in bytes. */ + uint32_t : 19; + } CC312_PKA_L1_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_L2_REG; /*!< (@ 0x00000098) This register holds one of the optional size + * of the operation. */ + + struct + { + __IOM uint32_t CC312_PKA_L2 : 13; /*!< [12..0] Size of the operation in bytes. */ + uint32_t : 19; + } CC312_PKA_L2_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_L3_REG; /*!< (@ 0x0000009C) This register holds one of the optional size + * of the operation. */ + + struct + { + __IOM uint32_t CC312_PKA_L3 : 13; /*!< [12..0] Size of the operation in bytes. */ + uint32_t : 19; + } CC312_PKA_L3_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_L4_REG; /*!< (@ 0x000000A0) This register holds one of the optional size + * of the operation. */ + + struct + { + __IOM uint32_t CC312_PKA_L4 : 13; /*!< [12..0] Size of the operation in bytes. */ + uint32_t : 19; + } CC312_PKA_L4_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_L5_REG; /*!< (@ 0x000000A4) This register holds one of the optional size + * of the operation. */ + + struct + { + __IOM uint32_t CC312_PKA_L5 : 13; /*!< [12..0] Size of the operation in bytes. */ + uint32_t : 19; + } CC312_PKA_L5_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_L6_REG; /*!< (@ 0x000000A8) This register holds one of the optional size + * of the operation. */ + + struct + { + __IOM uint32_t CC312_PKA_L6 : 13; /*!< [12..0] Size of the operation in bytes. */ + uint32_t : 19; + } CC312_PKA_L6_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_L7_REG; /*!< (@ 0x000000AC) This register holds one of the optional size + * of the operation. */ + + struct + { + __IOM uint32_t CC312_PKA_L7 : 13; /*!< [12..0] Size of the operation in bytes. */ + uint32_t : 19; + } CC312_PKA_L7_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_PIPE_RDY_REG; /*!< (@ 0x000000B0) This register indicates whether the PKA pipe + * is ready to receive a new OPCODE. */ + + struct + { + __IM uint32_t CC312_PKA_PIPE_RDY : 1; /*!< [0..0] Indication whether PKA pipe is ready for new OPCODE. */ + uint32_t : 31; + } CC312_PKA_PIPE_RDY_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_DONE_REG; /*!< (@ 0x000000B4) This register indicates whether PKA operation + * is completed. */ + + struct + { + __IM uint32_t CC312_PKA_DONE : 1; /*!< [0..0] Indicates if PKA operation is completed, and pipe is + * empty. */ + uint32_t : 31; + } CC312_PKA_DONE_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_MON_SELECT_REG; /*!< (@ 0x000000B8) This register defines which PKA FSM monitor is + * being output. */ + + struct + { + __IOM uint32_t CC312_PKA_MON_SELECT : 4; /*!< [3..0] Defines which PKA FSM monitor is being output. */ + uint32_t : 28; + } CC312_PKA_MON_SELECT_REG_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t CC312_PKA_VERSION_REG; /*!< (@ 0x000000C4) This register holds the pka version */ + + struct + { + __IM uint32_t CC312_PKA_VERSION : 32; /*!< [31..0] This is the PKA version */ + } CC312_PKA_VERSION_REG_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t CC312_PKA_MON_READ_REG; /*!< (@ 0x000000D0) The PKA monitor bus register. */ + + struct + { + __IM uint32_t CC312_PKA_MON_READ : 32; /*!< [31..0] This is the PKA monitor bus register output */ + } CC312_PKA_MON_READ_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_SRAM_ADDR_REG; /*!< (@ 0x000000D4) first address given to PKA SRAM for write transactions. */ + + struct + { + __OM uint32_t CC312_PKA_SRAM_ADDR : 32; /*!< [31..0] PKA SRAM write starting address */ + } CC312_PKA_SRAM_ADDR_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_SRAM_WDATA_REG; /*!< (@ 0x000000D8) Write data to PKA SRAM. */ + + struct + { + __OM uint32_t CC312_PKA_SRAM_WDATA : 32; /*!< [31..0] 32 bit write to PKA SRAM: triggers the SRAM write DMA + * address automatically incremented */ + } CC312_PKA_SRAM_WDATA_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_SRAM_RDATA_REG; /*!< (@ 0x000000DC) Read data from PKA SRAM. */ + + struct + { + __IOM uint32_t CC312_PKA_SRAM_RDATA : 32; /*!< [31..0] 32 bit read from PKA SRAM: read - triggers the SRAM + * read DMA address automatically incremented */ + } CC312_PKA_SRAM_RDATA_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_SRAM_WR_CLR_REG; /*!< (@ 0x000000E0) Write buffer clean. */ + + struct + { + __OM uint32_t CC312_PKA_SRAM_WR_CLR : 32; /*!< [31..0] Clear the write buffer. */ + } CC312_PKA_SRAM_WR_CLR_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_SRAM_RADDR_REG; /*!< (@ 0x000000E4) first address given to PKA SRAM for read transactions. */ + + struct + { + __OM uint32_t CC312_PKA_SRAM_RADDR : 32; /*!< [31..0] PKA SRAM read starting address */ + } CC312_PKA_SRAM_RADDR_REG_b; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IOM uint32_t CC312_PKA_WORD_ACCESS_REG; /*!< (@ 0x000000F0) This register holds the data written to PKA memory + * using the wop opcode. */ + + struct + { + __OM uint32_t CC312_PKA_WORD_ACCESS : 32; /*!< [31..0] 32 bit read/write data. */ + } CC312_PKA_WORD_ACCESS_REG_b; + }; + __IM uint32_t RESERVED3; + + union + { + __IOM uint32_t CC312_PKA_BUFF_ADDR_REG; /*!< (@ 0x000000F8) This register maps the virtual buffer registers + * to a physical address in memory. */ + + struct + { + __OM uint32_t CC312_PKA_BUF_ADDR : 12; /*!< [11..0] Contains the physical address in memory to map the buffer + * registers. */ + uint32_t : 20; + } CC312_PKA_BUFF_ADDR_REG_b; + }; + __IM uint32_t RESERVED4; + + union + { + __IOM uint32_t CC312_RNG_IMR_REG; /*!< (@ 0x00000100) Interrupt masking register. Consists of bit[31-16] + * - PRNG_IMR bit[15-0] - TRNG_IMR (Ws - PRNG + * bit exists only if PRNG_EXISTS flag) */ + + struct + { + __IOM uint32_t CC312_EHR_VALID_INT_MASK : 1; /*!< [0..0] 1'b1 - masks the EHR interrupt. No interrupt is generated. + * See RNG_ISR for explanation on this interrupt. */ + __IOM uint32_t CC312_AUTOCORR_ERR_INT_MASK : 1; /*!< [1..1] 1'b1 - masks the autocorrelation interrupt. No interrupt + * is generated. See RNG_ISR for explanation on this interrupt. */ + __IOM uint32_t CC312_CRNGT_ERR_INT_MASK : 1; /*!< [2..2] 1'b1 - masks the CRNGT error interrupt. No interrupt + * is generated. See RNG_ISR for explanation on this interrupt. */ + __IOM uint32_t CC312_VN_ERR_INT_MASK : 1; /*!< [3..3] 1'b1 - masks the Von-Neumann error interrupt. No interrupt + * is generated. See RNG_ISR for explanation on this interrupt. */ + __IOM uint32_t CC312_WATCHDOG_INT_MASK : 1; /*!< [4..4] 1'b1 - masks the watchdog interrupt. No interrupt is + * generated. See RNG_ISR for explanation on this interrupt. */ + __IOM uint32_t CC312_RNG_DMA_DONE_INT : 1; /*!< [5..5] 1'b1 - masks the RNG DMA completion interrupt. No interrupt + * is generated. See RNG_ISR for explanation on this interrupt. */ + uint32_t : 26; + } CC312_RNG_IMR_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_ISR_REG; /*!< (@ 0x00000104) Status register. If corresponding RNG_IMR bit + * is unmasked, an interrupt is generated. + * Consists of trng_isr and prng_isr bit[15-0] + * - TRNG bit[31-16] - PRNG */ + + struct + { + __IM uint32_t CC312_RNG_ISR_EHR_VALID : 1; /*!< [0..0] 1'b1 indicates that 192 bits have been collected in the + * TRNG and are ready to be read. */ + __IM uint32_t CC312_RNG_ISR_AUTOCORR_ERR : 1; /*!< [1..1] 1'b1 indicates Autocorrelation test failed four times + * in a row. When it set ,TRNG ceases to function until next + * reset. */ + __IM uint32_t CC312_RNG_ISR_CRNGT_ERR : 1; /*!< [2..2] 1'b1 indicates CRNGT in the TRNG test failed. Failure + * occurs when two consecutive blocks of 16 collected bits + * are equal. */ + __IM uint32_t CC312_RNG_ISR_VN_ERR : 1; /*!< [3..3] 1'b1 indicates Von Neumann error. Error in von Neumann + * occurs if 32 consecutive collected bits are identical, + * ZERO, or ONE. */ + uint32_t : 1; + __IM uint32_t CC312_RNG_ISR_DMA_DONE : 1; /*!< [5..5] 1'b1 indicates RNG DMA to SRAM is completed. */ + uint32_t : 10; + __IM uint32_t CC312_RNG_ISR_RESEEDING_DONE : 1; /*!< [16..16] 1'b1 indicates completion of reseeding algorithm with + * no errors. */ + __IM uint32_t CC312_RNG_ISR_INSTANTIATION_DONE : 1; /*!< [17..17] 1'b1 indicates completion of instantiation algorithm + * with no errors. */ + __IM uint32_t CC312_RNG_ISR_FINAL_UPDATE_DONE : 1; /*!< [18..18] 1'b1 indicates completion of final update algorithm. */ + __IM uint32_t CC312_RNG_ISR_OUTPUT_READY : 1; /*!< [19..19] 1'b1 indicates that the result of PRNG is valid and + * ready to be read. The result can be read from the RNG_READOUT + * register. */ + __IM uint32_t CC312_RNG_ISR_RESEED_CNTR_FULL : 1; /*!< [20..20] 1'b1 indicates that the reseed counter has reached + * 2^48, requiring to run the reseed algorithm before generating + * new random numbers. */ + __IM uint32_t CC312_RNG_ISR_RESEED_CNTR_TOP_40 : 1; /*!< [21..21] 1'b1 indicates that the top 40 bits of the reseed counter + * are set (that is the reseed counter is larger than 2^48-2^8). + * This is a recommendation for running the reseed algorithm + * before the counter reaches its max value. */ + __IM uint32_t CC312_RNG_ISR_PRNG_CRNGT_ERR : 1; /*!< [22..22] 1'b1 indicates CRNGT in the PRNG test failed. Failure + * occurs when two consecutive results of AES are equal */ + __IM uint32_t CC312_RNG_ISR_REQ_SIZE : 1; /*!< [23..23] 1'b1 indicates that the request size counter (which + * represents how many generations of random bits in the PRNG + * have been produced) has reached 2^12, thus requiring a + * working state update before generating new random numbers. */ + __IM uint32_t CC312_RNG_ISR_KAT_ERR : 1; /*!< [24..24] 1'b1 indicates that one of the KAT (Known Answer Tests) + * tests has failed. When set, the entire engine ceases to + * function. */ + __IM uint32_t CC312_RNG_ISR_WHICH_KAT_ERR : 2; /*!< [26..25] When the KAT_ERR bit is set, these bits represent which + * Known Answer Test had failed: @2'b00 - first test of instantiation + * @2'b01 - second test of instantiation @2'b10 - first test + * of reseeding @2'b11 - second test of reseeding */ + uint32_t : 5; + } CC312_RNG_ISR_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_ICR_REG; /*!< (@ 0x00000108) Interrupt/status bit clear Register. Consists + * of trng_icr and prng_icr bit[15-0] - TRNG + * bit[31-16] - PRNG */ + + struct + { + __OM uint32_t CC312_RNG_ICR_EHR_VALID : 1; /*!< [0..0] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_AUTOCORR_ERR : 1; /*!< [1..1] Cannot be cleared by SW! Only RNG reset clears this bit. */ + __OM uint32_t CC312_RNG_ICR_CRNGT_ERR : 1; /*!< [2..2] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_VN_ERR : 1; /*!< [3..3] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_RNG_WATCHDOG : 1; /*!< [4..4] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_RNG_DMA_DONE : 1; /*!< [5..5] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + uint32_t : 10; + __OM uint32_t CC312_RNG_ICR_RESEEDING_DONE : 1; /*!< [16..16] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_INSTANTIATION_DONE : 1; /*!< [17..17] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_FINAL_UPDATE_DONE : 1; /*!< [18..18] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_OUTPUT_READY : 1; /*!< [19..19] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_RESEED_CNTR_FULL : 1; /*!< [20..20] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_RESEED_CNTR_TOP_40 : 1; /*!< [21..21] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_PRNG_CRNGT_ERR : 1; /*!< [22..22] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_REQ_SIZE : 1; /*!< [23..23] Writing value 1'b1 - clears corresponding bit in RNG_ISR */ + __OM uint32_t CC312_RNG_ICR_KAT_ERR : 1; /*!< [24..24] Cannot be cleared by SW! Only RNG reset clears this + * bit. */ + __OM uint32_t CC312_RNG_ICR_WHICH_KAT_ERR : 2; /*!< [26..25] Cannot be cleared by SW! Only RNG reset clears this + * bit. */ + uint32_t : 5; + } CC312_RNG_ICR_REG_b; + }; + + union + { + __IOM uint32_t CC312_TRNG_CONFIG_REG; /*!< (@ 0x0000010C) This register handles TRNG configuration */ + + struct + { + __IOM uint32_t CC312_RND_SRC_SEL : 2; /*!< [1..0] Defines the length of the oscillator ring (= the number + * of inverters) out of four possible selections. */ + __IOM uint32_t CC312_SOP_SEL : 1; /*!< [2..2] Secure Output Port selection: @1'b1 - sop_data port reflects + * TRNG output (EHR_DATA). @1'b0 - sop_data port reflects + * PRNG output (RNG_READOUT). NOTE: Secure output is used + * for direct connection of the RNG block outputs to an engine + * input key. If CryptoCell does not include a HW PRNG - this + * field should be set to 1. */ + uint32_t : 29; + } CC312_TRNG_CONFIG_REG_b; + }; + + union + { + __IOM uint32_t CC312_TRNG_VALID_REG; /*!< (@ 0x00000110) This register indicates that the TRNG data is + * valid. */ + + struct + { + __IM uint32_t CC312_TRNG_EHR_VALID : 1; /*!< [0..0] 1'b1 indicates that collection of bits in the TRNG is + * completed, and data can be read from the EHR_DATA register. */ + uint32_t : 31; + } CC312_TRNG_VALID_REG_b; + }; + + union + { + __IOM uint32_t CC312_EHR_DATA_0_REG; /*!< (@ 0x00000114) This register contains the data collected in + * the TRNG[31_0]. NOTE: can only be set while + * in debug mode (rng_debug_enable input is + * set). */ + + struct + { + __IM uint32_t CC312_EHR_DATA_0 : 32; /*!< [31..0] Contains the data collected in the TRNG[31_0] . NOTE: + * can only be set while in debug mode (rng_debug_enable input + * is set). */ + } CC312_EHR_DATA_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_EHR_DATA_1_REG; /*!< (@ 0x00000118) This register contains the data collected in + * the TRNG[63_32]. NOTE: can only be set while + * in debug mode (rng_debug_enable input is + * set). */ + + struct + { + __IM uint32_t CC312_EHR_DATA_1 : 32; /*!< [31..0] Contains the data collected in the TRNG[63_32]. NOTE: + * can only be set while in debug mode (rng_debug_enable input + * is set). */ + } CC312_EHR_DATA_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_EHR_DATA_2_REG; /*!< (@ 0x0000011C) This register contains the data collected in + * the TRNG[95_64]. NOTE: can only be set while + * in debug mode (rng_debug_enable input is + * set). */ + + struct + { + __IM uint32_t CC312_EHR_DATA_2 : 32; /*!< [31..0] Contains the data collected in the TRNG[95_64]. NOTE: + * can only be set while in debug mode (rng_debug_enable input + * is set). */ + } CC312_EHR_DATA_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_EHR_DATA_3_REG; /*!< (@ 0x00000120) This register contains the data collected in + * the TRNG[127_96]. NOTE: can only be set + * while in debug mode (rng_debug_enable input + * is set). */ + + struct + { + __IM uint32_t CC312_EHR_DATA_3 : 32; /*!< [31..0] Contains the data collected in the TRNG[127_96]. NOTE: + * can only be set while in debug mode (rng_debug_enable input + * is set). */ + } CC312_EHR_DATA_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_EHR_DATA_4_REG; /*!< (@ 0x00000124) This register contains the data collected in + * the TRNG[159_128]. NOTE: can only be set + * while in debug mode (rng_debug_enable input + * is set). */ + + struct + { + __IM uint32_t CC312_EHR_DATA_4 : 32; /*!< [31..0] Contains the data collected in the TRNG[159_128]. NOTE: + * can only be set while in debug mode (rng_debug_enable input + * is set). */ + } CC312_EHR_DATA_4_REG_b; + }; + + union + { + __IOM uint32_t CC312_EHR_DATA_5_REG; /*!< (@ 0x00000128) This register contains the data collected in + * the TRNG[191_160]. NOTE: can only be set + * while in debug mode (rng_debug_enable input + * is set). */ + + struct + { + __IM uint32_t CC312_EHR_DATA_5 : 32; /*!< [31..0] Contains the data collected in the TRNG[191_160]. NOTE: + * can only be set while in debug mode (rng_debug_enable input + * is set). */ + } CC312_EHR_DATA_5_REG_b; + }; + + union + { + __IOM uint32_t CC312_RND_SOURCE_ENABLE_REG; /*!< (@ 0x0000012C) This register holds the enable signal for the + * random source. */ + + struct + { + __IOM uint32_t CC312_RND_SRC_EN : 1; /*!< [0..0] Enable signal for the random source. */ + uint32_t : 31; + } CC312_RND_SOURCE_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_SAMPLE_CNT1_REG; /*!< (@ 0x00000130) Counts clocks between sampling of random bit. */ + + struct + { + __IOM uint32_t CC312_SAMPLE_CNTR1 : 32; /*!< [31..0] Sets the number of rng_clk cycles between two consecutive + * ring oscillator samples. NOTE: If the Von-Neumann is bypassed, + * the minimum value for sample counter must not be less than + * decimal seventeen. */ + } CC312_SAMPLE_CNT1_REG_b; + }; + + union + { + __IOM uint32_t CC312_AUTOCORR_STATISTIC_REG; /*!< (@ 0x00000134) Statistics about autocorrelation test activations. */ + + struct + { + __IOM uint32_t CC312_AUTOCORR_TRYS : 14; /*!< [13..0] Count each time an autocorrelation test starts. Any + * write to the register resets the counter. Stops collecting + * statistics if one of the counters has reached the limit. */ + __IOM uint32_t CC312_AUTOCORR_FAILS : 8; /*!< [21..14] Count each time an autocorrelation test fails. Any + * write to the register resets the counter. Stops collecting + * statistics if one of the counters has reached the limit. */ + uint32_t : 10; + } CC312_AUTOCORR_STATISTIC_REG_b; + }; + + union + { + __IOM uint32_t CC312_TRNG_DEBUG_CONTROL_REG; /*!< (@ 0x00000138) This register is used to debug the TRNG */ + + struct + { + uint32_t : 1; + __IOM uint32_t CC312_VNC_BYPASS : 1; /*!< [1..1] When this bit is set, the Von-Neumann balancer is bypassed + * (including the 32 consecutive bits test). NOTE: Can only + * be set while in debug mode. If TRNG_TESTS_BYPASS_EN HW + * flag is defined, this bit can be set while not in debug + * mode. */ + __IOM uint32_t CC312_TRNG_CRNGT_BYPASS : 1; /*!< [2..2] When this bit is set, the CRNGT test in the TRNG is bypassed. + * NOTE: Can only be set while in debug mode. If TRNG_TESTS_BYPASS_EN + * HW flag is defined, this bit can be set while not in debug + * mode. */ + __IOM uint32_t CC312_AUTO_CORRELATE_BYPASS : 1; /*!< [3..3] When this bit is set, the autocorrelation test in the + * TRNG module is bypassed. NOTE: Can only be set while in + * debug mode. If TRNG_TESTS_BYPASS_EN HW flag is defined, + * this bit can be set while not in debug mode. */ + uint32_t : 28; + } CC312_TRNG_DEBUG_CONTROL_REG_b; + }; + __IM uint32_t RESERVED5; + + union + { + __IOM uint32_t CC312_RNG_SW_RESET_REG; /*!< (@ 0x00000140) Generate SW reset solely to RNG block. */ + + struct + { + __IOM uint32_t CC312_RNG_SW_RESET : 1; /*!< [0..0] Any value written (1'b0 or 1'b1) causes a reset cycle + * to the TRNG block. The reset mechanism takes about four + * RNG clock cycles until the reset line is de-asserted. */ + uint32_t : 31; + } CC312_RNG_SW_RESET_REG_b; + }; + __IM uint32_t RESERVED6[28]; + + union + { + __IOM uint32_t CC312_RNG_DEBUG_EN_INPUT_REG; /*!< (@ 0x000001B4) Defines the RNG in debug mode */ + + struct + { + __IM uint32_t CC312_RNG_DEBUG_EN : 1; /*!< [0..0] Reflects the rng_debug_enable input port */ + uint32_t : 31; + } CC312_RNG_DEBUG_EN_INPUT_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_BUSY_REG; /*!< (@ 0x000001B8) RNG busy indication */ + + struct + { + __IM uint32_t CC312_RNG_BUSY : 1; /*!< [0..0] Reflects rng_busy output port which Consists of trng_busy + * and prng_busy. */ + __IM uint32_t CC312_TRNG_BUSY : 1; /*!< [1..1] Reflects trng_busy. */ + __IM uint32_t CC312_PRNG_BUSY : 1; /*!< [2..2] Reflects prng_busy. */ + uint32_t : 29; + } CC312_RNG_BUSY_REG_b; + }; + + union + { + __IOM uint32_t CC312_RST_BITS_COUNTER_REG; /*!< (@ 0x000001BC) Resets the counter of collected bits in the TRNG */ + + struct + { + __OM uint32_t CC312_RST_BITS_COUNTER : 1; /*!< [0..0] Writing any value to this address resets the bits counter + * and trng valid registers. RND_SORCE_ENABLE register must + * be unset in order for reset to take place. */ + uint32_t : 31; + } CC312_RST_BITS_COUNTER_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_VERSION_REG; /*!< (@ 0x000001C0) This register holds the RNG version */ + + struct + { + __IM uint32_t CC312_EHR_WIDTH_192 : 1; /*!< [0..0] @1'b0 - 128 bit EHR @1'b1 - 192 bit EHR */ + __IM uint32_t CC312_CRNGT_EXISTS : 1; /*!< [1..1] @1'b0 - does not exist @1'b1 - exists */ + __IM uint32_t CC312_AUTOCORR_EXISTS : 1; /*!< [2..2] @1'b0 - does not exist @1'b1 - exists */ + __IM uint32_t CC312_TRNG_TESTS_BYPASS_EN : 1; /*!< [3..3] @1'b0 - trng tests bypass not enabled @1'b1 - trng tests + * bypass enabled */ + __IM uint32_t CC312_PRNG_EXISTS : 1; /*!< [4..4] @1'b0 - does not exist @1'b1 - exists */ + __IM uint32_t CC312_KAT_EXISTS : 1; /*!< [5..5] @1'b0 - does not exist @1'b1 - exists */ + __IM uint32_t CC312_RESEEDING_EXISTS : 1; /*!< [6..6] @1'b0 - does not exist @1'b1 - exists */ + __IM uint32_t CC312_RNG_USE_5_SBOXES : 1; /*!< [7..7] @1'b0 - 20 SBOX AES @1'b1 - 5 SBOX AES */ + uint32_t : 24; + } CC312_RNG_VERSION_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_CLK_ENABLE_REG; /*!< (@ 0x000001C4) Writing to this register enables/disables the + * RNG clock. */ + + struct + { + __OM uint32_t CC312_RNG_CLK_EN : 1; /*!< [0..0] Writing value 1'b1 enables RNG clock. */ + uint32_t : 31; + } CC312_RNG_CLK_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_DMA_ENABLE_REG; /*!< (@ 0x000001C8) Writing to this register enables/disables the + * RNG DMA. */ + + struct + { + __IOM uint32_t CC312_RNG_DMA_EN : 1; /*!< [0..0] Writing value 1'b1 enables RNG DMA to SRAM. The Value + * is cleared when DMA completes its operation. */ + uint32_t : 31; + } CC312_RNG_DMA_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_DMA_SRC_MASK_REG; /*!< (@ 0x000001CC) This register defines which ring-oscillator length + * should be used when using the RNG DMA. */ + + struct + { + __IOM uint32_t CC312_EN_SRC_SEL0 : 1; /*!< [0..0] Writing value 1'b1 enables SRC_SEL 0. */ + __IOM uint32_t CC312_EN_SRC_SEL1 : 1; /*!< [1..1] Writing value 1'b1 enables SRC_SEL 1. */ + __IOM uint32_t CC312_EN_SRC_SEL2 : 1; /*!< [2..2] Writing value 1'b1 enables SRC_SEL 2. */ + __IOM uint32_t CC312_EN_SRC_SEL3 : 1; /*!< [3..3] Writing value 1'b1 enables SRC_SEL 3. */ + uint32_t : 28; + } CC312_RNG_DMA_SRC_MASK_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_DMA_SRAM_ADDR_REG; /*!< (@ 0x000001D0) This register defines the start address of the + * DMA for the TRNG data. */ + + struct + { + __IOM uint32_t CC312_RNG_SRAM_DMA_ADDR : 11; /*!< [10..0] Defines the start address of the DMA for the TRNG data. */ + uint32_t : 21; + } CC312_RNG_DMA_SRAM_ADDR_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_DMA_SAMPLES_NUM_REG; /*!< (@ 0x000001D4) This register defines the number of 192-bits + * samples that the DMA collects per RNG configuration. */ + + struct + { + __IOM uint32_t CC312_RNG_SAMPLES_NUM : 8; /*!< [7..0] Defines the number of 192-bits samples that the DMA collects + * per RNG configuration. */ + uint32_t : 24; + } CC312_RNG_DMA_SAMPLES_NUM_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_WATCHDOG_VAL_REG; /*!< (@ 0x000001D8) This register defines the maximum number of clock + * cycles per TRNG collection of 192 samples. + * If the number of cycles for a collection + * exceeds this threshold, TRNG signals an + * interrupt. */ + + struct + { + __IOM uint32_t CC312_RNG_WATCHDOG_VAL : 32; /*!< [31..0] Defines the maximum number of clock cycles per TRNG + * collection of 192 samples. If the number of cycles for + * a collection exceeds this threshold, TRNG signals an interrupt. */ + } CC312_RNG_WATCHDOG_VAL_REG_b; + }; + + union + { + __IOM uint32_t CC312_RNG_DMA_STATUS_REG; /*!< (@ 0x000001DC) This register holds the RNG DMA status. */ + + struct + { + __IM uint32_t CC312_RNG_DMA_BUSY : 1; /*!< [0..0] Indicates whether DMA is busy. */ + __IM uint32_t CC312_DMA_SRC_SEL : 2; /*!< [2..1] The active ring oscillator length using by DMA */ + __IM uint32_t CC312_NUM_OF_SAMPLES : 8; /*!< [10..3] Number of samples already collected in the current ring + * oscillator chain length. */ + uint32_t : 21; + } CC312_RNG_DMA_STATUS_REG_b; + }; + __IM uint32_t RESERVED7[104]; + + union + { + __IOM uint32_t CC312_CHACHA_CONTROL_REG_REG; /*!< (@ 0x00000380) CHACHA general configuration. */ + + struct + { + __IOM uint32_t CC312_CHACHA_OR_SALSA : 1; /*!< [0..0] Core: @1'b0 - ChaCha mode. @1'b1 - Salsa mode. */ + __IOM uint32_t CC312_INIT_FROM_HOST : 1; /*!< [1..1] Start init for new Message: @1'b0 - disable. @1'b1 - + * enable. */ + __IOM uint32_t CC312_CALC_KEY_FOR_POLY1305 : 1; /*!< [2..2] Only if ChaCha core: @1'b0 - disable. @1'b1 - enable. */ + __IOM uint32_t CC312_KEY_LEN : 1; /*!< [3..3] For All Core: @1'b0 - 256 bit. @1'b1 - 128 bit. */ + __IOM uint32_t CC312_NUM_OF_ROUNDS : 2; /*!< [5..4] The core of ChaCha is a hash function which based on + * rotation operations. The hash function consist in application + * of 20 rounds (default value). In additional, ChaCha have + * two variants (they work exactly as the original algorithm): + * ChaCha20/8 and ChaCha20/12 (using 8 and 12 rounds). Default + * value 00 @00 - 20 rounds @01 - 12 rounds @10 - 8 rounds + * @11 - N/A */ + uint32_t : 3; + __IOM uint32_t CC312_RESET_BLOCK_CNT : 1; /*!< [9..9] For new message */ + __IOM uint32_t CC312_USE_IV_96BIT : 1; /*!< [10..10] If use 96bit IV */ + uint32_t : 21; + } CC312_CHACHA_CONTROL_REG_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_VERSION_REG; /*!< (@ 0x00000384) CHACHA Version */ + + struct + { + __IM uint32_t CC312_CHACHA_VERSION : 32; /*!< [31..0] no field description provided */ + } CC312_CHACHA_VERSION_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_KEY0_REG; /*!< (@ 0x00000388) bits 255:224 of CHACHA Key */ + + struct + { + __OM uint32_t CC312_CHACHA_KEY0 : 32; /*!< [31..0] bits 255:224 of CHACHA Key */ + } CC312_CHACHA_KEY0_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_KEY1_REG; /*!< (@ 0x0000038C) bits 223:192 of CHACHA Key */ + + struct + { + __OM uint32_t CC312_CHACHA_KEY1 : 32; /*!< [31..0] bits 223:192 of CHACHA Key */ + } CC312_CHACHA_KEY1_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_KEY2_REG; /*!< (@ 0x00000390) bits191:160 of CHACHA Key */ + + struct + { + __OM uint32_t CC312_CHACHA_KEY2 : 32; /*!< [31..0] bits191:160 of CHACHA Key */ + } CC312_CHACHA_KEY2_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_KEY3_REG; /*!< (@ 0x00000394) bits159:128 of CHACHA Key */ + + struct + { + __OM uint32_t CC312_CHACHA_KEY3 : 32; /*!< [31..0] bits 159:128 of CHACHA Key */ + } CC312_CHACHA_KEY3_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_KEY4_REG; /*!< (@ 0x00000398) bits 127:96 of CHACHA Key */ + + struct + { + __OM uint32_t CC312_CHACHA_KEY4 : 32; /*!< [31..0] bits 127:96 of CHACHA Key */ + } CC312_CHACHA_KEY4_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_KEY5_REG; /*!< (@ 0x0000039C) bits 95:64 of CHACHA Key */ + + struct + { + __OM uint32_t CC312_CHACHA_KEY5 : 32; /*!< [31..0] bits 95:64 of CHACHA Key */ + } CC312_CHACHA_KEY5_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_KEY6_REG; /*!< (@ 0x000003A0) bits 63:32 of CHACHA Key */ + + struct + { + __OM uint32_t CC312_CHACHA_KEY6 : 32; /*!< [31..0] bits 63:32 of CHACHA Key */ + } CC312_CHACHA_KEY6_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_KEY7_REG; /*!< (@ 0x000003A4) bits 31:0 of CHACHA Key */ + + struct + { + __OM uint32_t CC312_CHACHA_KEY7 : 32; /*!< [31..0] bits 31:0 of CHACHA Key */ + } CC312_CHACHA_KEY7_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_IV_0_REG; /*!< (@ 0x000003A8) bits 31:0 of CHACHA_IV0 register */ + + struct + { + __IOM uint32_t CC312_CHACHA_IV_0 : 32; /*!< [31..0] bits 31:0 of CHACHA_IV0 register */ + } CC312_CHACHA_IV_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_IV_1_REG; /*!< (@ 0x000003AC) bits 31:0 of CHACHA_IV1 register */ + + struct + { + __IOM uint32_t CC312_CHACHA_IV_1 : 32; /*!< [31..0] bits 31:0 of CHACHA_IV1 register */ + } CC312_CHACHA_IV_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_BUSY_REG; /*!< (@ 0x000003B0) This register is set when the CHACHA/SALSA core + * is active */ + + struct + { + __IM uint32_t CC312_CHACHA_BUSY : 1; /*!< [0..0] CHACHA_BUSY Register. this register is set when the CHACHA/SALSA + * core is active */ + uint32_t : 31; + } CC312_CHACHA_BUSY_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_HW_FLAGS_REG; /*!< (@ 0x000003B4) This register holds the pre-synthesis HW flag + * configuration of the CHACHA/SALSA engine */ + + struct + { + __IM uint32_t CC312_CHACHA_EXISTS : 1; /*!< [0..0] If this flag is set, the Salsa/ChaCha engine include + * ChaCha implementation: @1'b0 - disable. @1'b1 - enable. */ + __IM uint32_t CC312_SALSA_EXISTS : 1; /*!< [1..1] If this flag is set, the Salsa/ChaCha engine include + * Salsa implementation: @1'b0 - disable. @1'b1 - enable. */ + __IM uint32_t CC312_FAST_CHACHA : 1; /*!< [2..2] If this flag is set, the next matrix calculated when + * the current one is written to data output path (same flag + * for Salsa core): @1'b0 - disable. @1'b1 - enable. */ + uint32_t : 29; + } CC312_CHACHA_HW_FLAGS_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_BLOCK_CNT_LSB_REG; /*!< (@ 0x000003B8) The two first words (n) in the last row of the + * cipher matrix are the block counter. At + * the end of each block (512b), the block_cnt + * for the next block is written by HW to the + * block_cnt_lsb and block_cnt_msb registers. + * Need reset block counter , if start new + * message. */ + + struct + { + __IOM uint32_t CC312_CHACHA_BLOCK_CNT_LSB : 32; /*!< [31..0] bits 31:0 of CHACHA_BLOCK_CNT_LSB register. This register + * holds the chacha block counter bits 31:0 */ + } CC312_CHACHA_BLOCK_CNT_LSB_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_BLOCK_CNT_MSB_REG; /*!< (@ 0x000003BC) The two first words (n) in the last row of the + * cipher matrix are the block counter. At + * the end of each block (512b), the block_cnt + * for the next block is written by HW to the + * block_cnt_lsb and block_cnt_msb registers. + * Need reset block counter , if start new + * message. */ + + struct + { + __IOM uint32_t CC312_CHACHA_BLOCK_CNT_MSB : 32; /*!< [31..0] bits 31:0 of CHACHA_BLOCK_CNT_MSB register. This register + * holds the chacha block counter bits 63:32 */ + } CC312_CHACHA_BLOCK_CNT_MSB_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_SW_RESET_REG; /*!< (@ 0x000003C0) Resets CHACHA/SALSA engine. */ + + struct + { + __OM uint32_t CC312_CHACH_SW_RESET : 1; /*!< [0..0] Writing to this address resets the only FSM of CHACHA + * engine. The reset takes 4 CORE_CLK cycles. */ + uint32_t : 31; + } CC312_CHACHA_SW_RESET_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_FOR_POLY_KEY0_REG; /*!< (@ 0x000003C4) bits 255:224 of CHACHA_FOR_POLY_KEY */ + + struct + { + __IM uint32_t CC312_CHACHA_FOR_POLY_KEY0 : 32; /*!< [31..0] bits 255:224 of CHACHA_FOR_POLY_KEY */ + } CC312_CHACHA_FOR_POLY_KEY0_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_FOR_POLY_KEY1_REG; /*!< (@ 0x000003C8) bits 223:192 of CHACHA_FOR_POLY_KEY */ + + struct + { + __IM uint32_t CC312_CHACHA_FOR_POLY_KEY1 : 32; /*!< [31..0] bits 223:192 of CHACHA_FOR_POLY_KEY */ + } CC312_CHACHA_FOR_POLY_KEY1_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_FOR_POLY_KEY2_REG; /*!< (@ 0x000003CC) bits191:160 of CHACHA_FOR_POLY_KEY */ + + struct + { + __IM uint32_t CC312_CHACHA_FOR_POLY_KEY2 : 32; /*!< [31..0] bits191:160 of CHACHA_FOR_POLY_KEY */ + } CC312_CHACHA_FOR_POLY_KEY2_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_FOR_POLY_KEY3_REG; /*!< (@ 0x000003D0) bits159:128 of CHACHA_FOR_POLY_KEY */ + + struct + { + __IM uint32_t CC312_CHACHA_FOR_POLY_KEY3 : 32; /*!< [31..0] bits 159:128 of CHACHA_FOR_POLY_KEY */ + } CC312_CHACHA_FOR_POLY_KEY3_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_FOR_POLY_KEY4_REG; /*!< (@ 0x000003D4) bits 127:96 of CHACHA_FOR_POLY_KEY */ + + struct + { + __IM uint32_t CC312_CHACHA_FOR_POLY_KEY4 : 32; /*!< [31..0] bits 127:96 of CHACHA_FOR_POLY_KEY */ + } CC312_CHACHA_FOR_POLY_KEY4_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_FOR_POLY_KEY5_REG; /*!< (@ 0x000003D8) bits 95:64 of CHACHA_FOR_POLY_KEY */ + + struct + { + __IM uint32_t CC312_CHACHA_FOR_POLY_KEY5 : 32; /*!< [31..0] bits 95:64 of CHACHA_FOR_POLY_KEY */ + } CC312_CHACHA_FOR_POLY_KEY5_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_FOR_POLY_KEY6_REG; /*!< (@ 0x000003DC) bits 63:32 of CHACHA_FOR_POLY_KEY */ + + struct + { + __IM uint32_t CC312_CHACHA_FOR_POLY_KEY6 : 32; /*!< [31..0] bits 63:32 of CHACHA_FOR_POLY_KEY */ + } CC312_CHACHA_FOR_POLY_KEY6_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_FOR_POLY_KEY7_REG; /*!< (@ 0x000003E0) bits 31:0 of CHACHA_FOR_POLY_KEY */ + + struct + { + __IM uint32_t CC312_CHACHA_FOR_POLY_KEY7 : 32; /*!< [31..0] bits 31:0 of CHACHA_FOR_POLY_KEY */ + } CC312_CHACHA_FOR_POLY_KEY7_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG; /*!< (@ 0x000003E4) CHACHA/SALSA DATA ORDER configuration. */ + + struct + { + __IOM uint32_t CC312_CHACHA_DIN_WORD_ORDER : 1; /*!< [0..0] Change the words order of the input data. @1'b0 - disable. + * @1'b1 - enable. (reverse each word in 128 bit input ( w0->w3, + * w1->w2, w2->w1,w3-w0)) */ + __IOM uint32_t CC312_CHACHA_DIN_BYTE_ORDER : 1; /*!< [1..1] Change the byte order of the input data. @1'b0 - disable. + * @1'b1 - enable. (reverse each byte in each word input (b0->b3, + * b1->b2, b2->b1,b3->b0)) */ + __IOM uint32_t CC312_CHACHA_CORE_MATRIX_LBE_ORDER : 1; /*!< [2..2] Change the quarter of a matrix order in core @1'b0 - + * disable. @1'b1 - enable. (reverse each quarter of a matrix + * (m[0-127]->m[384-511], m[128-255]->m[256-383], m[256-383]->m[128-255], + * m[384-511]->m[0-127])) */ + __IOM uint32_t CC312_CHACHA_DOUT_WORD_ORDER : 1; /*!< [3..3] Change the words order of the output data. @1'b0 - disable. + * @1'b1 - enable. (reverse each word in 128 bit output ( + * w0->w3, w1->w2, w2->w1,w3-w0)) */ + __IOM uint32_t CC312_CHACHA_DOUT_BYTE_ORDER : 1; /*!< [4..4] Change the byte order of the output data. @1'b0 - disable. + * @1'b1 - enable. (reverse each byte in each word output + * (b0->b3, b1->b2, b2->b1,b3->b0)) */ + uint32_t : 27; + } CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_b; + }; + + union + { + __IOM uint32_t CC312_CHACHA_DEBUG_REG_REG; /*!< (@ 0x000003E8) This register is used to debug the CHACHA engine */ + + struct + { + __IM uint32_t CC312_CHACHA_DEBUG_FSM_STATE : 2; /*!< [1..0] CHACHA_DEBUG_FSM_STATE @0x0 - IDLE_STATE @0x1 - INIT_STATE + * @0x2 - ROUNDS_STATE @0x3 - FINAL_STATE */ + uint32_t : 30; + } CC312_CHACHA_DEBUG_REG_REG_b; + }; + __IM uint32_t RESERVED8[5]; + + union + { + __IOM uint32_t CC312_AES_KEY_0_0_REG; /*!< (@ 0x00000400) bits 31:0 of AES Key0 (used as the AES key in + * non-tunneling operations, and as the first + * tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_0_0 : 32; /*!< [31..0] bits 31:0 of AES Key0. */ + } CC312_AES_KEY_0_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_0_1_REG; /*!< (@ 0x00000404) bits 63:32 of AES Key0 (used as the AES key in + * non-tunneling operations, and as the first + * tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_0_1 : 32; /*!< [31..0] bits 63:32 of AES Key0. */ + } CC312_AES_KEY_0_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_0_2_REG; /*!< (@ 0x00000408) bits 95:64 of AES Key0 (used as the AES key in + * non-tunneling operations, and as the first + * tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_0_2 : 32; /*!< [31..0] bits 95:64 of AES Key0. */ + } CC312_AES_KEY_0_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_0_3_REG; /*!< (@ 0x0000040C) bits 127:96 of AES Key0 (used as the AES key + * in non-tunneling operations, and as the + * first tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_0_3 : 32; /*!< [31..0] bits 127:96 of AES Key0. */ + } CC312_AES_KEY_0_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_0_4_REG; /*!< (@ 0x00000410) bits 159:128 of AES Key0 (used as the AES key + * in non-tunneling operations, and as the + * first tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_0_4 : 32; /*!< [31..0] bits 159:128 of AES Key0 . */ + } CC312_AES_KEY_0_4_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_0_5_REG; /*!< (@ 0x00000414) bits 191:160 of AES Key0 (used as the AES key + * in non-tunneling operations, and as the + * first tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_0_5 : 32; /*!< [31..0] bits 191:160 of AES Key0. */ + } CC312_AES_KEY_0_5_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_0_6_REG; /*!< (@ 0x00000418) bits 223:192 of AES Key0 (used as the AES key + * in non-tunneling operations, and as the + * first tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_0_6 : 32; /*!< [31..0] bits 223:192 of AES Key0. */ + } CC312_AES_KEY_0_6_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_0_7_REG; /*!< (@ 0x0000041C) bits 255:224 of AES Key0 (used as the AES key + * in non-tunneling operations, and as the + * first tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_0_7 : 32; /*!< [31..0] bits 255:224 of AES Key0. */ + } CC312_AES_KEY_0_7_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_1_0_REG; /*!< (@ 0x00000420) bits 31:0 of AES Key1 (used as the second AES + * tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_1_0 : 32; /*!< [31..0] bits 31:0 of AES Key1. */ + } CC312_AES_KEY_1_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_1_1_REG; /*!< (@ 0x00000424) bits 63:32 of AES Key1 (used as the second AES + * tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_1_1 : 32; /*!< [31..0] bits 63:32 of AES Key1. */ + } CC312_AES_KEY_1_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_1_2_REG; /*!< (@ 0x00000428) bits 95:64 of AES Key1 (used as the second AES + * tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_1_2 : 32; /*!< [31..0] bits 95:64 of AES Key1. */ + } CC312_AES_KEY_1_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_1_3_REG; /*!< (@ 0x0000042C) bits 127:96 of AES Key1 (used as the second AES + * tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_1_3 : 32; /*!< [31..0] bits 127:96 of AES Key1. */ + } CC312_AES_KEY_1_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_1_4_REG; /*!< (@ 0x00000430) bits 159:128 of AES Key1 (used as the second + * AES tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_1_4 : 32; /*!< [31..0] bits 159:128 of AES Key1. */ + } CC312_AES_KEY_1_4_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_1_5_REG; /*!< (@ 0x00000434) bits 191:160 of AES Key1 (used as the second + * AES tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_1_5 : 32; /*!< [31..0] bits 191:160 of AES Key1. */ + } CC312_AES_KEY_1_5_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_1_6_REG; /*!< (@ 0x00000438) bits 223:192 of AES Key1 (used as the second + * AES tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_1_6 : 32; /*!< [31..0] bits 223:192 of AES Key1. */ + } CC312_AES_KEY_1_6_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_KEY_1_7_REG; /*!< (@ 0x0000043C) bits 255:224 of AES Key1 (used as the second + * AES tunnel stage key in tunneling operations). */ + + struct + { + __OM uint32_t CC312_AES_KEY_1_7 : 32; /*!< [31..0] bits 255:224 of AES Key1. */ + } CC312_AES_KEY_1_7_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_IV_0_0_REG; /*!< (@ 0x00000440) bits 31:0 of AES_IV0 register. AES IV0 is used + * as the AES IV (Initialization Value) register + * in non-tunneling operations, and as the + * first tunnel stage IV register in tunneling + * operations. The IV register should be loaded + * according to the AES mode: in AES CBC/CBC-MAC + * - the AES IV register should be loaded with + * the IV (initialization vector). in XTS-AES + * - the AES IV register should be loaded with + * the 'T' value (unless the HW T calculation + * mode is active, in which the 'T' value is + * calculated */ + + struct + { + __IOM uint32_t CC312_AES_IV_0_0 : 32; /*!< [31..0] bits 31:0 of AES_IV0 register. For the description of + * AES_IV0, see the AES_IV_0_0 register description */ + } CC312_AES_IV_0_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_IV_0_1_REG; /*!< (@ 0x00000444) bits 63:32 of AES_IV0 128b register. For the + * description of AES_IV0, see the AES_IV_0_0 + * register description */ + + struct + { + __IOM uint32_t CC312_AES_IV_0_1 : 32; /*!< [31..0] bits 63:32 of AES_IV0 register. For the description + * of AES_IV0, see the AES_IV_0_0 register description */ + } CC312_AES_IV_0_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_IV_0_2_REG; /*!< (@ 0x00000448) bits 95:64 of AES_IV0 128b register. For the + * description of AES_IV0, see the AES_IV_0_0 + * register description */ + + struct + { + __IOM uint32_t CC312_AES_IV_0_2 : 32; /*!< [31..0] bits 95:64 of AES_IV0 register. For the description + * of AES_IV0, see the AES_IV_0_0 register description */ + } CC312_AES_IV_0_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_IV_0_3_REG; /*!< (@ 0x0000044C) bits 127:96 of AES_IV0 128b register. For the + * description of AES_IV0, see the AES_IV_0_0 + * register description */ + + struct + { + __IOM uint32_t CC312_AES_IV_0_3 : 32; /*!< [31..0] bits 127:96 of AES_IV0 register. For the description + * of AES_IV0, see the AES_IV_0_0 register description */ + } CC312_AES_IV_0_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_IV_1_0_REG; /*!< (@ 0x00000450) bits 31:0 of AES_IV1 128b register. AES IV1 is + * used as the AES IV (Initialization Value) + * register as the second tunnel stage IV register + * in tunneling operations. The IV register + * should be loaded according to the AES mode: + * in AES CBC/CBC-MAC - the AES IV register + * should be loaded with the IV (initialization + * vector). in XTS-AES - the AES IV register + * should be loaded with the 'T' value (unless + * the HW T calculation mode is active, in + * which the 'T' value is calculated by the + * HW. */ + + struct + { + __IOM uint32_t CC312_AES_IV_1_0 : 32; /*!< [31..0] bits 31:0 of AES_IV1 register. For the description of + * AES_IV1, see the AES_IV_1_0 register description */ + } CC312_AES_IV_1_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_IV_1_1_REG; /*!< (@ 0x00000454) bits 63:32 of AES_IV1 128b register. For the + * description of AES_IV1, see the AES_IV_1_0 + * register description */ + + struct + { + __IOM uint32_t CC312_AES_IV_1_1 : 32; /*!< [31..0] bits 63:32 of AES_IV1 register. For the description + * of AES_IV1, see the AES_IV_1_0 register description */ + } CC312_AES_IV_1_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_IV_1_2_REG; /*!< (@ 0x00000458) bits 95:64 of AES_IV1 128b register. For the + * description of AES_IV1, see the AES_IV_1_0 + * register description */ + + struct + { + __IOM uint32_t CC312_AES_IV_1_2 : 32; /*!< [31..0] bits 95:64 of AES_IV1 register. For the description + * of AES_IV1, see the AES_IV_1_0 register description */ + } CC312_AES_IV_1_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_IV_1_3_REG; /*!< (@ 0x0000045C) bits 127:96 of AES_IV1 128b register. For the + * description of AES_IV1, see the AES_IV_1_0 + * register description */ + + struct + { + __IOM uint32_t CC312_AES_IV_1_3 : 32; /*!< [31..0] bits 127:96 of AES_IV1 register. For the description + * of AES_IV1, see the AES_IV_1_0 register description */ + } CC312_AES_IV_1_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_CTR_0_0_REG; /*!< (@ 0x00000460) bits 31:0 of AES_CTR0 128b register. AES CTR0 + * is used as the AES CTR (counter) register + * in non-tunneling operations, and as the + * first tunnel stage CTR register in tunneling + * operations. The CTR register should be loaded + * according to the AES mode: in AES CTR/GCTR + * - the AES CTR register should be loaded + * with the counter value. in XTS-AES - the + * AES CTR register should be loaded with the + * 'i' value (in order to calculate the T value + * from it, if HW T calculation is supported). */ + + struct + { + __IOM uint32_t CC312_AES_CTR_0_0 : 32; /*!< [31..0] bits 31:0 of AES_CTR0 register. For the description + * of AES_CTR0, see the AES_CTR_0_0 register description */ + } CC312_AES_CTR_0_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_CTR_0_1_REG; /*!< (@ 0x00000464) bits 63:32 of AES_CTR0 128b register. For the + * description of AES_CTR0, see the AES_CTR_0_0 + * register description. */ + + struct + { + __IOM uint32_t CC312_AES_CTR_0_1 : 32; /*!< [31..0] bits 63:32 of AES_CTR0 register. For the description + * of AES_CTR0, see the AES_CTR_0_0 register description */ + } CC312_AES_CTR_0_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_CTR_0_2_REG; /*!< (@ 0x00000468) bits 95:64 of AES_CTR0 128b register. For the + * description of AES_CTR0, see the AES_CTR_0_0 + * register description. */ + + struct + { + __IOM uint32_t CC312_AES_CTR_0_2 : 32; /*!< [31..0] bits 95:64 of AES_CTR0 register. For the description + * of AES_CTR0, see the AES_CTR_0_0 register description */ + } CC312_AES_CTR_0_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_CTR_0_3_REG; /*!< (@ 0x0000046C) bits 127:96 of AES_CTR0 128b register. For the + * description of AES_CTR0, see the AES_CTR_0_0 + * register description. */ + + struct + { + __IOM uint32_t CC312_AES_CTR_0_3 : 32; /*!< [31..0] bits 127:96 of AES_CTR0 register. For the description + * of AES_CTR0, see the AES_CTR_0_0 register description */ + } CC312_AES_CTR_0_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_BUSY_REG; /*!< (@ 0x00000470) This register is set when the AES core is active */ + + struct + { + __IM uint32_t CC312_AES_BUSY : 1; /*!< [0..0] AES_BUSY Register. this register is set when the AES + * core is active */ + uint32_t : 31; + } CC312_AES_BUSY_REG_b; + }; + __IM uint32_t RESERVED9; + + union + { + __IOM uint32_t CC312_AES_SK_REG; /*!< (@ 0x00000478) writing to this address causes sampling of the + * HW key to the AES_KEY0 register */ + + struct + { + __OM uint32_t CC312_AES_SK : 1; /*!< [0..0] writing to this address causes sampling of the HW key + * to the AES_KEY0 register */ + uint32_t : 31; + } CC312_AES_SK_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_CMAC_INIT_REG; /*!< (@ 0x0000047C) Writing to this address triggers the AES engine + * generating of K1 and K2 for AES CMAC operations. + * Note: This is a special register, affected + * by internal logic. Test result of this register + * is NA. */ + + struct + { + __OM uint32_t CC312_AES_CMAC_INIT : 1; /*!< [0..0] Writing to this address starts the generating of K1 and + * K2 for AES CMAC operations */ + uint32_t : 31; + } CC312_AES_CMAC_INIT_REG_b; + }; + __IM uint32_t RESERVED10[13]; + + union + { + __IOM uint32_t CC312_AES_SK1_REG; /*!< (@ 0x000004B4) writing to this address causes sampling of the + * HW key to the AES_KEY1 register */ + + struct + { + __OM uint32_t CC312_AES_SK1 : 1; /*!< [0..0] writing to this address causes sampling of the HW key + * to the AES_KEY1 register */ + uint32_t : 31; + } CC312_AES_SK1_REG_b; + }; + __IM uint32_t RESERVED11; + + union + { + __IOM uint32_t CC312_AES_REMAINING_BYTES_REG; /*!< (@ 0x000004BC) This register should be set with the amount of + * remaining bytes until the end of the current + * AES operation. The AES engine counts down + * from this value to determine the last / + * one before last blocks in AES CMAC, XTS + * AES and AES CCM. */ + + struct + { + __IOM uint32_t CC312_AES_REMAINING_BYTES : 32; /*!< [31..0] This register should be set with the amount of remaining + * bytes until the end of the current AES operation. The AES + * engine counts down from this value to determine the last + * / one before last blocks in AES CMAC, XTS AES and AES CCM. */ + } CC312_AES_REMAINING_BYTES_REG_b; + }; + + union + { + __IOM uint32_t CC312_AES_CONTROL_REG; /*!< (@ 0x000004C0) This register holds the configuration of the + * AES engine Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + __IOM uint32_t CC312_DEC_KEY0 : 1; /*!< [0..0] This field determines whether the AES performs Decrypt/Encrypt + * operations, in non-tunneling operations: @0 - Encrypt @1 + * - Decrypt */ + __IOM uint32_t CC312_MODE0_IS_CBC_CTS : 1; /*!< [1..1] If MODE_KEY0 is set to 3'b001 (CBC), and this field is + * set - the mode is CBC-CTS. In addition, If MODE_KEY0 is + * set to 3'b010 (CTR), and this field is set - the mode is + * GCTR. */ + __IOM uint32_t CC312_MODE_KEY0 : 3; /*!< [4..2] This field determines the AES mode in non tunneling operations, + * and the AES mode of the first stage in tunneling operations: + * @000 - ECB @001 - CBC @010 - CTR @011 - CBC MAC @100 - + * XEX/XTS @101 - XCBC-MAC @110 -OFB @111 - CMAC */ + __IOM uint32_t CC312_MODE_KEY1 : 3; /*!< [7..5] This field determines the AES mode of the second stage + * operation in tunneling operations: @000 - ECB @001 - CBC + * @010 - CTR @011 - CBC MAC @100 - XEX/XTS @101 - XCBC-MAC + * @110 -OFB @111 - CMAC */ + __IOM uint32_t CC312_CBC_IS_ESSIV : 1; /*!< [8..8] If MODE_KEY0 is set to 3'b001 (CBC), and this field is + * set - the mode is CBC-with ESSIV. */ + uint32_t : 1; + __IOM uint32_t CC312_AES_TUNNEL_IS_ON : 1; /*!< [10..10] This field determines whether the AES performs dual-tunnel + * operations or standard non-tunneling operations: @0 - standard + * non-tunneling operations @1 - tunneling operations. */ + __IOM uint32_t CC312_CBC_IS_BITLOCKER : 1; /*!< [11..11] If MODE_KEY0 is set to 3'b001 (CBC), and this field + * is set - the mode isBITLOCKER. */ + __IOM uint32_t CC312_NK_KEY0 : 2; /*!< [13..12] This field determines the AES Key length in non tunneling + * operations, and the AES key length of the first stage in + * tunneling operations: @00 - 128 bits key @01 - 192 bits + * key @10 - 256 bits key @11 - N/A */ + __IOM uint32_t CC312_NK_KEY1 : 2; /*!< [15..14] This field determines the AES key length of the second + * stage operation in tunneling operations: @00 - 128 bits + * key @01 - 192 bits key @10 - 256 bits key @11 - N/A */ + uint32_t : 6; + __IOM uint32_t CC312_AES_TUNNEL1_DECRYPT : 1; /*!< [22..22] This field determines whether the second tunnel stage + * performs encrypt or decrypt operation : @0 - the second + * tunnel stage performs encrypt operations. @1 - the second + * tunnel stage performs decrypt operations. */ + __IOM uint32_t CC312_AES_TUN_B1_USES_PADDED_DATA_IN : 1; /*!< [23..23] This field determines, for tunneling operations, the + * data that is fed to the second tunneling stage: @0 - the + * output of the first block (standard tunneling operation). + * @1- data_in after padding rather than the output of the + * first block. */ + __IOM uint32_t CC312_AES_TUNNEL0_ENCRYPT : 1; /*!< [24..24] This field determines whether the first tunnel stage + * performs encrypt or decrypt operation : @0 - the first + * tunnel stage performs decrypt operations. @1 - the first + * tunnel stage performs encrypt operations. */ + __IOM uint32_t CC312_AES_OUTPUT_MID_TUNNEL_DATA : 1; /*!< [25..25] This fields determines whether the AES output is the + * result of the first or second tunneling stage: @0 - The + * AES engine outputs the result of the second tunnel stage + * (standard tunneling). @1 - The AES engine outputs the result + * of the first tunnel stage. */ + __IOM uint32_t CC312_AES_TUNNEL_B1_PAD_EN : 1; /*!< [26..26] This field determines whether the input data to the + * second tunnel stage is padded with zeroes (according to + * the remaining_bytes value) or not: @0 - The data input + * to the second tunnel block is not padded with zeros. @1 + * - The data input to the second tunnel block is padded with + * zeros. */ + uint32_t : 1; + __IOM uint32_t CC312_AES_OUT_MID_TUN_TO_HASH : 1; /*!< [28..28] This field determines for AES-TO-HASH-AND-DOUT tunneling + * operations, whether the AES outputs to the HASH the result + * of the first or the second tunneling stage: @0 - The AES + * engine writes to the hash the result of the second tunnel + * stage. @1 - The AES engine writes to the hash the result + * of the first tunnel stage. */ + __IOM uint32_t CC312_AES_XOR_CRYPTOKEY : 1; /*!< [29..29] This field determines the value that is written to + * AES_KEY0, when AES_SK is kicked: @0 - The value that is + * written to AES_KEY0 is the value of the HW cryptokey, as + * is. @1 - The value that is written to AES_KEY0 is the value + * of the HW cryptokey xored with the current value of AES_KEY0. */ + uint32_t : 1; + __IOM uint32_t CC312_DIRECT_ACCESS : 1; /*!< [31..31] Using direct access and not the din-dout interface */ + } CC312_AES_CONTROL_REG_b; + }; + __IM uint32_t RESERVED12; + + union + { + __IOM uint32_t CC312_AES_HW_FLAGS_REG; /*!< (@ 0x000004C8) This register holds the pre-synthesis HW flag + * configuration of the AES engine */ + + struct + { + __IM uint32_t CC312_SUPPORT_256_192_KEY : 1; /*!< [0..0] the SUPPORT_256_192_KEY flag */ + __IM uint32_t CC312_AES_LARGE_RKEK : 1; /*!< [1..1] the AES_LARGE_RKEK flag */ + __IM uint32_t CC312_DPA_CNTRMSR_EXIST : 1; /*!< [2..2] the DPA_CNTRMSR_EXIST flag */ + __IM uint32_t CC312_CTR_EXIST : 1; /*!< [3..3] the CTR_EXIST flag */ + __IM uint32_t CC312_ONLY_ENCRYPT : 1; /*!< [4..4] the ONLY_ENCRYPT flag */ + __IM uint32_t CC312_USE_SBOX_TABLE : 1; /*!< [5..5] the USE_SBOX_TABLE flag */ + uint32_t : 2; + __IM uint32_t CC312_USE_5_SBOXES : 1; /*!< [8..8] the USE_5_SBOXES flag */ + __IM uint32_t CC312_AES_SUPPORT_PREV_IV : 1; /*!< [9..9] the AES_SUPPORT_PREV_IV flag */ + __IM uint32_t CC312_aes_tunnel_exists : 1; /*!< [10..10] the aes_tunnel_exists flag */ + __IM uint32_t CC312_SECOND_REGS_SET_EXIST : 1; /*!< [11..11] the SECOND_REGS_SET_EXIST flag */ + __IM uint32_t CC312_DFA_CNTRMSR_EXIST : 1; /*!< [12..12] the DFA_CNTRMSR_EXIST flag */ + uint32_t : 19; + } CC312_AES_HW_FLAGS_REG_b; + }; + __IM uint32_t RESERVED13[3]; + + union + { + __IOM uint32_t CC312_AES_CTR_NO_INCREMENT_REG; /*!< (@ 0x000004D8) This register enables the AES CTR no increment + * mode (in which the counter mode is not incremented + * between 2 blocks) */ + + struct + { + __IOM uint32_t CC312_AES_CTR_NO_INCREMENT : 1; /*!< [0..0] This field enables the AES CTR "no increment" mode (in + * which the counter mode is not incremented between 2 blocks) */ + uint32_t : 31; + } CC312_AES_CTR_NO_INCREMENT_REG_b; + }; + __IM uint32_t RESERVED14[5]; + + union + { + __IOM uint32_t CC312_AES_DFA_IS_ON_REG; /*!< (@ 0x000004F0) This register disable/enable the AES dfa. Note: + * This is a special register, affected by + * internal logic. Test result of this register + * is NA. */ + + struct + { + __IOM uint32_t CC312_AES_DFA_IS_ON : 1; /*!< [0..0] writing to this register turns the DFA counter-measures + * on. this register exists only if DFA countermeasures are + * supported */ + uint32_t : 31; + } CC312_AES_DFA_IS_ON_REG_b; + }; + __IM uint32_t RESERVED15; + + union + { + __IOM uint32_t CC312_AES_DFA_ERR_STATUS_REG; /*!< (@ 0x000004F8) dfa error status register. */ + + struct + { + __IM uint32_t CC312_AES_DFA_ERR_STATUS : 1; /*!< [0..0] after a DFA violation this register is set and the AES + * block is disabled) until the next reset. this register + * only exists if DFA countermeasures is are supported */ + uint32_t : 31; + } CC312_AES_DFA_ERR_STATUS_REG_b; + }; + __IM uint32_t RESERVED16[10]; + + union + { + __IOM uint32_t CC312_AES_CMAC_SIZE0_KICK_REG; /*!< (@ 0x00000524) writing to this address triggers the AES engine + * to perform a CMAC operation with size 0. + * The CMAC result can be read from the AES_IV0 + * register. */ + + struct + { + __OM uint32_t CC312_AES_CMAC_SIZE0_KICK : 1; /*!< [0..0] writing to this address triggers the AES engine to perform + * a CMAC operation with size 0. The CMAC result can be read + * from the AES_IV0 register. */ + uint32_t : 31; + } CC312_AES_CMAC_SIZE0_KICK_REG_b; + }; + __IM uint32_t RESERVED17[70]; + + union + { + __IOM uint32_t CC312_HASH_H0_REG; /*!< (@ 0x00000640) H0 data. can only be written in the following + * HASH_CONTROL modes: MD5 SHA1 SHA224 SHA256 + * SHA384 SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H0 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H0_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_H1_REG; /*!< (@ 0x00000644) H1 data. can only be written in the following + * HASH_CONTROL modes: MD5 SHA1 SHA224 SHA256 + * SHA384 SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H1 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H1_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_H2_REG; /*!< (@ 0x00000648) H2 data. can only be written in the following + * HASH_CONTROL modes: MD5 SHA1 SHA224 SHA256 + * SHA384 SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H2 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H2_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_H3_REG; /*!< (@ 0x0000064C) H3 data. can only be written in the following + * HASH_CONTROL modes: MD5 SHA1 SHA224 SHA256 + * SHA384 SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H3 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H3_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_H4_REG; /*!< (@ 0x00000650) H4 data. can only be written in the following + * HASH_CONTROL modes: SHA1 SHA224 SHA256 SHA384 + * SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H4 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H4_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_H5_REG; /*!< (@ 0x00000654) H5 data. can only be written in the following + * HASH_CONTROL modes: SHA224 SHA256 SHA384 + * SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H5 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H5_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_H6_REG; /*!< (@ 0x00000658) H6 data. can only be written in the following + * HASH_CONTROL modes: SHA224 SHA256 SHA384 + * SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H6 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H6_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_H7_REG; /*!< (@ 0x0000065C) H7 data. can only be written in the following + * HASH_CONTROL modes: SHA224 SHA256 SHA384 + * SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H7 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H7_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_H8_REG; /*!< (@ 0x00000660) H8 data. can only be written in the following + * HASH_CONTROL modes: SHA384 SHA512 */ + + struct + { + __IOM uint32_t CC312_HASH_H8 : 32; /*!< [31..0] 1) Write initial Hash value. 2) Read final Hash value + * - result. */ + } CC312_HASH_H8_REG_b; + }; + __IM uint32_t RESERVED18[8]; + + union + { + __IOM uint32_t CC312_AUTO_HW_PADDING_REG; /*!< (@ 0x00000684) HW padding automatically activated by engine. + * For the special case of ZERO bytes data + * vector this register should not be used! + * instead use HASH_PAD_CFG */ + + struct + { + __OM uint32_t CC312_AUTO_HW_PADDING_EN : 1; /*!< [0..0] 1'b1 - Enable Automatic HW padding (No need for SW intervention + * by writing PAD_CFG). Note: Not supported for 0 bytes ! + * Note: Disable this register when HASH op is done */ + uint32_t : 31; + } CC312_AUTO_HW_PADDING_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_XOR_DIN_REG; /*!< (@ 0x00000688) This register is always xored with the input + * to the hash engine,it should be '0' if xored + * is not reqiured . */ + + struct + { + __IOM uint32_t CC312_HASH_XOR_DATA : 32; /*!< [31..0] This register holds the value to be xor-ed with hash + * input data. */ + } CC312_HASH_XOR_DIN_REG_b; + }; + __IM uint32_t RESERVED19[2]; + + union + { + __IOM uint32_t CC312_LOAD_INIT_STATE_REG; /*!< (@ 0x00000694) Indication to HASH that the following data is + * to be loaded into initial value registers + * in HASH(H0:H15) or IV to AES MAC */ + + struct + { + __OM uint32_t CC312_LOAD : 1; /*!< [0..0] Load data to initial state registers. digest/iv for hash/aes_mac. + * When done loading data this bit should be reset */ + uint32_t : 31; + } CC312_LOAD_INIT_STATE_REG_b; + }; + __IM uint32_t RESERVED20[3]; + + union + { + __IOM uint32_t CC312_HASH_SEL_AES_MAC_REG; /*!< (@ 0x000006A4) select the AES MAC module rather than the hash + * module */ + + struct + { + __OM uint32_t CC312_HASH_SEL_AES_MAC : 1; /*!< [0..0] @1'b0 - select the hash module @1'b1 - select the AES + * mac module */ + __OM uint32_t CC312_GHASH_SEL : 1; /*!< [1..1] @1'b0 - select the hash module @1'b1 - select the ghash + * module */ + uint32_t : 30; + } CC312_HASH_SEL_AES_MAC_REG_b; + }; + __IM uint32_t RESERVED21[66]; + + union + { + __IOM uint32_t CC312_HASH_VERSION_REG; /*!< (@ 0x000007B0) HASH VERSION Register */ + + struct + { + __IM uint32_t CC312_FIXES : 8; /*!< [7..0] no field description provided */ + __IM uint32_t CC312_MINOR_VERSION_NUMBER : 4; /*!< [11..8] minor version number */ + __IM uint32_t CC312_MAJOR_VERSION_NUMBER : 4; /*!< [15..12] major version number */ + uint32_t : 16; + } CC312_HASH_VERSION_REG_b; + }; + __IM uint32_t RESERVED22[3]; + + union + { + __IOM uint32_t CC312_HASH_CONTROL_REG; /*!< (@ 0x000007C0) HASH_CONTROL Register. selects which HASH mode + * to run */ + + struct + { + __IOM uint32_t CC312_MODE_0_1 : 2; /*!< [1..0] bits 1:0 of the HASH mode field. The hash mode field + * possible values are: @4'b0000 - MD5 if present @4'b0001 + * - SHA-1 @4'b0010 - SHA-256 @4'b1010 - SHA-224 */ + uint32_t : 1; + __IOM uint32_t CC312_MODE_3 : 1; /*!< [3..3] bit 3 of the HASH mode field. The hash mode field possible + * values are:4'b0000 - MD5 if present 4'b0001 - SHA-1 4'b0010 + * - SHA-256 4'b1010 - SHA-224 */ + uint32_t : 28; + } CC312_HASH_CONTROL_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_PAD_EN_REG; /*!< (@ 0x000007C4) This register enables the hash hw padding . */ + + struct + { + __IOM uint32_t CC312_HASH_PAD_EN : 1; /*!< [0..0] 1 - Enable generation of padding by HW Pad block. 0 - + * Disable generation of padding by HW Pad block. */ + uint32_t : 31; + } CC312_HASH_PAD_EN_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_PAD_CFG_REG; /*!< (@ 0x000007C8) HASH_PAD_CFG Register. Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + uint32_t : 2; + __IOM uint32_t CC312_DO_PAD : 1; /*!< [2..2] Enable Padding generation. must be reset upon completion + * of padding. */ + uint32_t : 29; + } CC312_HASH_PAD_CFG_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_CUR_LEN_0_REG; /*!< (@ 0x000007CC) This register hold the length of current hash + * operation bit 31:0. */ + + struct + { + __IOM uint32_t CC312_HASH_CUR_LEN_0 : 32; /*!< [31..0] Represent the current length of valid bits where digest + * need to be computed In Bytes. */ + } CC312_HASH_CUR_LEN_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_CUR_LEN_1_REG; /*!< (@ 0x000007D0) This register hold the length of current hash + * operation bit 63:32. */ + + struct + { + __IOM uint32_t CC312_HASH_CUR_LEN_1 : 32; /*!< [31..0] Represent the current length of valid bits where digest + * need to be computed In Bytes. */ + } CC312_HASH_CUR_LEN_1_REG_b; + }; + __IM uint32_t RESERVED23[2]; + + union + { + __IOM uint32_t CC312_HASH_PARAM_REG; /*!< (@ 0x000007DC) HASH_PARAM Register. */ + + struct + { + __IM uint32_t CC312_CW : 4; /*!< [3..0] Indicates the number of concurrent words the hash is + * using to compute signature. 1 - One concurrent w(t). 2 + * - Two concurrent w(t). */ + __IM uint32_t CC312_CH : 4; /*!< [7..4] Indicate if Hi adders are present for each Hi value or + * 1 adder is shared for all Hi. 0 - One Hi value is updated + * at a time 1 - All Hi values are updated at the same time. */ + __IM uint32_t CC312_DW : 4; /*!< [11..8] Determine the granularity of word size. 0 - 32 bit word + * data. 1 - 64 bit word data. */ + __IM uint32_t CC312_SHA_512_EXISTS : 1; /*!< [12..12] Indicate if SHA-512 is present in the design. By default + * SHA-1 and SHA-256 are present. 0 - SHA-1 and SHA-256 are + * present only 1 - SHA-1 and all SHA-2 are present (SHA-256 + * SHA-512). */ + __IM uint32_t CC312_PAD_EXISTS : 1; /*!< [13..13] Indicate if pad block is present in the design. 0 - + * pad function is not supported by hardware. 1 - pad function + * is supported by hardware. */ + __IM uint32_t CC312_MD5_EXISTS : 1; /*!< [14..14] Indicate if MD5 is present in HW */ + __IM uint32_t CC312_HMAC_EXISTS : 1; /*!< [15..15] Indicate if HMAC logic is present in the design */ + __IM uint32_t CC312_SHA_256_EXISTS : 1; /*!< [16..16] Indicate if SHA-256 is present in the design */ + __IM uint32_t CC312_HASH_COMPARE_EXISTS : 1; /*!< [17..17] Indicate if COMPARE digest logic is present in the + * design */ + __IM uint32_t CC312_DUMP_HASH_TO_DOUT_EXISTS : 1; /*!< [18..18] Indicate if HASH to dout is present in the design */ + uint32_t : 13; + } CC312_HASH_PARAM_REG_b; + }; + __IM uint32_t RESERVED24; + + union + { + __IOM uint32_t CC312_HASH_AES_SW_RESET_REG; /*!< (@ 0x000007E4) HASH_AES_SW_RESET Register. */ + + struct + { + __OM uint32_t CC312_HASH_AES_SW_RESET : 1; /*!< [0..0] Hash receive reset internally. */ + uint32_t : 31; + } CC312_HASH_AES_SW_RESET_REG_b; + }; + + union + { + __IOM uint32_t CC312_HASH_ENDIANESS_REG; /*!< (@ 0x000007E8) This register hold the HASH_ENDIANESS configuration. */ + + struct + { + __IOM uint32_t CC312_ENDIAN : 1; /*!< [0..0] The default value is little-endian. The data and generation + * of padding can be swapped to be big-endian. */ + uint32_t : 31; + } CC312_HASH_ENDIANESS_REG_b; + }; + __IM uint32_t RESERVED25[9]; + + union + { + __IOM uint32_t CC312_AES_CLK_ENABLE_REG; /*!< (@ 0x00000810) The AES clock enable register. Note: This is + * a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_AES_CLK_EN : 1; /*!< [0..0] @1'b1 - the AES clock is enabled. @1'b0 - the AES clock + * is disabled. */ + uint32_t : 31; + } CC312_AES_CLK_ENABLE_REG_b; + }; + __IM uint32_t RESERVED26; + + union + { + __IOM uint32_t CC312_HASH_CLK_ENABLE_REG; /*!< (@ 0x00000818) The HASH clock enable register. Note: This is + * a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HASH_CLK_EN : 1; /*!< [0..0] @1'b1 - the HASH clock is enabled. @1'b0 - the HASH clock + * is disabled. */ + uint32_t : 31; + } CC312_HASH_CLK_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_PKA_CLK_ENABLE_REG; /*!< (@ 0x0000081C) The PKA clock enable register. Note: This is + * a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_PKA_CLK_EN : 1; /*!< [0..0] @1'b1 - the PKA clock is enabled. @1'b0 - the PKA clock + * is disabled. */ + uint32_t : 31; + } CC312_PKA_CLK_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_DMA_CLK_ENABLE_REG; /*!< (@ 0x00000820) DMA_CLK enable register. Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_DMA_CLK_EN : 1; /*!< [0..0] @1'b1 - the DMA clock is enabled. @1'b0 - the DMA clock + * is disabled. */ + uint32_t : 31; + } CC312_DMA_CLK_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_CLK_STATUS_REG; /*!< (@ 0x00000824) The CryptoCell clocks' status register. Note: + * This is a special register, affected by + * internal logic. Test result of this register + * is NA. */ + + struct + { + __IM uint32_t CC312_AES_CLK_STATUS : 1; /*!< [0..0] @1'b1 - the AES clock is enabled. @1'b0 - the AES clock + * is disabled. */ + uint32_t : 1; + __IM uint32_t CC312_HASH_CLK_STATUS : 1; /*!< [2..2] @1'b1 - the HASH clock is enabled. @1'b0 - the HASH clock + * is disabled. */ + __IM uint32_t CC312_PKA_CLK_STATUS : 1; /*!< [3..3] @1'b1 - the PKA clock is enabled. @1'b0 - the PKA clock + * is disabled. */ + uint32_t : 3; + __IM uint32_t CC312_CHACHA_CLK_STATUS : 1; /*!< [7..7] @1'b1 - the CHACHA clock is enabled. @1'b0 - the CHACHA + * clock is disabled. */ + __IM uint32_t CC312_DMA_CLK_STATUS : 1; /*!< [8..8] @1'b1 - the DMA clock is enabled. @1'b0 - the DMA clock + * is disabled. */ + uint32_t : 23; + } CC312_CLK_STATUS_REG_b; + }; + __IM uint32_t RESERVED27[12]; + + union + { + __IOM uint32_t CC312_CHACHA_CLK_ENABLE_REG; /*!< (@ 0x00000858) CHACHA /SALSA clock enable register. Note: This + * is a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __OM uint32_t CC312_CHACHA_CLK_EN : 1; /*!< [0..0] @1'b1 - the CHACHA / SALSA clock is enabled. @1'b0 - + * the CHACHA / SALSA clock is disabled. */ + uint32_t : 31; + } CC312_CHACHA_CLK_ENABLE_REG_b; + }; + __IM uint32_t RESERVED28[41]; + + union + { + __IOM uint32_t CC312_CRYPTO_CTL_REG; /*!< (@ 0x00000900) Defines the cryptographic flow. */ + + struct + { + __OM uint32_t CC312_MODE : 5; /*!< [4..0] Determines the active cryptographic engine: @5'b0000 + * - BYPASS @5'b0001 - AES @5'b0010 - AES_TO_HASH @5'b0011 + * - AES_AND_HASH @5'b0100 - DES @5'b0101 - DES_TO_HASH @5'b0110 + * - DES_AND_HASH @5'b0111 - HASH @5'b1001 - AES_MAC_AND_BYPASS + * @5'b1010 - AES_TO_HASH_AND_DOUT @5'b1011 - Reserved @5'b1000 + * - Reserved */ + uint32_t : 27; + } CC312_CRYPTO_CTL_REG_b; + }; + __IM uint32_t RESERVED29[3]; + + union + { + __IOM uint32_t CC312_CRYPTO_BUSY_REG; /*!< (@ 0x00000910) This register is set when the cryptographic core + * is busy. */ + + struct + { + __IM uint32_t CC312_CRYPTO_BUSY : 1; /*!< [0..0] @1'b0 - Ready @1'b1 - Busy Asserted when AES_BUSY or + * DES_BUSY or HASH_BUSY are asserted or when the DIN FIFO + * is not empty. */ + uint32_t : 31; + } CC312_CRYPTO_BUSY_REG_b; + }; + __IM uint32_t RESERVED30[2]; + + union + { + __IOM uint32_t CC312_HASH_BUSY_REG; /*!< (@ 0x0000091C) This register is set when the Hash engine is + * busy. */ + + struct + { + __IM uint32_t CC312_HASH_BUSY : 1; /*!< [0..0] @1'b0 - Ready @1'b1 - Busy Asserted when hash engine + * is busy. */ + uint32_t : 31; + } CC312_HASH_BUSY_REG_b; + }; + __IM uint32_t RESERVED31[4]; + + union + { + __IOM uint32_t CC312_CONTEXT_ID_REG; /*!< (@ 0x00000930) A general RD/WR register. For Firmware use. */ + + struct + { + __IOM uint32_t CC312_CONTEXT_ID : 8; /*!< [7..0] Context ID */ + uint32_t : 24; + } CC312_CONTEXT_ID_REG_b; + }; + __IM uint32_t RESERVED32[11]; + + union + { + __IOM uint32_t CC312_GHASH_SUBKEY_0_0_REG; /*!< (@ 0x00000960) Bits 31:0 of GHASH Key0 (used as the GHASH module + * key). */ + + struct + { + __OM uint32_t CC312_GHASH_SUBKEY_0_0 : 32; /*!< [31..0] Bits 31:0 of GHASH Key0. */ + } CC312_GHASH_SUBKEY_0_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_SUBKEY_0_1_REG; /*!< (@ 0x00000964) Bits 63:32 of GHASH Key0 (used as the GHASH module + * key). */ + + struct + { + __OM uint32_t CC312_GHASH_SUBKEY_0_1 : 32; /*!< [31..0] Bits 63:32 of GHASH Key0. */ + } CC312_GHASH_SUBKEY_0_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_SUBKEY_0_2_REG; /*!< (@ 0x00000968) Bits 95:64 of GHASH Key0 (used as the GHASH module + * key). */ + + struct + { + __OM uint32_t CC312_GHASH_SUBKEY_0_2 : 32; /*!< [31..0] Bits 95:64 of GHASH Key0. */ + } CC312_GHASH_SUBKEY_0_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_SUBKEY_0_3_REG; /*!< (@ 0x0000096C) Bits 127:96 of GHASH Key0 (used as the GHASH + * module key). */ + + struct + { + __OM uint32_t CC312_GHASH_SUBKEY_0_3 : 32; /*!< [31..0] Bits 127:96 of GHASH Key0. */ + } CC312_GHASH_SUBKEY_0_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_IV_0_0_REG; /*!< (@ 0x00000970) Bits 31:0 of GHASH_IV0 register. GHASH IV0 is + * used as the GHASH IV (Initialization Value) + * register. */ + + struct + { + __IOM uint32_t CC312_GHASH_IV_0_0 : 32; /*!< [31..0] Bits 31:0 of GHASH_IV0 register of the GHASH module. + * For the description of GHASH_IV0, see the GHASH_0_0 register + * description */ + } CC312_GHASH_IV_0_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_IV_0_1_REG; /*!< (@ 0x00000974) Bits 63:32 of GHASH_IV0 register. GHASH IV0 is + * used as the GHASH IV (Initialization Value) + * register. */ + + struct + { + __IOM uint32_t CC312_GHASH_IV_0_1 : 32; /*!< [31..0] Bits 63:32 of GHASH_IV0 register of the GHASH module. + * For the description of GHASH_IV0, see the GHASH_0_0 register + * description */ + } CC312_GHASH_IV_0_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_IV_0_2_REG; /*!< (@ 0x00000978) Bits 95:64 of GHASH_IV0 register. GHASH IV0 is + * used as the GHASH IV (Initialization Value) + * register. */ + + struct + { + __IOM uint32_t CC312_GHASH_IV_0_2 : 32; /*!< [31..0] Bits 95:64 of GHASH_IV0 register of the GHASH module. + * For the description of GHASH_IV0, see the GHASH_0_0 register + * description */ + } CC312_GHASH_IV_0_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_IV_0_3_REG; /*!< (@ 0x0000097C) Bits 127:96 of GHASH_IV0 register. GHASH IV0 + * is used as the GHASH IV (Initialization + * Value) register. */ + + struct + { + __IOM uint32_t CC312_GHASH_IV_0_3 : 32; /*!< [31..0] Bits 127:96 of GHASH_IV0 register of the GHASH module. + * For the description of GHASH_IV0, see the GHASH_0_0 register + * description */ + } CC312_GHASH_IV_0_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_BUSY_REG; /*!< (@ 0x00000980) The GHASH module GHASH_BUSY Register. This register + * is set when the GHASH core is active. */ + + struct + { + __IM uint32_t CC312_GHASH_BUSY : 1; /*!< [0..0] GHASH_BUSY Register. this register is set when the GHASH + * core is active */ + uint32_t : 31; + } CC312_GHASH_BUSY_REG_b; + }; + + union + { + __IOM uint32_t CC312_GHASH_INIT_REG; /*!< (@ 0x00000984) Writing to this address sets the GHASH engine + * to be ready to a new GHASH operation. */ + + struct + { + __OM uint32_t CC312_GHASH_INIT : 1; /*!< [0..0] Writing to this address sets the GHASH engine to be ready + * to a new GHASH operation. */ + uint32_t : 31; + } CC312_GHASH_INIT_REG_b; + }; + __IM uint32_t RESERVED33[30]; + + union + { + __IOM uint32_t CC312_HOST_RGF_IRR_REG; /*!< (@ 0x00000A00) The Interrupt Request register. Each bit of this + * register holds the interrupt status of a + * single interrupt source. */ + + struct + { + uint32_t : 4; + __IM uint32_t CC312_SRAM_TO_DIN_INT : 1; /*!< [4..4] The SRAM to DIN DMA done interrupt status. This interrupt + * is asserted when all data was delivered to DIN buffer from + * SRAM. */ + __IM uint32_t CC312_DOUT_TO_SRAM_INT : 1; /*!< [5..5] The DOUT to SRAM DMA done interrupt status. This interrupt + * is asserted when all data was delivered to SRAM buffer + * from DOUT. */ + __IM uint32_t CC312_MEM_TO_DIN_INT : 1; /*!< [6..6] The memory to DIN DMA done interrupt status. This interrupt + * is asserted when all data was delivered to DIN buffer from + * memory. */ + __IM uint32_t CC312_DOUT_TO_MEM_INT : 1; /*!< [7..7] The DOUT to memory DMA done interrupt status. This interrupt + * is asserted when all data was delivered to memory buffer + * from DOUT. */ + __IM uint32_t CC312_AHB_ERR_INT : 1; /*!< [8..8] The AXI error interrupt status. */ + __IM uint32_t CC312_PKA_EXP_INT : 1; /*!< [9..9] The PKA end of operation interrupt status. */ + __IM uint32_t CC312_RNG_INT : 1; /*!< [10..10] The RNG interrupt status. */ + __IM uint32_t CC312_SYM_DMA_COMPLETED : 1; /*!< [11..11] The GPR interrupt status. */ + uint32_t : 20; + } CC312_HOST_RGF_IRR_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_RGF_IMR_REG; /*!< (@ 0x00000A04) The Interrupt Mask register. Each bit of this + * register holds the mask of a single interrupt + * source. */ + + struct + { + uint32_t : 4; + __IOM uint32_t CC312_SRAM_TO_DIN_MASK : 1; /*!< [4..4] The SRAM to DIN DMA done interrupt mask. */ + __IOM uint32_t CC312_DOUT_TO_SRAM_MASK : 1; /*!< [5..5] The DOUT to SRAM DMA done interrupt mask. */ + __IOM uint32_t CC312_MEM_TO_DIN_MASK : 1; /*!< [6..6] The memory to DIN DMA done interrupt mask. */ + __IOM uint32_t CC312_DOUT_TO_MEM_MASK : 1; /*!< [7..7] The DOUT to memory DMA done interrupt mask. */ + __IOM uint32_t CC312_AXI_ERR_MASK : 1; /*!< [8..8] The AXI error interrupt mask. */ + __IOM uint32_t CC312_PKA_EXP_MASK : 1; /*!< [9..9] The PKA end of operation interrupt mask. */ + __IOM uint32_t CC312_RNG_INT_MASK : 1; /*!< [10..10] The RNG interrupt mask. */ + __IOM uint32_t CC312_SYM_DMA_COMPLETED_MASK : 1; /*!< [11..11] The GPR interrupt mask. */ + uint32_t : 20; + } CC312_HOST_RGF_IMR_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_RGF_ICR_REG; /*!< (@ 0x00000A08) Interrupt Clear Register. */ + + struct + { + uint32_t : 4; + __OM uint32_t CC312_SRAM_TO_DIN_CLEAR : 1; /*!< [4..4] The SRAM to DIN DMA done interrupt clear. */ + __OM uint32_t CC312_DOUT_TO_SRAM_CLEAR : 1; /*!< [5..5] The DOUT to SRAM DMA done interrupt clear. */ + __OM uint32_t CC312_MEM_TO_DIN_CLEAR : 1; /*!< [6..6] The memory to DIN DMA done interrupt clear. */ + __OM uint32_t CC312_DOUT_TO_MEM_CLEAR : 1; /*!< [7..7] The DOUT to memory DMA done interrupt clear. */ + __OM uint32_t CC312_AXI_ERR_CLEAR : 1; /*!< [8..8] The AXI error interrupt clear. */ + __OM uint32_t CC312_PKA_EXP_CLEAR : 1; /*!< [9..9] The PKA end of operation interrupt clear. */ + __OM uint32_t CC312_RNG_INT_CLEAR : 1; /*!< [10..10] The RNG interrupt clear. */ + __OM uint32_t CC312_SYM_DMA_COMPLETED_CLEAR : 1; /*!< [11..11] The GPR interrupt clear. */ + uint32_t : 20; + } CC312_HOST_RGF_ICR_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_RGF_ENDIAN_REG; /*!< (@ 0x00000A0C) This register defines the endianness of the Host-accessible + * registers. Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + uint32_t : 3; + __IOM uint32_t CC312_DOUT_WR_BG : 1; /*!< [3..3] DOUT write endianness: @1'b0 - little endian @1'b1 - + * big endian */ + uint32_t : 3; + __IOM uint32_t CC312_DIN_RD_BG : 1; /*!< [7..7] DIN write endianness: @1'b0 - little endian @1'b1 - big + * endian */ + uint32_t : 3; + __IOM uint32_t CC312_DOUT_WR_WBG : 1; /*!< [11..11] DOUT write word endianness: @1'b0 - little endian @1'b1 + * - big endian */ + uint32_t : 3; + __IOM uint32_t CC312_DIN_RD_WBG : 1; /*!< [15..15] DIN write word endianness: @1'b0 - little endian @1'b1 + * - big endian */ + uint32_t : 16; + } CC312_HOST_RGF_ENDIAN_REG_b; + }; + __IM uint32_t RESERVED34[5]; + + union + { + __IOM uint32_t CC312_HOST_RGF_SIGNATURE_REG; /*!< (@ 0x00000A24) This register holds the CryptoCell product signature. */ + + struct + { + __IM uint32_t CC312_HOST_SIGNATURE : 32; /*!< [31..0] Identification signature : always returns a fixed value, + * used by Host driver to verify CryptoCell presence at this + * address. */ + } CC312_HOST_RGF_SIGNATURE_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_BOOT_REG; /*!< (@ 0x00000A28) This register holds the values of CryptoCell's + * pre-synthesis flags */ + + struct + { + __IM uint32_t CC312_SYNTHESIS_CONFIG : 1; /*!< [0..0] POWER_GATING_EXISTS_LOCAL */ + __IM uint32_t CC312_LARGE_RKEK_LOCAL : 1; /*!< [1..1] LARGE_RKEK_LOCAL */ + __IM uint32_t CC312_HASH_IN_FUSES_LOCAL : 1; /*!< [2..2] HASH_IN_FUSES_LOCAL */ + __IM uint32_t CC312_EXT_MEM_SECURED_LOCAL : 1; /*!< [3..3] EXT_MEM_SECURED_LOCAL */ + uint32_t : 1; + __IM uint32_t CC312_RKEK_ECC_EXISTS_LOCAL_N : 1; /*!< [5..5] RKEK_ECC_EXISTS_LOCAL_N */ + __IM uint32_t CC312_SRAM_SIZE_LOCAL : 3; /*!< [8..6] SRAM_SIZE_LOCAL */ + __IM uint32_t CC312_DSCRPTR_EXISTS_LOCAL : 1; /*!< [9..9] DSCRPTR_EXISTS_LOCAL */ + __IM uint32_t CC312_PAU_EXISTS_LOCAL : 1; /*!< [10..10] PAU_EXISTS_LOCAL */ + __IM uint32_t CC312_RNG_EXISTS_LOCAL : 1; /*!< [11..11] RNG_EXISTS_LOCAL */ + __IM uint32_t CC312_PKA_EXISTS_LOCAL : 1; /*!< [12..12] PKA_EXISTS_LOCAL */ + __IM uint32_t CC312_RC4_EXISTS_LOCAL : 1; /*!< [13..13] RC4_EXISTS_LOCAL */ + __IM uint32_t CC312_SHA_512_PRSNT_LOCAL : 1; /*!< [14..14] SHA_512_PRSNT_LOCAL */ + __IM uint32_t CC312_SHA_256_PRSNT_LOCAL : 1; /*!< [15..15] SHA_256_PRSNT_LOCAL */ + __IM uint32_t CC312_MD5_PRSNT_LOCAL : 1; /*!< [16..16] MD5_PRSNT_LOCAL */ + __IM uint32_t CC312_HASH_EXISTS_LOCAL : 1; /*!< [17..17] HASH_EXISTS_LOCAL */ + __IM uint32_t CC312_C2_EXISTS_LOCAL : 1; /*!< [18..18] C2_EXISTS_LOCAL */ + __IM uint32_t CC312_DES_EXISTS_LOCAL : 1; /*!< [19..19] DES_EXISTS_LOCAL */ + __IM uint32_t CC312_AES_XCBC_MAC_EXISTS_LOCAL : 1; /*!< [20..20] AES_XCBC_MAC_EXISTS_LOCAL */ + __IM uint32_t CC312_AES_CMAC_EXISTS_LOCAL : 1; /*!< [21..21] AES_CMAC_EXISTS_LOCAL */ + __IM uint32_t CC312_AES_CCM_EXISTS_LOCAL : 1; /*!< [22..22] AES_CCM_EXISTS_LOCAL */ + __IM uint32_t CC312_AES_XEX_HW_T_CALC_LOCAL : 1; /*!< [23..23] AES_XEX_HW_T_CALC_LOCAL */ + __IM uint32_t CC312_AES_XEX_EXISTS_LOCAL : 1; /*!< [24..24] AES_XEX_EXISTS_LOCAL */ + __IM uint32_t CC312_CTR_EXISTS_LOCAL : 1; /*!< [25..25] CTR_EXISTS_LOCAL */ + __IM uint32_t CC312_AES_DIN_BYTE_RESOLUTION_LOCAL : 1; /*!< [26..26] AES_DIN_BYTE_RESOLUTION_LOCAL */ + __IM uint32_t CC312_TUNNELING_ENB_LOCAL : 1; /*!< [27..27] TUNNELING_ENB_LOCAL */ + __IM uint32_t CC312_SUPPORT_256_192_KEY_LOCAL : 1; /*!< [28..28] SUPPORT_256_192_KEY_LOCAL */ + __IM uint32_t CC312_ONLY_ENCRYPT_LOCAL : 1; /*!< [29..29] ONLY_ENCRYPT_LOCAL */ + __IM uint32_t CC312_AES_EXISTS_LOCAL : 1; /*!< [30..30] AES_EXISTS_LOCAL */ + uint32_t : 1; + } CC312_HOST_BOOT_REG_b; + }; + __IM uint32_t RESERVED35[3]; + + union + { + __IOM uint32_t CC312_HOST_CRYPTOKEY_SEL_REG; /*!< (@ 0x00000A38) AES hardware key select. Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_SEL_CRYPTO_KEY : 3; /*!< [2..0] Select the source of the HW key that is used by the AES + * engine: @3'h0 - RKEK @3'h1 -the Krtl. @3'h2 - the provision + * key KCP. @3'h3 - the code encryption key KCE. @3'h4 - the + * KPICV, The ICV provisioning key . @3'h5 - the code encryption + * key KCEICV NOTE: When "kprtl_lock" is set - kprtl will + * be masked (trying to load it will load zeros to the AES + * key register. When "kcertl_lock" is set - kcertl will be + * masked (trying to load it will load zeros to the AES key + * register. When scan_mode is asserted all the RTL */ + uint32_t : 29; + } CC312_HOST_CRYPTOKEY_SEL_REG_b; + }; + __IM uint32_t RESERVED36[15]; + + union + { + __IOM uint32_t CC312_HOST_CORE_CLK_GATING_ENABLE_REG; /*!< (@ 0x00000A78) This register enables the core clk gating by + * masking/enabling the cc_idle_state output + * signal. */ + + struct + { + __IOM uint32_t CC312_HOST_CORE_CLK_GATING_ENABLE : 1; /*!< [0..0] Enable the core clk gating, */ + uint32_t : 31; + } CC312_HOST_CORE_CLK_GATING_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_CC_IS_IDLE_REG; /*!< (@ 0x00000A7C) This register holds the idle indication of CC + * . Note: This is a special register, affected + * by internal logic. Test result of this register + * is NA. */ + + struct + { + __IM uint32_t CC312_HOST_CC_IS_IDLE : 1; /*!< [0..0] Read if CC is idle. */ + __IM uint32_t CC312_HOST_CC_IS_IDLE_EVENT : 1; /*!< [1..1] The event that indicates that CC is idle. */ + __IM uint32_t CC312_SYM_IS_BUSY : 1; /*!< [2..2] symetric flow is busy */ + __IM uint32_t CC312_AHB_IS_IDLE : 1; /*!< [3..3] ahb stste machine is idle */ + __IM uint32_t CC312_NVM_ARB_IS_IDLE : 1; /*!< [4..4] nvm arbiter is idle */ + __IM uint32_t CC312_NVM_IS_IDLE : 1; /*!< [5..5] nvm is idle */ + __IM uint32_t CC312_FATAL_WR : 1; /*!< [6..6] fatal write */ + __IM uint32_t CC312_RNG_IS_IDLE : 1; /*!< [7..7] rng is idle */ + __IM uint32_t CC312_PKA_IS_IDLE : 1; /*!< [8..8] pka is idle */ + __IM uint32_t CC312_CRYPTO_IS_IDLE : 1; /*!< [9..9] crypto flow is done */ + uint32_t : 22; + } CC312_HOST_CC_IS_IDLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_POWERDOWN_REG; /*!< (@ 0x00000A80) This register start the power-down sequence. + * Note: This is a special register, affected + * by internal logic. Test result of this register + * is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_POWERDOWN : 1; /*!< [0..0] Power down enable register. */ + uint32_t : 31; + } CC312_HOST_POWERDOWN_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_REMOVE_GHASH_ENGINE_REG; /*!< (@ 0x00000A84) These inputs are to be statically tied to 0 or + * 1 by the customers. When such an input is + * set, the matching engines inputs are tied + * to zero and its outputs are disconnected, + * so that the engine will be entirely removed + * by Synthesis */ + + struct + { + __IM uint32_t CC312_HOST_REMOVE_GHASH_ENGINE : 1; /*!< [0..0] Read the Remove_chacha_engine input */ + uint32_t : 31; + } CC312_HOST_REMOVE_GHASH_ENGINE_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_REMOVE_CHACHA_ENGINE_REG; /*!< (@ 0x00000A88) These inputs are to be statically tied to 0 or + * 1 by the customers. When such an input is + * set, the matching engines inputs are tied + * to zero and its outputs are disconnected, + * so that the engine will be entirely removed + * by Synthesis */ + + struct + { + __IM uint32_t CC312_HOST_REMOVE_CHACHA_ENGINE : 1; /*!< [0..0] Read the Remove_ghash_engine input */ + uint32_t : 31; + } CC312_HOST_REMOVE_CHACHA_ENGINE_REG_b; + }; + __IM uint32_t RESERVED37[29]; + + union + { + __IOM uint32_t CC312_AHBM_SINGLES_REG; /*!< (@ 0x00000B00) This register forces the ahb transactions to + * be always singles. */ + + struct + { + __IOM uint32_t CC312_AHB_SINGLES : 1; /*!< [0..0] Force ahb singles */ + uint32_t : 31; + } CC312_AHBM_SINGLES_REG_b; + }; + + union + { + __IOM uint32_t CC312_AHBM_HPROT_REG; /*!< (@ 0x00000B04) This register holds the ahb prot value */ + + struct + { + __IOM uint32_t CC312_AHB_PROT : 4; /*!< [3..0] The ahb prot value */ + uint32_t : 28; + } CC312_AHBM_HPROT_REG_b; + }; + + union + { + __IOM uint32_t CC312_AHBM_HMASTLOCK_REG; /*!< (@ 0x00000B08) This register holds ahb hmastlock value */ + + struct + { + __IOM uint32_t CC312_AHB_HMASTLOCK : 1; /*!< [0..0] The hmastlock value. */ + uint32_t : 31; + } CC312_AHBM_HMASTLOCK_REG_b; + }; + + union + { + __IOM uint32_t CC312_AHBM_HNONSEC_REG; /*!< (@ 0x00000B0C) This register holds ahb hnonsec value */ + + struct + { + __IOM uint32_t CC312_AHB_WRITE_HNONSEC : 1; /*!< [0..0] The hnonsec value for write transaction. */ + __IOM uint32_t CC312_AHB_READ_HNONSEC : 1; /*!< [1..1] The hnonsec value for read transaction. */ + uint32_t : 30; + } CC312_AHBM_HNONSEC_REG_b; + }; + __IM uint32_t RESERVED38[60]; + + union + { + __IOM uint32_t CC312_DIN_BUFFER_REG; /*!< (@ 0x00000C00) This address can be used by the CPU to write + * data directly to the DIN buffer to be sent + * to engines. */ + + struct + { + __OM uint32_t CC312_DIN_BUFFER_DATA : 32; /*!< [31..0] This register is mapped into 8 addresses in order to + * enable a CPU burst. */ + } CC312_DIN_BUFFER_REG_b; + }; + __IM uint32_t RESERVED39[7]; + + union + { + __IOM uint32_t CC312_DIN_MEM_DMA_BUSY_REG; /*!< (@ 0x00000C20) Indicates whether memory (AXI) source DMA (DIN) + * is busy. */ + + struct + { + __IM uint32_t CC312_DIN_MEM_DMA_BUSY : 1; /*!< [0..0] DIN memory DMA busy: @1'b1 - busy @1'b0 - not busy */ + uint32_t : 31; + } CC312_DIN_MEM_DMA_BUSY_REG_b; + }; + __IM uint32_t RESERVED40; + + union + { + __IOM uint32_t CC312_SRC_LLI_WORD0_REG; /*!< (@ 0x00000C28) This register is used in direct LLI mode - holds + * the location of the data source in the memory + * (AXI). */ + + struct + { + __OM uint32_t CC312_SRC_LLI_WORD0 : 32; /*!< [31..0] Source address within memory. */ + } CC312_SRC_LLI_WORD0_REG_b; + }; + + union + { + __IOM uint32_t CC312_SRC_LLI_WORD1_REG; /*!< (@ 0x00000C2C) This register is used in direct LLI mode - holds + * the number of bytes to be read from the + * memory (AXI). Writing to this register triggers + * the DMA. Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + __OM uint32_t CC312_SRC_LLI_BYTES_NUM : 30; /*!< [29..0] Total number of bytes to read using DMA in this entry */ + __OM uint32_t CC312_SRC_LLI_FIRST : 1; /*!< [30..30] 1'b1 - Indicates the first LLI entry */ + __OM uint32_t CC312_SRC_LLI_LAST : 1; /*!< [31..31] 1'b1 - Indicates the last LLI entry */ + } CC312_SRC_LLI_WORD1_REG_b; + }; + + union + { + __IOM uint32_t CC312_SRAM_SRC_ADDR_REG; /*!< (@ 0x00000C30) Location of data (start address) to be read from + * SRAM. Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + __IOM uint32_t CC312_SRAM_SRC_ADDR : 32; /*!< [31..0] SRAM source base address of data */ + } CC312_SRAM_SRC_ADDR_REG_b; + }; + + union + { + __IOM uint32_t CC312_DIN_SRAM_BYTES_LEN_REG; /*!< (@ 0x00000C34) This register holds the size of the data (in + * bytes) to be read from the SRAM. Note: This + * is a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_DIN_SRAM_BYTES_LEN : 32; /*!< [31..0] Size of data to read from SRAM (bytes). This is the + * trigger to the SRAM SRC DMA. */ + } CC312_DIN_SRAM_BYTES_LEN_REG_b; + }; + + union + { + __IOM uint32_t CC312_DIN_SRAM_DMA_BUSY_REG; /*!< (@ 0x00000C38) This register holds the status of the SRAM DMA + * DIN. */ + + struct + { + __IM uint32_t CC312_DIN_SRAM_BUSY : 1; /*!< [0..0] DIN SRAM DMA busy: @1'b1 - busy @1'b0 - not busy */ + uint32_t : 31; + } CC312_DIN_SRAM_DMA_BUSY_REG_b; + }; + + union + { + __IOM uint32_t CC312_DIN_SRAM_ENDIANNESS_REG; /*!< (@ 0x00000C3C) This register defines the endianness of the DIN + * interface to SRAM. */ + + struct + { + __IOM uint32_t CC312_SRAM_DIN_ENDIANNESS : 1; /*!< [0..0] Defines the endianness of DIN interface to SRAM: @1'b1 + * - big-endianness @1'b0 - little endianness */ + uint32_t : 31; + } CC312_DIN_SRAM_ENDIANNESS_REG_b; + }; + __IM uint32_t RESERVED41[2]; + + union + { + __IOM uint32_t CC312_DIN_CPU_DATA_SIZE_REG; /*!< (@ 0x00000C48) This register hold the number of bytes to be + * transmited using external DMA Note: This + * is a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __OM uint32_t CC312_CPU_DIN_SIZE : 16; /*!< [15..0] When using external DMA, the size of transmited data + * in bytes should be written to this register. */ + uint32_t : 16; + } CC312_DIN_CPU_DATA_SIZE_REG_b; + }; + __IM uint32_t RESERVED42; + + union + { + __IOM uint32_t CC312_FIFO_IN_EMPTY_REG; /*!< (@ 0x00000C50) DIN FIFO empty indication */ + + struct + { + __IM uint32_t CC312_EMPTY : 1; /*!< [0..0] 1'b1 - FIFO empty */ + uint32_t : 31; + } CC312_FIFO_IN_EMPTY_REG_b; + }; + __IM uint32_t RESERVED43; + + union + { + __IOM uint32_t CC312_DIN_FIFO_RST_PNTR_REG; /*!< (@ 0x00000C58) Writing to this register resets the DIN_FIFO + * pointers. */ + + struct + { + __OM uint32_t CC312_RST : 1; /*!< [0..0] Writing any value to this address resets the DIN_FIFO + * pointers. */ + uint32_t : 31; + } CC312_DIN_FIFO_RST_PNTR_REG_b; + }; + __IM uint32_t RESERVED44[41]; + + union + { + __IOM uint32_t CC312_DOUT_BUFFER_REG; /*!< (@ 0x00000D00) CC312_DOUT_BUFFER_REG */ + + struct + { + __IM uint32_t CC312_DOUT_BUFFER_DATA : 32; /*!< [31..0] CC312_DOUT_BUFFER_DATA */ + } CC312_DOUT_BUFFER_REG_b; + }; + __IM uint32_t RESERVED45[7]; + + union + { + __IOM uint32_t CC312_DOUT_MEM_DMA_BUSY_REG; /*!< (@ 0x00000D20) DOUT memory DMA busy - Indicates that memory + * (AXI) destination DMA (DOUT) is busy, */ + + struct + { + __IM uint32_t CC312_DOUT_MEM_DMA_BUSY : 1; /*!< [0..0] DOUT memory DMA busy: @1'b1 - busy @1'b0 - not busy */ + uint32_t : 31; + } CC312_DOUT_MEM_DMA_BUSY_REG_b; + }; + __IM uint32_t RESERVED46; + + union + { + __IOM uint32_t CC312_DST_LLI_WORD0_REG; /*!< (@ 0x00000D28) This register is used in direct LLI mode - holds + * the location of the data destination in + * the memory (AXI) */ + + struct + { + __OM uint32_t CC312_DST_LLI_WORD0 : 32; /*!< [31..0] Destination address within memory */ + } CC312_DST_LLI_WORD0_REG_b; + }; + + union + { + __IOM uint32_t CC312_DST_LLI_WORD1_REG; /*!< (@ 0x00000D2C) This register is used in direct LLI mode - holds + * the number of bytes to be written to the + * memory (AXI). Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + __IOM uint32_t CC312_DST_LLI_BYTES_NUM : 30; /*!< [29..0] Total byte number to be written by DMA in this entry */ + __IOM uint32_t CC312_DST_LLI_FIRST : 1; /*!< [30..30] 1'b1 - Indicates the first LLI entry */ + __IOM uint32_t CC312_DST_LLI_LAST : 1; /*!< [31..31] 1'b1 - Indicates the last LLI entry */ + } CC312_DST_LLI_WORD1_REG_b; + }; + + union + { + __IOM uint32_t CC312_SRAM_DEST_ADDR_REG; /*!< (@ 0x00000D30) Location of result to be sent to in SRAM Note: + * This is a special register, affected by + * internal logic. Test result of this register + * is NA. */ + + struct + { + __IOM uint32_t CC312_SRAM_DEST : 32; /*!< [31..0] SRAM destination base address for data. */ + } CC312_SRAM_DEST_ADDR_REG_b; + }; + + union + { + __IOM uint32_t CC312_DOUT_SRAM_BYTES_LEN_REG; /*!< (@ 0x00000D34) This register holds the size of the data (in + * bytes) to be written to the SRAM. Note: + * This is a special register, affected by + * internal logic. Test result of this register + * is NA. */ + + struct + { + __IOM uint32_t CC312_DOUT_SRAM_BYTES_LEN : 32; /*!< [31..0] Size of data to write to SRAM (bytes). This is the trigger + * to the SRAM DST DMA. */ + } CC312_DOUT_SRAM_BYTES_LEN_REG_b; + }; + + union + { + __IOM uint32_t CC312_DOUT_SRAM_DMA_BUSY_REG; /*!< (@ 0x00000D38) This register holds the status of the SRAM DMA + * DOUT. */ + + struct + { + __IM uint32_t CC312_DOUT_SRAM_BUSY : 1; /*!< [0..0] @1'b0 - all data was written to SRAM. @1'b1 - DOUT SRAM + * DMA busy. */ + uint32_t : 31; + } CC312_DOUT_SRAM_DMA_BUSY_REG_b; + }; + + union + { + __IOM uint32_t CC312_DOUT_SRAM_ENDIANNESS_REG; /*!< (@ 0x00000D3C) This register defines the endianness of the DOUT + * interface from SRAM. */ + + struct + { + __IOM uint32_t CC312_DOUT_SRAM_ENDIANNESS : 1; /*!< [0..0] Defines the endianness of DOUT interface from SRAM: @1'b1 + * - big-endianness @1'b0 - little endianness */ + uint32_t : 31; + } CC312_DOUT_SRAM_ENDIANNESS_REG_b; + }; + __IM uint32_t RESERVED47; + + union + { + __IOM uint32_t CC312_READ_ALIGN_LAST_REG; /*!< (@ 0x00000D44) Indication that the next read from the CPU is + * the last one. This is needed only when the + * data size is NOT modulo 4 (e.g. HASH padding). */ + + struct + { + __OM uint32_t CC312_READ_ALIGN_LAST : 1; /*!< [0..0] 1'b1 - Flush the read aligner content (used for reading + * the last data). */ + uint32_t : 31; + } CC312_READ_ALIGN_LAST_REG_b; + }; + __IM uint32_t RESERVED48[2]; + + union + { + __IOM uint32_t CC312_DOUT_FIFO_EMPTY_REG; /*!< (@ 0x00000D50) DOUT_FIFO_EMPTY Register. */ + + struct + { + __IM uint32_t CC312_DOUT_FIFO_EMPTY : 1; /*!< [0..0] @1'b0 - DOUT FIFO is not empty @1'b1 - DOUT FIFO is empty */ + uint32_t : 31; + } CC312_DOUT_FIFO_EMPTY_REG_b; + }; + __IM uint32_t RESERVED49[107]; + + union + { + __IOM uint32_t CC312_SRAM_DATA_REG; /*!< (@ 0x00000F00) READ WRITE DATA FROM SRAM Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_SRAM_DATA : 32; /*!< [31..0] 32 bit write or read from SRAM: read - triggers the + * SRAM read DMA address automatically incremented write - + * triggers the SRAM write DMA address automatically incremented */ + } CC312_SRAM_DATA_REG_b; + }; + + union + { + __IOM uint32_t CC312_SRAM_ADDR_REG; /*!< (@ 0x00000F04) first address given to SRAM DMA for read/write + * transactions from SRAM */ + + struct + { + __OM uint32_t CC312_SRAM_ADDR : 15; /*!< [14..0] SRAM starting address */ + uint32_t : 17; + } CC312_SRAM_ADDR_REG_b; + }; + + union + { + __IOM uint32_t CC312_SRAM_DATA_READY_REG; /*!< (@ 0x00000F08) The SRAM content is ready for read in SRAM_DATA. */ + + struct + { + __IM uint32_t CC312_SRAM_READY : 1; /*!< [0..0] SRAM content is ready for read in SRAM_DATA. */ + uint32_t : 31; + } CC312_SRAM_DATA_READY_REG_b; + }; + __IM uint32_t RESERVED50[49]; + + union + { + __IOM uint32_t CC312_PERIPHERAL_ID_4_REG; /*!< (@ 0x00000FD0) no register description provided */ + + struct + { + __IM uint32_t CC312_DES_2_JEP106 : 4; /*!< [3..0] Continuation Code. 0x4 for ARM products. */ + uint32_t : 28; + } CC312_PERIPHERAL_ID_4_REG_b; + }; + __IOM uint32_t CC312_PIDRESERVED0_REG; /*!< (@ 0x00000FD4) no register description provided */ + __IOM uint32_t CC312_PIDRESERVED1_REG; /*!< (@ 0x00000FD8) no register description provided */ + __IOM uint32_t CC312_PIDRESERVED2_REG; /*!< (@ 0x00000FDC) no register description provided */ + + union + { + __IOM uint32_t CC312_PERIPHERAL_ID_0_REG; /*!< (@ 0x00000FE0) no register description provided */ + + struct + { + __IM uint32_t CC312_PART_0 : 8; /*!< [7..0] Identification register part number, bits[7:0] */ + uint32_t : 24; + } CC312_PERIPHERAL_ID_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_PERIPHERAL_ID_1_REG; /*!< (@ 0x00000FE4) no register description provided */ + + struct + { + __IM uint32_t CC312_PART_1 : 4; /*!< [3..0] Identification register part number, bits[11:8] */ + __IM uint32_t CC312_DES_0_JEP106 : 4; /*!< [7..4] identification code, bits[3:0]. 0x3B for ARM products. */ + uint32_t : 24; + } CC312_PERIPHERAL_ID_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_PERIPHERAL_ID_2_REG; /*!< (@ 0x00000FE8) no register description provided */ + + struct + { + __IM uint32_t CC312_DES_1_JEP106 : 3; /*!< [2..0] identification code, bits[6:4]. 0x3B for ARM products. */ + __IM uint32_t CC312_JEDEC : 1; /*!< [3..3] constant 0x1. Indicates that a JEDEC assigned value is + * used. */ + __IM uint32_t CC312_REVISION : 4; /*!< [7..4] starts at zero and increments for every new IP release. */ + uint32_t : 24; + } CC312_PERIPHERAL_ID_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_PERIPHERAL_ID_3_REG; /*!< (@ 0x00000FEC) no register description provided */ + + struct + { + __IM uint32_t CC312_CMOD : 4; /*!< [3..0] Customer Modified, normally zero, but if a partner applies + * any changes themselves, they must change this value. */ + __IM uint32_t CC312_REVAND : 4; /*!< [7..4] starts at zero for every Revision, and increments if + * metal fixes are applied between 2 IP releases. */ + uint32_t : 24; + } CC312_PERIPHERAL_ID_3_REG_b; + }; + + union + { + __IOM uint32_t CC312_COMPONENT_ID_0_REG; /*!< (@ 0x00000FF0) no register description provided */ + + struct + { + __IM uint32_t CC312_PRMBL_0 : 8; /*!< [7..0] constant 0xD */ + uint32_t : 24; + } CC312_COMPONENT_ID_0_REG_b; + }; + + union + { + __IOM uint32_t CC312_COMPONENT_ID_1_REG; /*!< (@ 0x00000FF4) no register description provided */ + + struct + { + __IM uint32_t CC312_PRMBL_1 : 4; /*!< [3..0] constant 0x0 */ + __IM uint32_t CC312_CLASS : 4; /*!< [7..4] component type 0 0xF for Cryptocell */ + uint32_t : 24; + } CC312_COMPONENT_ID_1_REG_b; + }; + + union + { + __IOM uint32_t CC312_COMPONENT_ID_2_REG; /*!< (@ 0x00000FF8) no register description provided */ + + struct + { + __IM uint32_t CC312_PRMBL_2 : 8; /*!< [7..0] constant 0x5 */ + uint32_t : 24; + } CC312_COMPONENT_ID_2_REG_b; + }; + + union + { + __IOM uint32_t CC312_COMPONENT_ID_3_REG; /*!< (@ 0x00000FFC) no register description provided */ + + struct + { + __IM uint32_t CC312_PRMBL_3 : 8; /*!< [7..0] constant 0xB1 */ + uint32_t : 24; + } CC312_COMPONENT_ID_3_REG_b; + }; + __IM uint32_t RESERVED51[896]; + + union + { + __IOM uint32_t CC312_HOST_DCU_EN0_REG; /*!< (@ 0x00001E00) The DCU [31:0] enable register. Note: This is + * a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_DCU_EN0 : 32; /*!< [31..0] Debug Control Unit (DCU) Enable bits. */ + } CC312_HOST_DCU_EN0_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_DCU_EN1_REG; /*!< (@ 0x00001E04) The DCU [63:32] enable register. Note: This is + * a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_DCU_EN1 : 32; /*!< [31..0] Debug Control Unit (DCU) Enable bits. */ + } CC312_HOST_DCU_EN1_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_DCU_EN2_REG; /*!< (@ 0x00001E08) The DCU [95:64] enable register. Note: This is + * a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_DCU_EN2 : 32; /*!< [31..0] Debug Control Unit (DCU) Enable bits. */ + } CC312_HOST_DCU_EN2_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_DCU_EN3_REG; /*!< (@ 0x00001E0C) The DCU [1271:96] enable register. Note: This + * is a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_DCU_EN3 : 32; /*!< [31..0] Debug Control Unit (DCU) Enable bits. */ + } CC312_HOST_DCU_EN3_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_DCU_LOCK0_REG; /*!< (@ 0x00001E10) The DCU lock register.Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_DCU_LOCK0 : 32; /*!< [31..0] DCU_lock [31:0] register (a dedicated lock register + * per DCU bit). */ + } CC312_HOST_DCU_LOCK0_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_DCU_LOCK1_REG; /*!< (@ 0x00001E14) The DCU lock register.Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_DCU_LOCK1 : 32; /*!< [31..0] DCU_lock [63:32] register (a dedicated lock register + * per DCU bit). */ + } CC312_HOST_DCU_LOCK1_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_DCU_LOCK2_REG; /*!< (@ 0x00001E18) The DCU lock register.Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_DCU_LOCK2 : 32; /*!< [31..0] DCU_lock [95:64] register (a dedicated lock register + * per DCU bit). */ + } CC312_HOST_DCU_LOCK2_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_DCU_LOCK3_REG; /*!< (@ 0x00001E1C) The DCU lock register.Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_DCU_LOCK3 : 32; /*!< [31..0] DCU_lock [127:96] register (a dedicated lock register + * per DCU bit). */ + } CC312_HOST_DCU_LOCK3_REG_b; + }; + + union + { + __IOM uint32_t CC312_AO_ICV_DCU_RESTRICTION_MASK0_REG; /*!< (@ 0x00001E20) The DCU lock register. */ + + struct + { + __IM uint32_t CC312_AO_ICV_DCU_RESTRICTION_MASK0 : 32; /*!< [31..0] AO_ICV_DCU_RESTRICTION_MASK [31:0] parameter, that will + * be a customer modifiable. */ + } CC312_AO_ICV_DCU_RESTRICTION_MASK0_REG_b; + }; + + union + { + __IOM uint32_t CC312_AO_ICV_DCU_RESTRICTION_MASK1_REG; /*!< (@ 0x00001E24) The "ICV_DCU_restriction_mask" parameter is read + * by FW during the secure debug verification + * to prevent OEM from setting specific DCUs + * that protect ICV secrets */ + + struct + { + __IM uint32_t CC312_AO_ICV_DCU_RESTRICTION_MASK1 : 32; /*!< [31..0] AO_ICV_DCU_RESTRICTION_MASK [63:32] parameter, that + * will be a customer modifiable. */ + } CC312_AO_ICV_DCU_RESTRICTION_MASK1_REG_b; + }; + + union + { + __IOM uint32_t CC312_AO_ICV_DCU_RESTRICTION_MASK2_REG; /*!< (@ 0x00001E28) The "ICV_DCU_restriction_mask" parameter is read + * by FW during the secure debug verification + * to prevent OEM from setting specific DCUs + * that protect ICV secrets */ + + struct + { + __IM uint32_t CC312_AO_ICV_DCU_RESTRICTION_MASK2 : 32; /*!< [31..0] AO_ICV_DCU_RESTRICTION_MASK [95:64] parameter, that + * will be a customer modifiable. */ + } CC312_AO_ICV_DCU_RESTRICTION_MASK2_REG_b; + }; + + union + { + __IOM uint32_t CC312_AO_ICV_DCU_RESTRICTION_MASK3_REG; /*!< (@ 0x00001E2C) The "ICV_DCU_restriction_mask" parameter is read + * by FW during the secure debug verification + * to prevent OEM from setting specific DCUs + * that protect ICV secrets */ + + struct + { + __IM uint32_t CC312_AO_ICV_DCU_RESTRICTION_MASK3 : 32; /*!< [31..0] AO_ICV_DCU_RESTRICTION_MASK [127:96] parameter, that + * will be a customer modifiable. */ + } CC312_AO_ICV_DCU_RESTRICTION_MASK3_REG_b; + }; + + union + { + __IOM uint32_t CC312_AO_CC_SEC_DEBUG_RESET_REG; /*!< (@ 0x00001E30) The reset-upon-debug indication */ + + struct + { + __IM uint32_t CC312_AO_CC_SEC_DEBUG_RESET : 1; /*!< [0..0] For resets Cerberus, and prevents loading the HW keys + * after that reset */ + uint32_t : 31; + } CC312_AO_CC_SEC_DEBUG_RESET_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_AO_LOCK_BITS_REG; /*!< (@ 0x00001E34) These masks will define, per LCS, which DCU bits + * will be tied to zero, even if the Host tries + * to set them. Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + __IOM uint32_t CC312_HOST_FATAL_ERR : 1; /*!< [0..0] When the "FATAL_ERROR" register is asserted - HW keys + * will not be copied from OTP */ + __IOM uint32_t CC312_HOST_KPICV_LOCK : 1; /*!< [1..1] When this FW controlled register is set, the Kpicv HW + * key is masked (to zero). */ + __IOM uint32_t CC312_HOST_KCEICV_LOCK : 1; /*!< [2..2] When this FW controlled register is set, the Kceicv HW + * key is masked (to zero). */ + __IOM uint32_t CC312_HOST_KCP_LOCK : 1; /*!< [3..3] When this FW controlled register is set, the Kcp HW key + * is masked (to zero). */ + __IOM uint32_t CC312_HOST_KCE_LOCK : 1; /*!< [4..4] When this FW controlled register is set, the Kce HW key + * is masked (to zero). */ + __IOM uint32_t CC312_HOST_ICV_RMA_LOCK : 1; /*!< [5..5] The ICV_RMA_LOCK register is set-once (per POR). */ + __IOM uint32_t CC312_RESET_UPON_DEBUG_DISABLE : 1; /*!< [6..6] The RESET_UPON_DEBUG_DISABLE register is set-once (per + * POR). */ + __IOM uint32_t CC312_HOST_FORCE_DFA_ENABLE : 1; /*!< [7..7] When this FW controlled register is set, the AES DFA + * countermeasures are enabled/disabled (regardless of the + * AES_DFA_IS_ON register value). */ + __IOM uint32_t CC312_HOST_DFA_ENABLE_LOCK : 1; /*!< [8..8] When this FW control is set, the DFA_ENABLE register + * can't be written until the next POR. The DFA_ENABLE_LOCK + * register is set-once (per POR). */ + uint32_t : 23; + } CC312_HOST_AO_LOCK_BITS_REG_b; + }; + + union + { + __IOM uint32_t CC312_AO_APB_FILTERING_REG; /*!< (@ 0x00001E38) This register holds the AO_APB_FILTERING data. + * Note: This is a special register, affected + * by internal logic. Test result of this register + * is NA. */ + + struct + { + __IOM uint32_t CC312_ONLY_SEC_ACCESS_ALLOW : 1; /*!< [0..0] when this FW controlled register is set, the APB slave + * accepts only secure accesses */ + __IOM uint32_t CC312_ONLY_SEC_ACCESS_ALLOW_LOCK : 1; /*!< [1..1] when this FW controlled register is set, the ONLY_SEC_ACCESS_ALLOWED + * register can't be modified (until the next POR). */ + __IOM uint32_t CC312_ONLY_PRIV_ACCESS_ALLOW : 1; /*!< [2..2] when this FW controlled register is set, the APB slave + * accepts only privileged accesses */ + __IOM uint32_t CC312_ONLY_PRIV_ACCESS_ALLOW_LOCK : 1; /*!< [3..3] when this FW controlled register is set, the APBC_ONLY_PRIV_ACCESS_ALLO + * ED register can't be modified (until the next POR) */ + __IOM uint32_t CC312_APBC_ONLY_SEC_ACCESS_ALLOW : 1; /*!< [4..4] when this FW controlled register is set, the APB-C slave + * accepts only secure accesses */ + __IOM uint32_t CC312_APBC_ONLY_SEC_ACCESS_ALLOW_LOCK : 1; /*!< [5..5] when this FW controlled register is set, the APBC_ONLY_SEC_ACCESS_ALLOW + * D register can't be modified (until the next POR). */ + __IOM uint32_t CC312_APBC_ONLY_PRIV_ACCESS_ALLOW : 1; /*!< [6..6] when this FW controlled register is set, the APB-C slave + * accepts only privileged accesses */ + __IOM uint32_t CC312_APBC_ONLY_PRIV_ACCESS_ALLOW_LOCK : 1; /*!< [7..7] when this FW controlled register is set, the APBC_ONLY_PRIV_ACCESS_ALLO + * ED register can't be modified (until the next POR) */ + __IOM uint32_t CC312_APBC_ONLY_INST_ACCESS_ALLOW : 1; /*!< [8..8] when this FW controlled register is set, the APB-C slave + * accepts only instruction accesses */ + __IOM uint32_t CC312_APBC_ONLY_INST_ACCESS_ALLOW_LOCK : 1; /*!< [9..9] when this FW controlled register is set, the APBC_ONLY_INST_ACCESS_ALLO + * ED register can't be modified (until the next POR) */ + uint32_t : 22; + } CC312_AO_APB_FILTERING_REG_b; + }; + + union + { + __IOM uint32_t CC312_AO_CC_GPPC_REG; /*!< (@ 0x00001E3C) holds the AO_CC_GPPC value from AO Note: This + * is a special register, affected by internal + * logic. Test result of this register is NA. */ + + struct + { + __IM uint32_t CC312_AO_CC_GPPC : 8; /*!< [7..0] The AO_CC_GPPC value */ + uint32_t : 24; + } CC312_AO_CC_GPPC_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_RGF_CC_SW_RST_REG; /*!< (@ 0x00001E40) Writing to this register generates a general + * reset to CryptoCell. This reset takes about + * 4 core clock cycles. Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + __OM uint32_t CC312_HOST_RGF_CC_SW_RST : 1; /*!< [0..0] Writing '1' to this field generates a general reset to + * CryptoCell. */ + uint32_t : 31; + } CC312_HOST_RGF_CC_SW_RST_REG_b; + }; + __IM uint32_t RESERVED52[48]; + + union + { + __IOM uint32_t CC312_AIB_FUSE_PROG_COMPLETED_REG; /*!< (@ 0x00001F04) This register reflects the fuse_aib_prog_completed + * input, which indicates that the fuse programming + * was completed. Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + __IM uint32_t CC312_AIB_FUSE_PROG_COMPLETED : 1; /*!< [0..0] Indicates if the fuse programming operation has been + * completed. */ + uint32_t : 31; + } CC312_AIB_FUSE_PROG_COMPLETED_REG_b; + }; + + union + { + __IOM uint32_t CC312_NVM_DEBUG_STATUS_REG; /*!< (@ 0x00001F08) AIB debug status register. Note: This is a special + * register, affected by internal logic. Test + * result of this register is NA. */ + + struct + { + uint32_t : 1; + __IM uint32_t CC312_NVM_SM : 3; /*!< [3..1] Main nvm fsm 3'b000 - IDLE 3'b001 - READ_DUMMY 3'b010 + * - READ_MAN_FLAG 3'b011 - READ_OEM_FLAG 3'b100 - READ_GPPC + * 3'b101 - DECODE 3'b110 - OTP_LCS_VALID 3'b111 - LCS_IS_VALID */ + uint32_t : 28; + } CC312_NVM_DEBUG_STATUS_REG_b; + }; + + union + { + __IOM uint32_t CC312_LCS_IS_VALID_REG; /*!< (@ 0x00001F0C) Indicates that the LCS register holds a valid + * value. Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + __IM uint32_t CC312_LCS_IS_VALID : 1; /*!< [0..0] Indicates whether LCS is valid. */ + uint32_t : 31; + } CC312_LCS_IS_VALID_REG_b; + }; + + union + { + __IOM uint32_t CC312_NVM_IS_IDLE_REG; /*!< (@ 0x00001F10) Indicates that the LCS register holds a valid + * value. Note: This is a special register, + * affected by internal logic. Test result + * of this register is NA. */ + + struct + { + __IM uint32_t CC312_NVM_IS_IDLE_STATUS : 1; /*!< [0..0] Indicates whether the NVM manager finishes its operation, + * calculates the LCS, reads the HW keys, compares the number + * of zeros and clears the keys */ + uint32_t : 31; + } CC312_NVM_IS_IDLE_REG_b; + }; + + union + { + __IOM uint32_t CC312_LCS_REG_REG; /*!< (@ 0x00001F14) The lifecycle state register. Note: This is a + * special register, affected by internal logic. + * Test result of this register is NA. */ + + struct + { + __IM uint32_t CC312_LCS_REG : 3; /*!< [2..0] Indicates the LCS (Lifecycle State) value. 3'b000 - CM + * 3'b001 - DM 3'b101 - SE 3'b111 - RMA */ + uint32_t : 5; + __IM uint32_t CC312_ERROR_KDR_ZERO_CNT : 1; /*!< [8..8] Indication that the number of zeroes in the loaded KDR + * is not equal to the value set in the manufacture flag. */ + __IM uint32_t CC312_ERROR_PROV_ZERO_CNT : 1; /*!< [9..9] Indication that the number of zeroes in the loaded KCP + * is not equal to the value set in the OEM flag. */ + __IM uint32_t CC312_ERROR_KCE_ZERO_CNT : 1; /*!< [10..10] Indication that the number of zeroes in the loaded + * KCE is not equal to the value set in the OEM flag. */ + __IM uint32_t CC312_ERROR_KPICV_ZERO_CNT : 1; /*!< [11..11] Indication that the number of zeroes in the loaded + * KPICV is not equal to the value set in the manufacture + * flag. */ + __IM uint32_t CC312_ERROR_KCEICV_ZERO_CNT : 1; /*!< [12..12] Indication that the number of zeroes in the loaded + * KCEICV is not equal to the value set in the manufacture + * flag. */ + uint32_t : 19; + } CC312_LCS_REG_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_SHADOW_KDR_REG_REG; /*!< (@ 0x00001F18) This register interface is used to update the + * RKEK(KDR) registers when the device is in + * CM or DM mode , it is Write-once (per warm + * boot) in RMA LCS, The RKEK is updated by + * shifting . */ + + struct + { + __OM uint32_t CC312_HOST_SHADOW_KDR_REG : 1; /*!< [0..0] This field is used to update the KDR registers when the + * device is in CM , DM or RMA mode, The KDR is updated by + * shifting . */ + uint32_t : 31; + } CC312_HOST_SHADOW_KDR_REG_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_SHADOW_KCP_REG_REG; /*!< (@ 0x00001F1C) This register interface is used to update the + * KCP registers when the device is in CM or + * DM mode, The KCP is updated by shifting */ + + struct + { + __OM uint32_t CC312_HOST_SHADOW_KCP_REG : 1; /*!< [0..0] This field is used to update the KCP registers when the + * device is in CM or DM mode, The KCP is updated by shifting */ + uint32_t : 31; + } CC312_HOST_SHADOW_KCP_REG_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_SHADOW_KCE_REG_REG; /*!< (@ 0x00001F20) This register interface is used to update the + * KCE registers when the device is in CM or + * DM mode, The KCE is updated by shifting */ + + struct + { + __OM uint32_t CC312_HOST_SHADOW_KCE_REG : 1; /*!< [0..0] This field is used to update the KCE registers when the + * device is in CM or DM mode, The KCE is updated by shifting */ + uint32_t : 31; + } CC312_HOST_SHADOW_KCE_REG_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_SHADOW_KPICV_REG_REG; /*!< (@ 0x00001F24) This register interface is used to update the + * KPICV registers when the device is in CM + * or DM mode, The KPICV is updated by shifting */ + + struct + { + __OM uint32_t CC312_HOST_SHADOW_KPICV_REG : 1; /*!< [0..0] This field is used to update the KPICV registers when + * the device is in CM or DM mode, The KPICV is updated by + * shifting */ + uint32_t : 31; + } CC312_HOST_SHADOW_KPICV_REG_REG_b; + }; + + union + { + __IOM uint32_t CC312_HOST_SHADOW_KCEICV_REG_REG; /*!< (@ 0x00001F28) This register interface is used to update the + * KCEICV registers when the device is in CM + * or DM mode, The KCEICV is updated by shifting */ + + struct + { + __OM uint32_t CC312_HOST_SHADOW_KCEICV_REG : 1; /*!< [0..0] This field is used to update the KCEICV registers when + * the device is in CM or DM mode, The KCEICV is updated by + * shifting */ + uint32_t : 31; + } CC312_HOST_SHADOW_KCEICV_REG_REG_b; + }; + + union + { + __IOM uint32_t CC312_OTP_ADDR_WIDTH_DEF_REG; /*!< (@ 0x00001F2C) OTP_ADDR_WIDTH parameter, that will define the + * integrated OTP address width (address in + * words). The supported sizes are 6 (for 2 + * Kbits),7,8,9,11 (for 64 Kbits). The default + * value in the provided RTL will be 6. Note: + * This is a special register, affected by + * internal logic. Test result of this register + * is NA. */ + + struct + { + __IM uint32_t CC312_OTP_ADDR_WIDTH_DEF : 4; /*!< [3..0] Holds the OTP_ADDR_WIDTH_DEF value. */ + uint32_t : 28; + } CC312_OTP_ADDR_WIDTH_DEF_REG_b; + }; +} CC312_Type; /*!< Size = 7984 (0x1f30) */ + +/* =========================================================================================================================== */ +/* ================ CHIP_VERSION ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CHIP_VERSION registers (CHIP_VERSION) + */ + +typedef struct /*!< (@ 0x40070200) CHIP_VERSION Structure */ +{ + union + { + __IOM uint32_t CHIP_ID1_REG; /*!< (@ 0x00000000) Chip identification register 1. */ + + struct + { + __IM uint32_t CHIP_ID1 : 8; /*!< [7..0] First character of device type "3095" in ASCII. */ + uint32_t : 24; + } CHIP_ID1_REG_b; + }; + + union + { + __IOM uint32_t CHIP_ID2_REG; /*!< (@ 0x00000004) Chip identification register 2. */ + + struct + { + __IM uint32_t CHIP_ID2 : 8; /*!< [7..0] Second character of device type "3095" in ASCII. */ + uint32_t : 24; + } CHIP_ID2_REG_b; + }; + + union + { + __IOM uint32_t CHIP_ID3_REG; /*!< (@ 0x00000008) Chip identification register 3. */ + + struct + { + __IM uint32_t CHIP_ID3 : 8; /*!< [7..0] Third character of device type "3095"" in ASCII. */ + uint32_t : 24; + } CHIP_ID3_REG_b; + }; + + union + { + __IOM uint32_t CHIP_ID4_REG; /*!< (@ 0x0000000C) Chip identification register 4. */ + + struct + { + __IM uint32_t CHIP_ID4 : 8; /*!< [7..0] Fourth character of device type "3095" in ASCII. */ + uint32_t : 24; + } CHIP_ID4_REG_b; + }; + + union + { + __IOM uint32_t CHIP_SWC_REG; /*!< (@ 0x00000010) Software compatibility register. */ + + struct + { + __IM uint32_t CHIP_SWC : 4; /*!< [3..0] SoftWare Compatibility code.Integer (default = 0) which + * is incremented if a silicon change has impact on the CPU + * Firmware.Can be used by software developers to write silicon + * revision dependent code. */ + uint32_t : 28; + } CHIP_SWC_REG_b; + }; + + union + { + __IOM uint32_t CHIP_REVISION_REG; /*!< (@ 0x00000014) Chip revision register. */ + + struct + { + __IM uint32_t CHIP_REVISION : 8; /*!< [7..0] Chip version, corresponds with type number in ASCII.0x41 + * = 'A', 0x42 = 'B' */ + uint32_t : 24; + } CHIP_REVISION_REG_b; + }; + __IM uint32_t RESERVED[56]; + + union + { + __IOM uint32_t CHIP_TEST1_REG; /*!< (@ 0x000000F8) Chip test register 1. */ + + struct + { + __IM uint32_t CHIP_LAYOUT_REVISION : 8; /*!< [7..0] Chip layout revision, corresponds with type number in + * ASCII.0x41 = 'A', 0x43 = 'C', etc for the WLCSP package0x42 + * = 'B', 0x44 = 'D', etc for the VFBGA package */ + uint32_t : 24; + } CHIP_TEST1_REG_b; + }; + + union + { + __IOM uint32_t CHIP_TEST2_REG; /*!< (@ 0x000000FC) Chip test register 2. */ + + struct + { + __IM uint32_t CHIP_METAL_OPTION : 4; /*!< [3..0] Chip metal option value. */ + uint32_t : 28; + } CHIP_TEST2_REG_b; + }; +} CHIP_VERSION_Type; /*!< Size = 256 (0x100) */ + +/* =========================================================================================================================== */ +/* ================ CLKCAL_BIF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CLKCAL_BIF registers (CLKCAL_BIF) + */ + +typedef struct /*!< (@ 0x40090600) CLKCAL_BIF Structure */ +{ + union + { + __IOM uint32_t CLK_REF_SEL_REG; /*!< (@ 0x00000000) Select clock for oscillator calibration */ + + struct + { + __IOM uint32_t REF_CLK_SEL : 3; /*!< [2..0] Reference clock slection for calibration (N Counter)0: + * XTAL32K1: RCX32K2: SYS_HCLK3: AUD_CLK4: XTAL40M5: OSC_10MHz6-7: + * Reserved */ + __IOM uint32_t REF_CAL_START : 1; /*!< [3..3] Writing a '1' starts a calibration. This bit is cleared + * when calibration is finished, and CLK_REF_VAL is ready. */ + __IOM uint32_t EXT_CNT_EN_SEL : 1; /*!< [4..4] 0: Enable M Counter counter by N counter1: Enable M Counter + * by UART RX pin selected by PPA */ + __IOM uint32_t CAL_CLK_SEL : 3; /*!< [7..5] Select calibration clock input to be used in calibration: + * (M Counter)0: XTAL32K1: RCX32K2: SYS_HCLK3: AUD_CLK4: XTAL40M5: + * OSC_10M6-7: Reserved */ + uint32_t : 24; + } CLK_REF_SEL_REG_b; + }; + + union + { + __IOM uint32_t CLK_REF_CNT_REG; /*!< (@ 0x00000004) Count value for oscillator calibration */ + + struct + { + __IOM uint32_t REF_CNT_VAL : 16; /*!< [15..0] Indicates the calibration time, with a decrement counter + * to 1. */ + uint32_t : 16; + } CLK_REF_CNT_REG_b; + }; + + union + { + __IOM uint32_t CLK_REF_VAL_REG; /*!< (@ 0x00000008) DIVN reference cycles, lower 16 bits */ + + struct + { + __IM uint32_t XTAL_CNT_VAL : 32; /*!< [31..0] Returns the number of DIVN clock cycles counted during + * the calibration time, defined with REF_CNT_VAL */ + } CLK_REF_VAL_REG_b; + }; + + union + { + __IOM uint32_t CLK_CAL_IRQ_REG; /*!< (@ 0x0000000C) Select clock for oscillator calibration */ + + struct + { + __IOM uint32_t CLK_CAL_IRQ_EN : 1; /*!< [0..0] Enable clk calibration IRQ.0: Disabled.1*: Enabled.*Note: + * If IRQ feature is enabled, every calibration should be + * started by setting CLK_REF_SEL_REG[REF_CAL_START] to 1. */ + __IM uint32_t CLK_CAL_IRQ_STATUS : 1; /*!< [1..1] Shows the IRQ bit status. */ + __IOM uint32_t CLK_CAL_IRQ_CLR : 1; /*!< [2..2] Clear the IRQ.1: Clear the IRQ0: No effect.Read out 0 + * always. */ + uint32_t : 29; + } CLK_CAL_IRQ_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_0_REG; /*!< (@ 0x00000010) ADC_DIG_O_CALED_WEIGHT_I_0_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_0 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_0 */ + } ADC_DIG_O_CALED_WEIGHT_I_0_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_1_REG; /*!< (@ 0x00000014) ADC_DIG_O_CALED_WEIGHT_I_1_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_1 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_1 */ + } ADC_DIG_O_CALED_WEIGHT_I_1_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_2_REG; /*!< (@ 0x00000018) ADC_DIG_O_CALED_WEIGHT_I_2_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_2 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_2 */ + } ADC_DIG_O_CALED_WEIGHT_I_2_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_3_REG; /*!< (@ 0x0000001C) ADC_DIG_O_CALED_WEIGHT_I_3_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_3 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_3 */ + } ADC_DIG_O_CALED_WEIGHT_I_3_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_4_REG; /*!< (@ 0x00000020) ADC_DIG_O_CALED_WEIGHT_I_4_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_4 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_4 */ + } ADC_DIG_O_CALED_WEIGHT_I_4_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_5_REG; /*!< (@ 0x00000024) ADC_DIG_O_CALED_WEIGHT_I_5_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_5 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_5 */ + } ADC_DIG_O_CALED_WEIGHT_I_5_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_6_REG; /*!< (@ 0x00000028) ADC_DIG_O_CALED_WEIGHT_I_6_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_6 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_6 */ + } ADC_DIG_O_CALED_WEIGHT_I_6_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_7_REG; /*!< (@ 0x0000002C) ADC_DIG_O_CALED_WEIGHT_I_7_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_7 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_7 */ + } ADC_DIG_O_CALED_WEIGHT_I_7_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_8_REG; /*!< (@ 0x00000030) ADC_DIG_O_CALED_WEIGHT_I_8_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_8 : 32; /*!< [31..0] adc_dig_o_caled_weight_i_8 */ + } ADC_DIG_O_CALED_WEIGHT_I_8_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_I_9_REG; /*!< (@ 0x00000034) ADC_DIG_O_CALED_WEIGHT_I_9_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_i_9 : 27; /*!< [26..0] adc_dig_o_caled_weight_i_9 */ + uint32_t : 5; + } ADC_DIG_O_CALED_WEIGHT_I_9_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_0_REG; /*!< (@ 0x00000038) ADC_DIG_O_CALED_WEIGHT_Q_0_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_0 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_0 */ + } ADC_DIG_O_CALED_WEIGHT_Q_0_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_1_REG; /*!< (@ 0x0000003C) ADC_DIG_O_CALED_WEIGHT_Q_1_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_1 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_1 */ + } ADC_DIG_O_CALED_WEIGHT_Q_1_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_2_REG; /*!< (@ 0x00000040) ADC_DIG_O_CALED_WEIGHT_Q_2_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_2 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_2 */ + } ADC_DIG_O_CALED_WEIGHT_Q_2_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_3_REG; /*!< (@ 0x00000044) ADC_DIG_O_CALED_WEIGHT_Q_3_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_3 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_3 */ + } ADC_DIG_O_CALED_WEIGHT_Q_3_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_4_REG; /*!< (@ 0x00000048) ADC_DIG_O_CALED_WEIGHT_Q_4_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_4 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_4 */ + } ADC_DIG_O_CALED_WEIGHT_Q_4_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_5_REG; /*!< (@ 0x0000004C) ADC_DIG_O_CALED_WEIGHT_Q_5_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_5 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_5 */ + } ADC_DIG_O_CALED_WEIGHT_Q_5_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_6_REG; /*!< (@ 0x00000050) ADC_DIG_O_CALED_WEIGHT_Q_6_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_6 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_6 */ + } ADC_DIG_O_CALED_WEIGHT_Q_6_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_7_REG; /*!< (@ 0x00000054) ADC_DIG_O_CALED_WEIGHT_Q_7_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_7 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_7 */ + } ADC_DIG_O_CALED_WEIGHT_Q_7_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_8_REG; /*!< (@ 0x00000058) ADC_DIG_O_CALED_WEIGHT_Q_8_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_8 : 32; /*!< [31..0] adc_dig_o_caled_weight_q_8 */ + } ADC_DIG_O_CALED_WEIGHT_Q_8_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_O_CALED_WEIGHT_Q_9_REG; /*!< (@ 0x0000005C) ADC_DIG_O_CALED_WEIGHT_Q_9_REG */ + + struct + { + __IM uint32_t adc_dig_o_caled_weight_q_9 : 27; /*!< [26..0] adc_dig_o_caled_weight_q_9 */ + uint32_t : 5; + } ADC_DIG_O_CALED_WEIGHT_Q_9_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_0_REG; /*!< (@ 0x00000060) ADC_DIG_CAL_WEIGHT_I_0_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_0 : 32; /*!< [31..0] adc_dig_cal_weight_i_0 */ + } ADC_DIG_CAL_WEIGHT_I_0_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_1_REG; /*!< (@ 0x00000064) ADC_DIG_CAL_WEIGHT_I_1_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_1 : 32; /*!< [31..0] adc_dig_cal_weight_i_1 */ + } ADC_DIG_CAL_WEIGHT_I_1_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_2_REG; /*!< (@ 0x00000068) ADC_DIG_CAL_WEIGHT_I_2_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_2 : 32; /*!< [31..0] adc_dig_cal_weight_i_2 */ + } ADC_DIG_CAL_WEIGHT_I_2_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_3_REG; /*!< (@ 0x0000006C) ADC_DIG_CAL_WEIGHT_I_3_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_3 : 32; /*!< [31..0] adc_dig_cal_weight_i_3 */ + } ADC_DIG_CAL_WEIGHT_I_3_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_4_REG; /*!< (@ 0x00000070) ADC_DIG_CAL_WEIGHT_I_4_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_4 : 32; /*!< [31..0] adc_dig_cal_weight_i_4 */ + } ADC_DIG_CAL_WEIGHT_I_4_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_5_REG; /*!< (@ 0x00000074) ADC_DIG_CAL_WEIGHT_I_5_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_5 : 32; /*!< [31..0] adc_dig_cal_weight_i_5 */ + } ADC_DIG_CAL_WEIGHT_I_5_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_6_REG; /*!< (@ 0x00000078) ADC_DIG_CAL_WEIGHT_I_6_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_6 : 32; /*!< [31..0] adc_dig_cal_weight_i_6 */ + } ADC_DIG_CAL_WEIGHT_I_6_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_7_REG; /*!< (@ 0x0000007C) ADC_DIG_CAL_WEIGHT_I_7_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_7 : 32; /*!< [31..0] adc_dig_cal_weight_i_7 */ + } ADC_DIG_CAL_WEIGHT_I_7_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_8_REG; /*!< (@ 0x00000080) ADC_DIG_CAL_WEIGHT_I_8_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_8 : 32; /*!< [31..0] adc_dig_cal_weight_i_8 */ + } ADC_DIG_CAL_WEIGHT_I_8_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_I_9_REG; /*!< (@ 0x00000084) ADC_DIG_CAL_WEIGHT_I_9_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_i_9 : 27; /*!< [26..0] adc_dig_cal_weight_i_9 */ + uint32_t : 5; + } ADC_DIG_CAL_WEIGHT_I_9_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_0_REG; /*!< (@ 0x00000088) ADC_DIG_CAL_WEIGHT_Q_0_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_0 : 32; /*!< [31..0] adc_dig_cal_weight_q_0 */ + } ADC_DIG_CAL_WEIGHT_Q_0_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_1_REG; /*!< (@ 0x0000008C) ADC_DIG_CAL_WEIGHT_Q_1_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_1 : 32; /*!< [31..0] adc_dig_cal_weight_q_1 */ + } ADC_DIG_CAL_WEIGHT_Q_1_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_2_REG; /*!< (@ 0x00000090) ADC_DIG_CAL_WEIGHT_Q_2_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_2 : 32; /*!< [31..0] adc_dig_cal_weight_q_2 */ + } ADC_DIG_CAL_WEIGHT_Q_2_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_3_REG; /*!< (@ 0x00000094) ADC_DIG_CAL_WEIGHT_Q_3_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_3 : 32; /*!< [31..0] adc_dig_cal_weight_q_3 */ + } ADC_DIG_CAL_WEIGHT_Q_3_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_4_REG; /*!< (@ 0x00000098) ADC_DIG_CAL_WEIGHT_Q_4_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_4 : 32; /*!< [31..0] adc_dig_cal_weight_q_4 */ + } ADC_DIG_CAL_WEIGHT_Q_4_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_5_REG; /*!< (@ 0x0000009C) ADC_DIG_CAL_WEIGHT_Q_5_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_5 : 32; /*!< [31..0] adc_dig_cal_weight_q_5 */ + } ADC_DIG_CAL_WEIGHT_Q_5_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_6_REG; /*!< (@ 0x000000A0) ADC_DIG_CAL_WEIGHT_Q_6_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_6 : 32; /*!< [31..0] adc_dig_cal_weight_q_6 */ + } ADC_DIG_CAL_WEIGHT_Q_6_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_7_REG; /*!< (@ 0x000000A4) ADC_DIG_CAL_WEIGHT_Q_7_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_7 : 32; /*!< [31..0] adc_dig_cal_weight_q_7 */ + } ADC_DIG_CAL_WEIGHT_Q_7_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_8_REG; /*!< (@ 0x000000A8) ADC_DIG_CAL_WEIGHT_Q_8_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_8 : 32; /*!< [31..0] adc_dig_cal_weight_q_8 */ + } ADC_DIG_CAL_WEIGHT_Q_8_REG_b; + }; + + union + { + __IOM uint32_t ADC_DIG_CAL_WEIGHT_Q_9_REG; /*!< (@ 0x000000AC) ADC_DIG_CAL_WEIGHT_Q_9_REG */ + + struct + { + __IOM uint32_t adc_dig_cal_weight_q_9 : 27; /*!< [26..0] adc_dig_cal_weight_q_9 */ + uint32_t : 5; + } ADC_DIG_CAL_WEIGHT_Q_9_REG_b; + }; +} CLKCAL_BIF_Type; /*!< Size = 176 (0xb0) */ + +/* =========================================================================================================================== */ +/* ================ CRG_APU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CRG_APU registers (CRG_APU) + */ + +typedef struct /*!< (@ 0x400E0000) CRG_APU Structure */ +{ + union + { + __IOM uint32_t APU_AUD_CLK_REG; /*!< (@ 0x00000000) AUD_CLK_DIV clock control */ + + struct + { + __IOM uint32_t AUD_CLK_DIV : 4; /*!< [3..0] AUD_CLK_DIV clock divider0x0: divided by 160x1: divided + * by 10x2: divided by 20x3: divided by 30x4: divided by 40x5: + * divided by 50x6: divided by 60x7: divided by 70x8: divided + * by 80x9: divided by 90xA: divided by 100xB: divided by + * 110xC: divided by 120xD: divided by 130xE: divided by 140xF: + * divided by 15 */ + __IOM uint32_t AUD_CLK_EN : 1; /*!< [4..4] AUD_CLK_DIV clock enable */ + uint32_t : 3; + __IOM uint32_t AUD_PCLK_DIV : 4; /*!< [11..8] APB-32A clock divider0x0: divided by 160x1: divided + * by 10x2: divided by 20x3: divided by 30x4: divided by 40x5: + * divided by 50x6: divided by 60x7: divided by 70x8: divided + * by 80x9: divided by 90xA: divided by 100xB: divided by + * 110xC: divided by 120xD: divided by 130xE: divided by 140xF: + * divided by 15 */ + uint32_t : 20; + } APU_AUD_CLK_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_CLK_REG; /*!< (@ 0x00000004) SRC_DIV clock control */ + + struct + { + __IOM uint32_t SRC_CLK_DIV : 4; /*!< [3..0] SRC_DIV clock divider0x0: divided by 160x1: divided by + * 10x2: divided by 20x3: divided by 30x4: divided by 40x5: + * divided by 50x6: divided by 60x7: divided by 70x8: divided + * by 80x9: divided by 90xA divided by 100xB: divided by 110xC: + * divided by 120xD: divided by 130xE: divided by 140xF: divided + * by 15 */ + __IOM uint32_t SRC_DMIC_CLK_EN : 1; /*!< [4..4] SRC DMIC clock enable0: Disabled1: Enabled */ + uint32_t : 2; + __IOM uint32_t SRC_CLK_EN : 1; /*!< [7..7] SRC clock enable0: Disabled1: Enabled */ + uint32_t : 24; + } APU_SRC_CLK_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t AUD_CLK_GATE_REG; /*!< (@ 0x0000000C) AUD_CLK_GATE control */ + + struct + { + uint32_t : 2; + __IOM uint32_t AUD_CLK_GATE_SEL : 1; /*!< [2..2] AUD_CLK_GATE enable selection0: Manual mode using AUD_CLK_GATE_EN1: + * APU START pulse triggered */ + __IM uint32_t AUD_CLK_GATE_STAT : 1; /*!< [3..3] AUD_CLK_GATE status0: AUD_CLK_GATE disabled1: AUD_CLK_GATE + * enabled */ + __IOM uint32_t AUD_CLK_GATE_OVR : 1; /*!< [4..4] AUD_CLK_GATE override0: Not override1: Override to 1 */ + __IOM uint32_t APU_RST : 1; /*!< [5..5] Centralized APU reset0: reset release1: reset active */ + uint32_t : 26; + } AUD_CLK_GATE_REG_b; + }; + + union + { + __IOM uint32_t APU_MCLK_CTRL_REG; /*!< (@ 0x00000010) MCLK DIV control */ + + struct + { + __IOM uint32_t MCLK_DIV : 7; /*!< [6..0] MCLK divider0: Divide by 1281: Divide by 1..127: Divide + * by 127 */ + __IOM uint32_t MCLK_EN : 1; /*!< [7..7] MCLK enable0: MCLK Disabled1: MCLK Enabled */ + __IOM uint32_t MCLK_SEL : 1; /*!< [8..8] MCLK source selection0: FPLL_CLK selected1: XTAL40M selected */ + __IOM uint32_t MCLK_INV : 1; /*!< [9..9] MCLK DIV output Inversion0: Not inversion1: Inversion */ + uint32_t : 22; + } APU_MCLK_CTRL_REG_b; + }; + + union + { + __IOM uint32_t APU_START_CTRL_REG; /*!< (@ 0x00000014) APU_START control */ + + struct + { + uint32_t : 8; + __IOM uint32_t APU_START : 1; /*!< [8..8] APU_START control0: Disable APU_START1: Enable APU_START */ + uint32_t : 23; + } APU_START_CTRL_REG_b; + }; +} CRG_APU_Type; /*!< Size = 24 (0x18) */ + +/* =========================================================================================================================== */ +/* ================ CRG_COM ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CRG_COM registers (CRG_COM) + */ + +typedef struct /*!< (@ 0x400C0200) CRG_COM Structure */ +{ + union + { + __IOM uint32_t PLL1_ARM_CTRL_REG; /*!< (@ 0x00000000) PLL Control register */ + + struct + { + __IOM uint32_t DPLL1_DIV_SEL : 6; /*!< [5..0] Loop divider settings?b'001111: divide 15b'010000: divide + * 16b'010001: divide 17b'010010: divide 18b'010011: divide + * 19b'010100: divide 20b'010101: divide 21b'010110: divide + * 22b'010111: divide 23b'011000: divide 24b'011001: divide + * 25b'011010: divide 26b'011011: divide 27b'011100: divide + * 28b'011101: divide 29b'011110: divide 30 */ + __IOM uint32_t DPLL1_VCO_SEL : 2; /*!< [7..6] Post divider settings?b'00: 1b'01: 1/2b'10: 1/4b'11: + * 1/8 */ + __IOM uint32_t DPLL1_EN : 1; /*!< [8..8] DPLL1 enable control0:disable1:enable, Active high */ + __IOM uint32_t DPLL1_SHORT_S : 2; /*!< [10..9] Lock detector cycle numberb'00: 1024b'01: 512b'10: 256b'11: + * 128 */ + __IOM uint32_t DPLL1_LF_RCTRL : 2; /*!< [12..11] DPLL1 Loop filter controlb'00: LF resistor max (minimum + * Loop BW)b11: LF resistor min (maximum Loop BW) */ + __IM uint32_t PLL_LOCK : 1; /*!< [13..13] PLL Lock Status */ + uint32_t : 18; + } PLL1_ARM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t XTAL40M_CTRL_REG; /*!< (@ 0x00000004) XTAL40M Control register */ + + struct + { + __IOM uint32_t XTAL40M_EN : 1; /*!< [0..0] 0: disable1: enable */ + __IOM uint32_t XTAL40M_RFEN : 1; /*!< [1..1] 0: disable1: enable */ + __IOM uint32_t XTAL40M_DPLL_EN : 1; /*!< [2..2] 0: disable1: enable */ + __IOM uint32_t XTAL40M_RFPLL_EN : 1; /*!< [3..3] 0: disable1: enable */ + __IOM uint32_t XTAL40M_FPLL_EN : 1; /*!< [4..4] 0: disable1: enable */ + __IOM uint32_t XTAL40M_TX_EN : 1; /*!< [5..5] 0: disable1: enable */ + __IOM uint32_t XTAL40M_ADCCLK_EN : 1; /*!< [6..6] 0: disable1: enable */ + uint32_t : 1; + __IOM uint32_t XTAL40_GAIN : 3; /*!< [10..8] XTAL core gain cotrol,After power on, need set 7 to + * 30: min7: max, (default code = 7) */ + uint32_t : 5; + __IOM uint32_t XTAL40M_CCTRL : 7; /*!< [22..16] 7bit ppm control, default 0 */ + __IM uint32_t XTAL40M_RDY : 1; /*!< [23..23] XTAL40M ready OK0: not OK1: Locked */ + uint32_t : 8; + } XTAL40M_CTRL_REG_b; + }; + + union + { + __IOM uint32_t MEMORY_CTRL_REG; /*!< (@ 0x00000008) LS/RME/RM register */ + + struct + { + __IOM uint32_t CPU_SRAM : 4; /*!< [3..0] main CPU SRAM,bit[3]; LS light sleepbit[2]: RME RM enablebit[1:0]: + * RM default 2'b11 (fastest) RM is toal 4bit but RM[3:2] + * is for test so set to '0' */ + __IOM uint32_t RET_MEM : 4; /*!< [7..4] Retention memory,refer to bit[3:0] description */ + __IOM uint32_t ROM : 4; /*!< [11..8] ROM,refer to bit[3:0] description */ + uint32_t : 4; + __IOM uint32_t PHY_MEM : 4; /*!< [19..16] PHY memory,refer to bit[3:0] description */ + __IOM uint32_t MAC_MEM : 4; /*!< [23..20] MAC memory,refer to bit[3:0] description */ + __IOM uint32_t SYS_CLK_MODE : 1; /*!< [24..24] sys_clk operating mode0: manual mode1: auto mode */ + uint32_t : 3; + __IOM uint32_t OTHER_MEM : 4; /*!< [31..28] Other memory,refer to bit[3:0] description */ + } MEMORY_CTRL_REG_b; + }; + + union + { + __IOM uint32_t EXT_INTB_CTRL_REG; /*!< (@ 0x0000000C) External interrupt control register */ + + struct + { + __IOM uint32_t INTR_POL : 1; /*!< [0..0] interrupt polarity0: low active1: high active */ + __IOM uint32_t INTR_MODE : 1; /*!< [1..1] interrupt mode0: Level mode1: Edge mode */ + __IOM uint32_t PULSE_DURATION : 6; /*!< [7..2] counter unit is clock HCLK_FR: pulse duration, increase + * 1 after reaching base_counter to 0xFF with clock HCLK_FR + * 0 is not permitted */ + uint32_t : 24; + } EXT_INTB_CTRL_REG_b; + }; + + union + { + __IOM uint32_t EXT_INTB_SET_REG; /*!< (@ 0x00000010) External interrupt set register */ + + struct + { + __IOM uint32_t INTR_SET : 1; /*!< [0..0] interrupt set */ + uint32_t : 31; + } EXT_INTB_SET_REG_b; + }; + + union + { + __IOM uint32_t NORMAL_TEST_CTRL_REG; /*!< (@ 0x00000014) Normal Test Control register */ + + struct + { + __IOM uint32_t PLL1 : 1; /*!< [0..0] PLL1 test mode */ + __IOM uint32_t FLASH : 1; /*!< [1..1] Flash test mode */ + uint32_t : 1; + __IOM uint32_t DEBUG_GPIO : 1; /*!< [3..3] Debug GPIO test mode */ + __IOM uint32_t EXT_RF : 1; /*!< [4..4] External RF test mode */ + __IOM uint32_t EXT_BB : 1; /*!< [5..5] External BB test mode */ + __IOM uint32_t ADC_DAC_LB : 1; /*!< [6..6] ADC via DAC loopback test mode */ + __IOM uint32_t AUXADC12B : 1; /*!< [7..7] AuxADC12B test mode */ + uint32_t : 1; + __IOM uint32_t IQ_ADC : 1; /*!< [9..9] IQ ADC test mode */ + __IOM uint32_t RTC : 1; /*!< [10..10] RTC test mode */ + __IOM uint32_t DEBUG_WIFI : 1; /*!< [11..11] Debug WiFi test mode */ + __IOM uint32_t IQ_SEL : 1; /*!< [12..12] IQ_sel control signal at IQ_ADC test mode */ + uint32_t : 19; + } NORMAL_TEST_CTRL_REG_b; + }; + + union + { + __IOM uint32_t POWER_MANAGE_REG; /*!< (@ 0x00000018) Power Manage register */ + + struct + { + uint32_t : 1; + __IOM uint32_t ISO_EN : 1; /*!< [1..1] RF I/F ISO cell enable :for RF block when enable set + * to '0' ,0: ISO (default)1: normal operation */ + __IOM uint32_t ISCO_EN : 1; /*!< [2..2] RF I/F ISCO cell enable 2 for Ready signal only for IQ + * ADC/DAC block */ + uint32_t : 29; + } POWER_MANAGE_REG_b; + }; + + union + { + __IOM uint32_t MON_RF_TEST_REG; /*!< (@ 0x0000001C) RF monitoring test register */ + + struct + { + __IOM uint32_t BB2RF_MUX_QN0 : 1; /*!< [0..0] BB2RF_MUX_QN0 */ + __IOM uint32_t BB2RF_MUX_QN1 : 1; /*!< [1..1] BB2RF_MUX_QN1 */ + __IOM uint32_t BB2RF_MUX_QP0 : 1; /*!< [2..2] BB2RF_MUX_QP0 */ + __IOM uint32_t BB2RF_MUX_QP1 : 1; /*!< [3..3] BB2RF_MUX_QP1 */ + __IOM uint32_t BB2RF_MUX_IN0 : 1; /*!< [4..4] BB2RF_MUX_IN0 */ + __IOM uint32_t BB2RF_MUX_IN1 : 1; /*!< [5..5] BB2RF_MUX_IN1 */ + __IOM uint32_t BB2RF_MUX_IP0 : 1; /*!< [6..6] BB2RF_MUX_IP0 */ + __IOM uint32_t BB2RF_MUX_IP1 : 1; /*!< [7..7] BB2RF_MUX_IP1 */ + __IOM uint32_t IQ2NDSW_SEL_QN : 1; /*!< [8..8] bb2ip3_iq2ndsw_sel_qpdior_ip123 : GPIO0~3 port connection0: + * aux ADC 1: ADC/DAC */ + __IOM uint32_t IQ2NDSW_SEL_QP : 1; /*!< [9..9] IQ2NDSW_SEL_QP */ + __IOM uint32_t IQ2NDSW_SEL_IN : 1; /*!< [10..10] IQ2NDSW_SEL_IN */ + __IOM uint32_t IQ2NDSW_SEL_IP : 1; /*!< [11..11] IQ2NDSW_SEL_IP */ + __IOM uint32_t IQ2NDSW_SEL_QN_EXT : 1; /*!< [12..12] bb2ip3_iq2ndsw_sel_qpdior_ip123 : GPIO0~3 port connection0: + * aux ADC 1: ADC/DAC */ + __IOM uint32_t IQ2NDSW_SEL_QP_EXT : 1; /*!< [13..13] IQ2NDSW_SEL_QP_EXT */ + __IOM uint32_t IQ2NDSW_SEL_IN_EXT : 1; /*!< [14..14] IQ2NDSW_SEL_IN_EXT */ + __IOM uint32_t IQ2NDSW_SEL_IP_EXT : 1; /*!< [15..15] IQ2NDSW_SEL_IP_EXT */ + __IOM uint32_t SEL_IQSEL_QN_SEN : 1; /*!< [16..16] SEL_IQSEL_QN_SEN */ + __IOM uint32_t SEL_IQSEL_QP_SEN : 1; /*!< [17..17] SEL_IQSEL_QP_SEN */ + __IOM uint32_t SEL_IQSEL_IN_SEN : 1; /*!< [18..18] SEL_IQSEL_IN_SEN */ + __IOM uint32_t SEL_IQSEL_IP_SEN : 1; /*!< [19..19] SEL_IQSEL_IP_SEN */ + __IOM uint32_t EN_IQSW_QN_EXTMODE : 1; /*!< [20..20] RX/TX IQ switch control1: output IF signal to external + * path */ + __IOM uint32_t EN_IQSW_QP_EXTMODE : 1; /*!< [21..21] RX/TX IQ switch control1: output IF signal to external + * path */ + __IOM uint32_t EN_IQSW_IN_EXTMODE : 1; /*!< [22..22] RX/TX IQ switch control1: output IF signal to external + * path */ + __IOM uint32_t EN_IQSW_IP_EXTMODE : 1; /*!< [23..23] RX/TX IQ switch control1: output IF signal to external + * path */ + uint32_t : 8; + } MON_RF_TEST_REG_b; + }; + + union + { + __IOM uint32_t IP1_BAND_GAP_REG; /*!< (@ 0x00000020) IP1 Band gap register */ + + struct + { + __IOM uint32_t LDO_MON_SEL : 3; /*!< [2..0] monitor select control at "IP1_LDO_TEST"0: GND,1: DAC_VDD2: + * SADC_AVDD3: SADC_DVDD4: FADC_AVDD5: FADC_DVDD6,7: don't + * use */ + uint32_t : 1; + __IOM uint32_t BG_VTRIM : 3; /*!< [6..4] Band gap output voltage trimming control0: min (default)7: + * max */ + uint32_t : 25; + } IP1_BAND_GAP_REG_b; + }; + + union + { + __IOM uint32_t IP4_POR_LDO_CTRL_REG; /*!< (@ 0x00000024) IP2 Band gap register */ + + struct + { + __IOM uint32_t IP4_POR_ADJVFR : 1; /*!< [0..0] Adjust VFR setting0: default */ + __IOM uint32_t IP4_POR_VDET_SEL : 1; /*!< [1..1] Detection power selection :0: detect 0.9V (default)1: + * detect 1.1V */ + uint32_t : 2; + __IOM uint32_t DIGTOP_LDO_CTRL : 3; /*!< [6..4] DIG_TOP_LDO output control0: 1.16V (Default), 1: 1.12V, + * 2: 1.07V, 3: 1.02V4: 0.98V, 5 :0.93V, 6: 0.88V, 7: 0.83V */ + uint32_t : 25; + } IP4_POR_LDO_CTRL_REG_b; + }; + + union + { + __IOM uint32_t IP2_BAND_GAP_REG; /*!< (@ 0x00000028) IP4 Por register */ + + struct + { + __IOM uint32_t IP4_VBG_TRIM : 3; /*!< [2..0] Band gap output voltage trimming control0: min (default)7: + * max */ + __IOM uint32_t IP2_POR_ADJVFR : 1; /*!< [3..3] Adjust VFR setting0: default */ + __IOM uint32_t IP2_POR_VDEL_SEL : 1; /*!< [4..4] Detection power selection0: detect 0.9V (default)1: detect + * 1.1V, */ + uint32_t : 27; + } IP2_BAND_GAP_REG_b; + }; + + union + { + __IOM uint32_t IP4_DCDC_DIG_REG; /*!< (@ 0x0000002C) IP4 DCDC dig register */ + + struct + { + __IOM uint32_t DCDC_DIG_TMF : 3; /*!< [2..0] Select the PWM frequency of the DCDC_ANA [TMF2_11V TMF1_11V + * TMF0_11V] LX_Frequency 000 : 1.9MHz, 001 : 2.7MHz, 010 + * : 3.4MHz, 011 : 4.1MHz, 100 : 4.7MHz, 101 : 5.2MHz (only + * for testing) 110 : 5.8MHz(only for testing), 111 : 6.3MHz + * (only for testing) */ + __IOM uint32_t DCDC_DIG_SUSPENDB : 1; /*!< [3..3] SUSPENDB_11V=0 and iload is less than 15mA, DCDC will + * enter to PFM mode.The PFM mode will have voltage ripple + * about 10mV */ + __IOM uint32_t DCDC_DIG_ADJ : 3; /*!< [6..4] Adjust the output voltage of the DCDC_ANA000 : 1.18V, + * 001 : 1.22V, 010 : 1.25V, 011 : 1.29V100 : 1.33V, 101 : + * 1.36V, 110 : 1.40V, 111 : 1.44V */ + __IOM uint32_t DCDC_DIG_CLIM_ENB : 1; /*!< [7..7] Current limit control pin.CLIM_ENB_12V =0: limit power + * current 500mA, CLIM_ENB_12V =1: limit power current 800mA */ + uint32_t : 24; + } IP4_DCDC_DIG_REG_b; + }; + + union + { + __IOM uint32_t IP4_DCDC_FEM_REG; /*!< (@ 0x00000030) DCDC FEM register */ + + struct + { + __IOM uint32_t DCDC_FEM_TMF : 3; /*!< [2..0] Select the PWM frequency of the DCDC_ANA000 : 1.94MHz, + * 001 : 2.77MHz, 010 : 3.5MHz,011 : 4.18MHz, 100 : 4.79MHz, + * 101 : 5.34MHz (only for testing)110 : 5.87MHz(only for + * testing), 111 : 6.37MHz (only for testing) */ + __IOM uint32_t DCDC_FEM_SUSPENDB : 1; /*!< [3..3] SUSPENDB_11V=0 and iload is less than 15mA, DCDC will + * enter to PFM mode.The PFM mode will have voltage ripple + * about 10mV */ + __IOM uint32_t DCDC_FEM_ADJ : 3; /*!< [6..4] Programmed output setting: D3095BA Version Voltage 000 + * : 1.1V, 001 : 1.15V, 010 : 1.2V, 011 : 1.25V 100 : 1.3V, + * 101 : 1.35V, 110 : 1.4V, 111 : 1.45V */ + __IOM uint32_t DCDC_FEM_CLIM_ENB : 1; /*!< [7..7] Current limit control pin.CLIM_ENB_12V =0: limit power + * current 500mA, CLIM_ENB_12V =1: limit power current 800mA */ + uint32_t : 24; + } IP4_DCDC_FEM_REG_b; + }; + + union + { + __IOM uint32_t LDO_CTRL_REG; /*!< (@ 0x00000034) LDO control register */ + + struct + { + __IOM uint32_t FLDO_VCTRL : 3; /*!< [2..0] Flash SDIO_LDO output control0: 1.7V1: 1.725V2: 1.75V3: + * 1.775V4: 1.8V (default)5: 1.00V6: 0.99V7: 0.97V */ + __IOM uint32_t IP2_BG_TRIM : 3; /*!< [5..3] Band gap output voltage trimming control0: min (default)7: + * max */ + uint32_t : 26; + } LDO_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DAC_10B_CFG_REG; /*!< (@ 0x00000038) DAC 10bit config register */ + + struct + { + __IOM uint32_t DAC_PD : 1; /*!< [0..0] Power Down Signal for DAC0: Normal1: Power Down (default) + * (IF PD is high, the DAC register code will be 0000000000) + * (IF PD is high, VOUTP_(I,Q) and VOUTN_(I,Q) will be pulled + * down) */ + __IOM uint32_t DAC_RESET : 1; /*!< [1..1] DAC Reset0: Normal1: Reset (default) (IF Reset=1,the + * DAC register code will be 0000000000) */ + __IOM uint32_t DAC_SUSPEND : 1; /*!< [2..2] SUSPEND0: Normal Mode1: Suspend Mode 2. pull down VOUTP_(I,Q) + * and VOUTN_(I,Q). */ + __IOM uint32_t DAC_PRBSEN : 1; /*!< [3..3] Pseudorandom binary sequence enable */ + __IOM uint32_t DAC_DRVSEL : 1; /*!< [4..4] Bias control bits for output buffer */ + uint32_t : 27; + } DAC_10B_CFG_REG_b; + }; + + union + { + __IOM uint32_t DAC_CTRL_REG; /*!< (@ 0x0000003C) DAC Control register */ + + struct + { + __IOM uint32_t DAC_EN : 1; /*!< [0..0] c_nco_dac_en :0: Disable1: Enable(Tone Generation) */ + __IOM uint32_t DAC_IN_SEL_I : 1; /*!< [1..1] c_nco_dac_in_sel_i :0: Cosine Wave1: Constant Value */ + __IOM uint32_t DAC_IN_SEL_Q : 1; /*!< [2..2] c_nco_dac_in_sel_q :0: Sine Wave1: Constant Value */ + uint32_t : 29; + } DAC_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DAC_GAIN_REG; /*!< (@ 0x00000040) DAC Gain register */ + + struct + { + __IOM uint32_t DAC_GAIN_I : 8; /*!< [7..0] test tone gain control (0 : 0%, 255 : 100%) */ + __IOM uint32_t DAC_GAIN_Q : 8; /*!< [15..8] test tone gain control (0 : 0%, 255 : 100%) */ + uint32_t : 16; + } DAC_GAIN_REG_b; + }; + + union + { + __IOM uint32_t DAC_FREQ_I_REG; /*!< (@ 0x00000044) DAC Frequency I register */ + + struct + { + __IOM uint32_t DAC_FREQ_I : 11; /*!< [10..0] nco accumulator value (value = [Ftone * 2^11] / fclock) */ + uint32_t : 21; + } DAC_FREQ_I_REG_b; + }; + + union + { + __IOM uint32_t DAC_FREQ_Q_REG; /*!< (@ 0x00000048) DAC Frequency Q register */ + + struct + { + __IOM uint32_t DAC_FREQ_Q : 11; /*!< [10..0] nco accumulator value (value = [Ftone * 2^11] / fclock) */ + uint32_t : 21; + } DAC_FREQ_Q_REG_b; + }; + + union + { + __IOM uint32_t FADC_CFG0_REG; /*!< (@ 0x0000004C) FADC 14b Config0 register */ + + struct + { + __IOM uint32_t FADC_PD : 1; /*!< [0..0] Power Down Signal for Dual-Channel. ADC0: Normal1: Power + * Down (default) */ + __IOM uint32_t FADC_SUSPEND : 1; /*!< [1..1] SUSPEND :0: Normal Mode (default)1: Suspend Mode (fast + * wake-up mode) */ + __IOM uint32_t FADC_RESET : 1; /*!< [2..2] ADC Reset :0: Normal1: Reset (default) */ + uint32_t : 29; + } FADC_CFG0_REG_b; + }; + + union + { + __IOM uint32_t FADC_CFG1_REG; /*!< (@ 0x00000050) FADC 14b Config1 register */ + + struct + { + __IOM uint32_t FADC_ASYNCDLY : 3; /*!< [2..0] Async-clock delay */ + uint32_t : 1; + __IOM uint32_t FADC_MCLKDELS : 3; /*!< [6..4] Main clock delay (sampling time period) */ + uint32_t : 1; + __IOM uint32_t FADC_COMPBIAS : 2; /*!< [9..8] Comparator Bias */ + uint32_t : 2; + __IOM uint32_t FADC_ADCBIAS : 4; /*!< [15..12] It sets the bias current of the IQADC reference. It + * consists of 2 branches, one for each I and Q. The current + * for each branch current is set as follows.0: N.A, 1: 0.615mA, + * 2: 1.230mA, 3:1.845mA, 4:2.460mA5:3.975mA, 6:3.690mA, 7: + * 4.305mA, 8:4.920mA, 9:5.535mA10:6.15mA, 11:6.765mA, 12:7.380mA, + * 13:7.995mA, 14:8.610mA, 15:9.225mA */ + __IOM uint32_t FADC_WKUPSUSP : 4; /*!< [19..16] Wake-up time (SUSPEND mode) */ + __IOM uint32_t FADC_WKUPPD : 4; /*!< [23..20] Wake-up time (PD mode) */ + __IOM uint32_t FADC_VCM_CTRL : 3; /*!< [26..24] RDAC common mode voltare : default 550mV (520mV~580mV) */ + uint32_t : 5; + } FADC_CFG1_REG_b; + }; + + union + { + __IOM uint32_t FADC_CAL1_REG; /*!< (@ 0x00000054) FADC 14b Calibration1 register */ + + struct + { + __IOM uint32_t C_DAC_GAIN : 8; /*!< [7..0] internal DAC input gain value = output*c_dac_gain / 256 + * average value is always middle(2048) */ + __IOM uint32_t C_NCO_FREQ : 13; /*!< [20..8] internal DAC input data sine frequency. */ + uint32_t : 3; + __IOM uint32_t C_DAC_CLK_FREQ : 3; /*!< [26..24] internal DAC input data frequency.0: 1MHz (main clock + * 1/40)1: 2MHz (1/20)2: 4MHz (1/10)3: 6.7MHz (1/6)4: 8MHz + * (1/5)5: 10MHz (1/4)6: 13.3MHz (1/3)7 : 20MHz (1/2) */ + __IOM uint32_t C_WEIGHT_WR : 1; /*!< [27..27] Initial with calibrated weight value (1 clock pulse)If + * c_weight_wr is 1, write calibrated weight to register */ + __IOM uint32_t C_OUT_MUTE : 1; /*!< [28..28] output data force to 0 ( for current test)0: o_dout + * is normal data1: o_dout is 0. */ + __IOM uint32_t C_CAL_START : 1; /*!< [29..29] calibration process start (more than 1 clock pulse) */ + __IOM uint32_t C_LVL_POLAR : 1; /*!< [30..30] input perturbation signal polarity0: ana_pert = 1 is + * -delta, ana_pert = 0 is +delta1: ana_pert = 1 is +delta, + * ana_pert = 0 is -delta */ + __IOM uint32_t C_ENABLE : 1; /*!< [31..31] digital logic enable If enable is 0, o_dout is i_ana_din[14:1] + * (each channel) If enable is 1, o_dout is weighted sum of + * i_ana_din */ + } FADC_CAL1_REG_b; + }; + + union + { + __IOM uint32_t FADC_CAL2_REG; /*!< (@ 0x00000058) FADC 14b Calibration2 register */ + + struct + { + __IOM uint32_t CND_ERROR_TH : 8; /*!< [7..0] calibration finish threshold value */ + __IOM uint32_t CND_CNT : 2; /*!< [9..8] calibration finish count :0: 200001: 300002: 500003: + * 1000000 */ + uint32_t : 2; + __IOM uint32_t CND_DONE : 4; /*!< [15..12] calibratio finish condition 000 : max error threshold + * 010 : calibration count 100 : avg error threshold */ + __IOM uint32_t SCALE_ERROR : 3; /*!< [18..16] monitoring error value scaling 0 : 2^-7 1 : 2^-8 2 + * : 2^-9 3 : 2^-10 4 : 2^-11 5 : 2^-12 6 : 2^-13 7 : 2^-14 */ + uint32_t : 1; + __IOM uint32_t SCALE_DELTA : 3; /*!< [22..20] monitoring delta value scaling 0 : 2^-5 1 : 2^-6 2 + * : 2^-7 3 : 2^-8 4 : 2^-9 5 : 2^-10 6 : 2^-11 7 : 2^-12 */ + uint32_t : 1; + __IOM uint32_t STEP_ERROR : 3; /*!< [26..24] error value update step size 0 : 2^-4 1 : 2^-5 2 : + * 2^-6 3 : 2^-7 4 : 2^-8 5 : 2^-9 6 : 2^-10 7 : 2^-11 */ + uint32_t : 1; + __IOM uint32_t STEP_DELTA : 3; /*!< [30..28] delta value update step size 0 : 2^-8 1 : 2^-9 2 : + * 2^-10 3 : 2^-11 4 : 2^-12 5 : 2^-13 6 : 2^-14 7 : 2^-15 */ + uint32_t : 1; + } FADC_CAL2_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t FADC_CAL_DONE_I_REG; /*!< (@ 0x00000060) FADC 14b Calibration I done register */ + + struct + { + __IM uint32_t CAL_CNT_I : 16; /*!< [15..0] cal_cnt_i value after calibration done */ + __IM uint32_t CAL_DONE_Q : 1; /*!< [16..16] CAL_DONE_Q */ + __IM uint32_t CAL_DONE_I : 1; /*!< [17..17] CAL_DONE_I */ + uint32_t : 14; + } FADC_CAL_DONE_I_REG_b; + }; + + union + { + __IOM uint32_t FADC_CAL_DONE_Q_REG; /*!< (@ 0x00000064) FADC 14b Calibration Q done register */ + + struct + { + __IM uint32_t CAL_CNT_Q : 16; /*!< [15..0] cal_cnt_q value after calibration done */ + __IM uint32_t CAL_DONE_Q : 1; /*!< [16..16] CAL_DONE_Q */ + uint32_t : 15; + } FADC_CAL_DONE_Q_REG_b; + }; + + union + { + __IOM uint32_t FADC_DOUT_DELTA_REG; /*!< (@ 0x00000068) FADC 14b delta register */ + + struct + { + __IM uint32_t DELTA_Q : 16; /*!< [15..0] delta_q value */ + __IM uint32_t DELTA_I : 16; /*!< [31..16] delta _i value */ + } FADC_DOUT_DELTA_REG_b; + }; + + union + { + __IOM uint32_t FADC_DOUT_ERROR_REG; /*!< (@ 0x0000006C) FADC 14b error register */ + + struct + { + __IM uint32_t ERROR_Q : 8; /*!< [7..0] error_q value */ + __IM uint32_t ERROR_I : 8; /*!< [15..8] error_i value */ + uint32_t : 16; + } FADC_DOUT_ERROR_REG_b; + }; + + union + { + __IOM uint32_t XTAL32K_CTRL_REG; /*!< (@ 0x00000070) XTAL32K Control register */ + + struct + { + __IOM uint32_t XTAL32K_ENABLE : 1; /*!< [0..0] nco accumulator value (value = [Ftone * 2^11] / fclock) */ + uint32_t : 31; + } XTAL32K_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TEST_CFG_REG; /*!< (@ 0x00000074) Test Config register */ + + struct + { + __IOM uint32_t SEL_TST1_MUX : 4; /*!< [3..0] Async-clock delay */ + __IOM uint32_t SEL_TST2_MUX : 4; /*!< [7..4] reserved */ + __IOM uint32_t TST1_GPADC_EN : 1; /*!< [8..8] Main clock delay (sampling time period) */ + __IOM uint32_t TST2_GPADC_EN : 1; /*!< [9..9] reserved */ + __IOM uint32_t TST1_GPIO_EN : 1; /*!< [10..10] Comparator Bias */ + __IOM uint32_t TST2_GPIO_EN : 1; /*!< [11..11] reserved */ + __IOM uint32_t HPI_BURNIN_EN : 1; /*!< [12..12] ADC Bias */ + __IOM uint32_t TX_HPI_BURNIN_EN : 1; /*!< [13..13] Wake-up time (SUSPEND mode) */ + __IOM uint32_t TST_GPIO0_DIO2_EN : 1; /*!< [14..14] need to add description */ + __IOM uint32_t TST_GPIO1_DIO2_EN : 1; /*!< [15..15] need to add description */ + __IOM uint32_t CTRL_TX_ATTEN : 6; /*!< [21..16] Wake-up time (PD mode) */ + uint32_t : 10; + } TEST_CFG_REG_b; + }; + + union + { + __IOM uint32_t PAD_LATCH_EN_REG; /*!< (@ 0x00000078) PAD Latch Enable Control register */ + + struct + { + __IOM uint32_t SWD_LATCH_EN : 2; /*!< [1..0] Port SWD Pad latch enalbe, bit field is match SWD_[1:00]1: + * enable0: disable */ + __IOM uint32_t P0_LATCH_EN : 14; /*!< [15..2] Port P0 Pad latch enalbe, bit field is match P0_[13:00]1: + * enable0: disable */ + __IOM uint32_t P1_LATCH_EN : 16; /*!< [31..16] Port P1 Pad latch enalbe, bit field is match P1_[15:00]1: + * enable0: disable */ + } PAD_LATCH_EN_REG_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t PSRAM_DEBUG_REG; /*!< (@ 0x00000080) PSRAM Debug register */ + + struct + { + __IM uint32_t LATENCY_CNT : 5; /*!< [4..0] Latency count */ + uint32_t : 3; + __IM uint32_t PSRAM_STS_MON : 5; /*!< [12..8] PSRAM status monitoring */ + uint32_t : 19; + } PSRAM_DEBUG_REG_b; + }; +} CRG_COM_Type; /*!< Size = 132 (0x84) */ + +/* =========================================================================================================================== */ +/* ================ CRG_PER ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CRG_PER registers (CRG_PER) + */ + +typedef struct /*!< (@ 0x40090400) CRG_PER Structure */ +{ + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t CLK_COM_REG; /*!< (@ 0x00000004) Peripheral divider register */ + + struct + { + __IOM uint32_t SPI_ENABLE : 1; /*!< [0..0] Enables the clock */ + uint32_t : 1; + __IOM uint32_t SPI2_ENABLE : 1; /*!< [2..2] Enables the clock */ + uint32_t : 1; + __IOM uint32_t I2C_ENABLE : 1; /*!< [4..4] Enables the clock */ + __IOM uint32_t I2C_CLK_SEL : 1; /*!< [5..5] Selects the clock source1 : DIVC clock0 : DIVN clock */ + __IOM uint32_t I2C2_ENABLE : 1; /*!< [6..6] Enables the clock */ + __IOM uint32_t I2C2_CLK_SEL : 1; /*!< [7..7] Selects the clock source1 : DIVC clock0 : DIVN clock */ + __IOM uint32_t AUXADC_ENABLE : 1; /*!< [8..8] Enables the clock */ + __IOM uint32_t UART_ENABLE : 1; /*!< [9..9] Enables the clock */ + __IOM uint32_t UART2_ENABLE : 1; /*!< [10..10] Enables the clock */ + __IOM uint32_t UART3_ENABLE : 1; /*!< [11..11] Enables the clock */ + __IOM uint32_t SDIO_ENABLE : 1; /*!< [12..12] Enables the clock */ + __IOM uint32_t SDEMMC_ENABLE : 1; /*!< [13..13] Enables the clock */ + uint32_t : 18; + } CLK_COM_REG_b; + }; + + union + { + __IOM uint32_t SET_CLK_COM_REG; /*!< (@ 0x00000008) Peripheral divider register SET register. Reads + * back 0x0000 */ + + struct + { + __IOM uint32_t SPI_ENABLE : 1; /*!< [0..0] Enables the clock */ + uint32_t : 1; + __IOM uint32_t SPI2_ENABLE : 1; /*!< [2..2] Enables the clock */ + uint32_t : 1; + __IOM uint32_t I2C_ENABLE : 1; /*!< [4..4] Enables the clock */ + __IOM uint32_t I2C_CLK_SEL : 1; /*!< [5..5] Selects the clock source1 : DIVC clock0 : DIVN clock */ + __IOM uint32_t I2C2_ENABLE : 1; /*!< [6..6] Enables the clock */ + __IOM uint32_t I2C2_CLK_SEL : 1; /*!< [7..7] Selects the clock source1 : DIVC clock0 : DIVN clock */ + __IOM uint32_t AUXADC_ENABLE : 1; /*!< [8..8] Enables the clock */ + __IOM uint32_t UART_ENABLE : 1; /*!< [9..9] Enables the clock */ + __IOM uint32_t UART2_ENABLE : 1; /*!< [10..10] Enables the clock */ + __IOM uint32_t UART3_ENABLE : 1; /*!< [11..11] Enables the clock */ + __IOM uint32_t SDIO_ENABLE : 1; /*!< [12..12] Enables the clock */ + __IOM uint32_t SDEMMC_ENABLE : 1; /*!< [13..13] Enables the clock */ + uint32_t : 18; + } SET_CLK_COM_REG_b; + }; + + union + { + __IOM uint32_t RESET_CLK_COM_REG; /*!< (@ 0x0000000C) Peripheral divider register RESET register. Reads + * back 0x0000 */ + + struct + { + __IOM uint32_t SPI_ENABLE : 1; /*!< [0..0] Enables the clock */ + uint32_t : 1; + __IOM uint32_t SPI2_ENABLE : 1; /*!< [2..2] Enables the clock */ + uint32_t : 1; + __IOM uint32_t I2C_ENABLE : 1; /*!< [4..4] Enables the clock */ + __IOM uint32_t I2C_CLK_SEL : 1; /*!< [5..5] Selects the clock source1 = DIVC clock0 = DIVN clock */ + __IOM uint32_t I2C2_ENABLE : 1; /*!< [6..6] Enables the clock */ + __IOM uint32_t I2C2_CLK_SEL : 1; /*!< [7..7] Selects the clock source1 = DIVC clock0 = DIVN clock */ + __IOM uint32_t AUXADC_ENABLE : 1; /*!< [8..8] Enables the clock */ + __IOM uint32_t UART_ENABLE : 1; /*!< [9..9] Enables the clock */ + __IOM uint32_t UART2_ENABLE : 1; /*!< [10..10] Enables the clock */ + __IOM uint32_t UART3_ENABLE : 1; /*!< [11..11] Enables the clock */ + __IOM uint32_t SDIO_ENABLE : 1; /*!< [12..12] Enables the clock */ + __IOM uint32_t SDEMMC_ENABLE : 1; /*!< [13..13] Enables the clock */ + uint32_t : 18; + } RESET_CLK_COM_REG_b; + }; +} CRG_PER_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ CRG_SYS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CRG_SYS registers (CRG_SYS) + */ + +typedef struct /*!< (@ 0x40070500) CRG_SYS Structure */ +{ + __IM uint32_t RESERVED[8]; + + union + { + __IOM uint32_t MEM_CLK_CTRL_REG; /*!< (@ 0x00000020) MEM_CLK_CTRL_REG */ + + struct + { + uint32_t : 4; + __IOM uint32_t CACHERAM_CLK_OFF : 1; /*!< [4..4] CACHERAM_CLK_OFF */ + __IOM uint32_t CACHERAM_CLK_DCG : 1; /*!< [5..5] CACHERAM_CLK_DCG */ + uint32_t : 26; + } MEM_CLK_CTRL_REG_b; + }; + + union + { + __IOM uint32_t HPI_CLK_CTRL_REG; /*!< (@ 0x00000024) HPI_CLK_CTRL_REG */ + + struct + { + __IOM uint32_t HPI_CLK_OFF : 1; /*!< [0..0] HPI_CLK_OFF */ + __IOM uint32_t HPI_CLK_DCG : 1; /*!< [1..1] HPI_CLK_DCG */ + uint32_t : 30; + } HPI_CLK_CTRL_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t CRYPTO_RAM_CTRL_REG; /*!< (@ 0x00000034) CRYPTO_RAM_CTRL_REG */ + + struct + { + __IOM uint32_t CRYPTORAM_MA_SAWL : 1; /*!< [0..0] CRYPTORAM_MA_SAWL */ + __IOM uint32_t CRYPTORAM_MA_WL : 1; /*!< [1..1] CRYPTORAM_MA_WL */ + __IOM uint32_t CRYPTORAM_MA_WRAS : 1; /*!< [2..2] CRYPTORAM_MA_WRAS */ + __IOM uint32_t CRYPTORAM_MA_WRASD : 1; /*!< [3..3] CRYPTORAM_MA_WRASD */ + uint32_t : 28; + } CRYPTO_RAM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t CACHE_RAM_CTRL_REG; /*!< (@ 0x00000038) CACHE_RAM_CTRL_REG */ + + struct + { + __IOM uint32_t CACHERAM_MA_SAWL : 2; /*!< [1..0] CACHERAM_MA_SAWL */ + __IOM uint32_t CACHERAM_MA_WL : 2; /*!< [3..2] CACHERAM_MA_WL */ + __IOM uint32_t CACHERAM_MA_WRAS : 2; /*!< [5..4] CACHERAM_MA_WRAS */ + __IOM uint32_t CACHERAM_MA_WRASD : 1; /*!< [6..6] CACHERAM_MA_WRASD */ + uint32_t : 25; + } CACHE_RAM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_RAM_CTRL_REG; /*!< (@ 0x0000003C) DCACHE_RAM_CTRL_REG */ + + struct + { + __IOM uint32_t DCACHERAM_MA_SAWL : 1; /*!< [0..0] DCACHERAM_MA_SAWL */ + __IOM uint32_t DCACHERAM_MA_WL : 1; /*!< [1..1] DCACHERAM_MA_WL */ + __IOM uint32_t DCACHERAM_MA_WRAS : 1; /*!< [2..2] DCACHERAM_MA_WRAS */ + __IOM uint32_t DCACHERAM_MA_WRASD : 1; /*!< [3..3] DCACHERAM_MA_WRASD */ + uint32_t : 28; + } DCACHE_RAM_CTRL_REG_b; + }; +} CRG_SYS_Type; /*!< Size = 64 (0x40) */ + +/* =========================================================================================================================== */ +/* ================ CRG_TOP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CRG_TOP registers (CRG_TOP) + */ + +typedef struct /*!< (@ 0x400C0000) CRG_TOP Structure */ +{ + union + { + __IOM uint32_t CLK_AMBA_REG; /*!< (@ 0x00000000) HCLK, PCLK, divider and clock gates */ + + struct + { + __IOM uint32_t HCLK_DIV : 3; /*!< [2..0] AHB interface and microprocessor clock. Source clock + * divided by:000 = divide hclk by 1001 = divide hclk by 2010 + * = divide hclk by 4011 = divide hclk by 8100 = divide hclk + * by 16101 = divide hclk by 32110 = divide hclk by 64111 + * = divide hclk by 128 */ + uint32_t : 3; + __IOM uint32_t PSK_CLK_ENABLE : 1; /*!< [6..6] Clock enable for AES crypto block */ + __IOM uint32_t TDES_ENABLE : 1; /*!< [7..7] Clock enable for TDES block */ + __IOM uint32_t OQSPIF_DIV : 2; /*!< [9..8] OQSPI divider00 = divide by 101 = divide by 210 = divide + * by 411 = divide by 8 */ + __IOM uint32_t OQSPIF_ENABLE : 1; /*!< [10..10] Clock enable for OQSPI controller */ + __IOM uint32_t QSPI2_DIV : 2; /*!< [12..11] QSPI divider00 = divide by 101 = divide by 210 = divide + * by 411 = divide by 8 */ + __IOM uint32_t QSPI2_ENABLE : 1; /*!< [13..13] Clock enable for QSPI RAM controller */ + __IOM uint32_t QSPI2_PULLUP_ENABLE : 1; /*!< [14..14] Pull-up enable when OQSPIF_D* pads are not output.0: + * disable1: The pads are pull-up (to VDDIO_18) */ + __IOM uint32_t QSPI2_PULLDN_ENABLE : 1; /*!< [15..15] Pull-down enable when OQSPIF_D* pads are not output.0: + * disable1: The pads are pull-down (to VSS) */ + __IOM uint32_t OQSPI_GPIO_MODE : 1; /*!< [16..16] If this bit is set, the upper 4 pins of the OQSPIF + * controller can be used as GPIO, P1_00 to P1_03.In this + * mode, the OQSPIF controller should be restricted to QUAD + * mode or less.Note: the supply remains V18F, so if the supply + * is off, the pads become floating. */ + __IOM uint32_t OQSPI_PULLUP_ENABLE : 1; /*!< [17..17] Pull-up enable when OQSPIF_D* pads are not output.0: + * disable1: The pads are pull-up (to VDDIO_18) */ + __IOM uint32_t OQSPI_PULLDN_ENABLE : 1; /*!< [18..18] Pull-down enable when OQSPIF_D* pads are not output.0: + * disable1: The pads are pull-down (to VSS) */ + __IOM uint32_t SYS_MEM_ENABLE : 1; /*!< [19..19] Clock enable for System Memory */ + __IOM uint32_t GEN_DMA_ENABLE : 1; /*!< [20..20] Clock enable for Gen DMA */ + __IOM uint32_t CC312_CLK_ENABLE : 1; /*!< [21..21] Clock enable for CC312 */ + __IOM uint32_t PHY_CLK_ENABLE : 1; /*!< [22..22] Clock enable for PHY Top */ + __IOM uint32_t PERI_CLK_ENABLE : 1; /*!< [23..23] Clock enable for Peripheral */ + __IOM uint32_t TIMER_CLK_ENABLE : 1; /*!< [24..24] Clock enable for Timer */ + __IOM uint32_t AUX_CLK_ENABLE : 1; /*!< [25..25] Clock enable for AUX */ + __IOM uint32_t SPI_CLK_ENABLE : 1; /*!< [26..26] Clock enable for SPI */ + __IOM uint32_t KDMA_CLK_ENABLE : 1; /*!< [27..27] Clock enable for kDMA */ + __IM uint32_t HCLK_DIV_SYNC : 3; /*!< [30..28] Actual applied AHB interface and microprocessor clock + * which synchronized to systick 1us */ + uint32_t : 1; + } CLK_AMBA_REG_b; + }; + + union + { + __IOM uint32_t SET_FREEZE_REG; /*!< (@ 0x00000004) Controls freezing of various timers/counters + * (incl. DMA and USB). */ + + struct + { + __IOM uint32_t FRZ_WKUPTIM : 1; /*!< [0..0] If '1', the Wake Up Timer is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM : 1; /*!< [1..1] If '1', the SW Timer is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM2 : 1; /*!< [2..2] If '1', the SW Timer2 is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM3 : 1; /*!< [3..3] If '1', the SW Timer3 is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM4 : 1; /*!< [4..4] If '1', the SW Timer4 is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM5 : 1; /*!< [5..5] If '1', the SW Timer5 is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM6 : 1; /*!< [6..6] If '1', the SW Timer6 is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM7 : 1; /*!< [7..7] If '1', the SW Timer7 is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM8 : 1; /*!< [8..8] If '1', the SW Timer8 is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_SYS_WDOG : 1; /*!< [9..9] If '1', the SYS SW Watchdog Timer is frozen, '0' is discarded. + * WATCHDOG_CTRL_REG[NMI_RST] must be '0' to allow the freeze + * function. */ + uint32_t : 1; + __IOM uint32_t FRZ_DMA : 1; /*!< [11..11] If '1', the DMA is frozen, '0' is discarded. */ + __IOM uint32_t FRZ_KDMA : 1; /*!< [12..12] If '1', the kDMA is frozen, '0' is discarded. */ + uint32_t : 19; + } SET_FREEZE_REG_b; + }; + + union + { + __IOM uint32_t RESET_FREEZE_REG; /*!< (@ 0x00000008) Controls unfreezing of various timers/counters + * (incl. DMA and USB). */ + + struct + { + __IOM uint32_t FRZ_WKUPTIM : 1; /*!< [0..0] If '1', the Wake Up Timer continues, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM : 1; /*!< [1..1] If '1', the SW Timer continues, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM2 : 1; /*!< [2..2] If '1', the SW Timer2 continues, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM3 : 1; /*!< [3..3] If '1', the SW Timer3 continues, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM4 : 1; /*!< [4..4] If '1', the SW Timer4 continues, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM5 : 1; /*!< [5..5] If '1', the SW Timer5 continues, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM6 : 1; /*!< [6..6] If '1', the SW Timer6 continues, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM7 : 1; /*!< [7..7] If '1', the SW Timer7 continues, '0' is discarded. */ + __IOM uint32_t FRZ_SWTIM8 : 1; /*!< [8..8] If '1', the SW Timer8 continues, '0' is discarded. */ + __IOM uint32_t FRZ_SYS_WDOG : 1; /*!< [9..9] If '1', the SYS SW Watchdog Timer continues, '0' is discarded. */ + uint32_t : 1; + __IOM uint32_t FRZ_DMA : 1; /*!< [11..11] If '1', the DMA continues, '0' is discarded. */ + __IOM uint32_t FRZ_KDMA : 1; /*!< [12..12] If '1', the kDMA continues, '0' is discarded. */ + uint32_t : 19; + } RESET_FREEZE_REG_b; + }; + + union + { + __IOM uint32_t RST_CTRL_REG; /*!< (@ 0x0000000C) Reset control register */ + + struct + { + __IOM uint32_t SYS_CACHE_FLUSH_WITH_SW_RESET : 1; /*!< [0..0] 0: Flush the System Cache memory only at HW reset.1: + * Flush the System Cache memory also at SW reset. */ + __IOM uint32_t PERI_RESET_REQ : 1; /*!< [1..1] PERI block reset request */ + __IOM uint32_t AUD_RESET_REQ : 1; /*!< [2..2] audio block reset request */ + __IOM uint32_t TIMER_RESET_REQ : 1; /*!< [3..3] timer block reset request */ + __IOM uint32_t MEM_RESET_REQ : 1; /*!< [4..4] memory control block reset request */ + uint32_t : 27; + } RST_CTRL_REG_b; + }; + + union + { + __IOM uint32_t RADIO_RESET_REG; /*!< (@ 0x00000010) Radio Reset request register */ + + struct + { + __IOM uint32_t PHYCORE_SW_RESET_REQ : 1; /*!< [0..0] Manual reset for PHY by Host (active Low)0 : reset1 : + * normalfor PHY core block */ + __IOM uint32_t PHYREG_HW_RESET_REQ : 1; /*!< [1..1] refer bit[0]for PHY REG block */ + __IOM uint32_t PHYCORE_HW_RESET_REQ : 1; /*!< [2..2] refer to bit[0]for PHY Core block */ + __IOM uint32_t MPIF_HW_RESET_REQ : 1; /*!< [3..3] refer to bit[0]for MPIF block */ + __IOM uint32_t WT_HW_RESET_REQ : 1; /*!< [4..4] refer to bit[0]for WTCLK block */ + __IOM uint32_t MACCORE_HW_RESET_REQ : 1; /*!< [5..5] refer to bit[0]for MAC core block */ + __IOM uint32_t MACPI_HW_RESET_REQ : 1; /*!< [6..6] refer to bit[0]for MAC Pi block */ + __IOM uint32_t SYSRST_RESET_REQ : 1; /*!< [7..7] refer to bit[0]for Sysrst of PHY block */ + uint32_t : 24; + } RADIO_RESET_REG_b; + }; + + union + { + __IOM uint32_t CLK_CTRL_REG; /*!< (@ 0x00000014) Clock control register */ + + struct + { + __IOM uint32_t SYS_CLK_SEL : 2; /*!< [1..0] SYS_CLK source selection1: XTAL40M2: LP CLK (32Khz)3: + * SYS-PLL */ + __IOM uint32_t PLL_CLK_SEL : 3; /*!< [4..2] PLL clock divider setting. PLL source = 480Mhz0: Do not + * set this value : descoped.1: Do not set this value : descoped.2: + * set to SYS_CLK=160Mhz3: set to SYS_CLK=137.14Mhz4: set + * to SYS_CLK=106Mhz */ + __IOM uint32_t PLL_SPI_CLK_SEL : 2; /*!< [6..5] to generate SPI_CLK for SPI block0: set to SPI_CLK=120Mhz1: + * set to SPI_CLK=96Mhz2: set to SPI_CLK=80Mhz3: set to SPI_CLK=53MhzNote + * : this clock is for SPI block itself, There is another + * divider block in SPI block. */ + __IOM uint32_t PLL_AUX_ENABLE : 1; /*!< [7..7] enable signal for Aux clock using PLL clock source.when + * '1', Aux clock counter starts to work. */ + __IOM uint32_t PLL_SPI_ENABLE : 1; /*!< [8..8] enable signal for SPI clock using PLL clock source.when + * '1', SPI clock counter starts to work. */ + __IOM uint32_t PLL_PERI_ENABLE : 1; /*!< [9..9] enable signal for peripheral clock using PLL clock source.when + * '1', peri clock counter starts to work. */ + __IOM uint32_t PLL_CPU_ENABLE : 1; /*!< [10..10] enable signal for CPU main clock using PLL clock source.when + * '1', CPU clock counter starts to work.Note: before set + * this bit, set the PLL_CLK_SEL bits in advance. */ + __IM uint32_t RUNNING_AT_LP_CLK : 1; /*!< [11..11] Indicates that either the LP_CLK is being used as clock */ + __IM uint32_t RUNNING_AT_XTAL40M : 1; /*!< [12..12] Indicates that the XTAL40M clock is used as clock */ + __IM uint32_t RUNNING_AT_PLL : 1; /*!< [13..13] Indicates that the PLL clock is used as clock, and + * may not be switched off */ + uint32_t : 18; + } CLK_CTRL_REG_b; + }; + + union + { + __IOM uint32_t SYS_CTRL_REG; /*!< (@ 0x00000018) System Control register */ + + struct + { + __IOM uint32_t REMAP_ADR0 : 3; /*!< [2..0] Controls which memory is located at address 0x0000 for + * execution.0x0: ROM0x2: QSPI FLASH cached (see also the + * CACHE_FLASH_REG.FLASH_REGION.* descriptions)Note 1: When + * REMAP_ADR0=0x2, address 0x0 is mapped to FLASH_REGION_BASE + + FLASH_REGION_OFFSET<<2. Note 2: When REMAP_ADR0=0x2, + + the CPU can only access the Flash region [FLASH_REGION_BASE + + FLASH_REGION_OFFSET<<2, FLASH_REGION_SIZE] from the 0x09000000 + + address range. The complete Flash can be accessed via the + + 0x29000000 address range */ + __IOM uint32_t REMAP_INTVECT : 1; /*!< [3..3] 0: Normal operation1: If ARM-M33 is in address range + * 0 to 0x1FF then the address is remapped to SYS-RAM 0x080A.FE00 + * to 0x080A.FFFF. This allows to put the interrupt vector + * table to be placed in RAM while executing from QSPI. */ + __IOM uint32_t DEBUGGER_ENABLE : 1; /*!< [4..4] M33 Debug Access Port enable. This bit can be set by + * the booter according to the OTP header. */ + __IOM uint32_t DRA_OFF : 1; /*!< [5..5] DRA_OFF */ + __IOM uint32_t CACHERAM_MUX : 1; /*!< [6..6] Controls accessibility of Cache RAM:0: the cache controller + * is bypassed, the cacheRAM is visible in the memory space1: + * the cache controller is enabled, the cacheRAM is not visible + * anymore in the memory space */ + __OM uint32_t SW_RESET : 1; /*!< [7..7] Writing a '1' to this bit will generate a SW_RESET. */ + uint32_t : 24; + } SYS_CTRL_REG_b; + }; + + union + { + __IOM uint32_t RETAIN_MEM_CTRL_REG; /*!< (@ 0x0000001C) Memory Control register */ + + struct + { + __IOM uint32_t SYS_RAM1_PWR_CTRL : 2; /*!< [1..0] Power state control of the individual RAMs. May only + * be changed when the memory is not accessed.When SYS_IS_UP:00: + * Normal operation01: Normal operation10: Retained (no access + * possible)11: Off (memory content corrupted)When SYS_IS_DOWN:00: + * Retained01: Off (memory content corrupted)10: Retained11: + * Off (memory content corrupted) */ + __IOM uint32_t SYS_RAM2_PWR_CTRL : 2; /*!< [3..2] SYS_RAM2 Control : refer to SYS_RAM1_PWR_CTRL */ + __IOM uint32_t SYS_RAM3_PWR_CTRL : 2; /*!< [5..4] SYS_RAM3 Control : refer to SYS_RAM1_PWR_CTRL */ + __IOM uint32_t CACHE_RETAIN : 1; /*!< [6..6] cache memory retain1 : retain0 : off */ + __IOM uint32_t DCACHE_RETAIN : 1; /*!< [7..7] dcache memory retain1 : retain0 : off */ + uint32_t : 24; + } RETAIN_MEM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t AUX_CLK_DIV_REG; /*!< (@ 0x00000020) AUX clock divider register */ + + struct + { + __IOM uint32_t CLK_DIV_AUXA : 10; /*!< [9..0] Last divider parameter to generate AuxADC input clock0 + * : 1/11 : 1/22 : 1/3n : 1/(n+1) */ + uint32_t : 22; + } AUX_CLK_DIV_REG_b; + }; + + union + { + __IOM uint32_t RESET_STAT_REG; /*!< (@ 0x00000024) Reset status register */ + + struct + { + __IOM uint32_t PORESET_STAT : 1; /*!< [0..0] Indicates that a PowerOn Reset has happened.All bitfields + * of RESET_STAT_REG should be read (in order to check the + * source of reset) and then cleared to '0', allowing thus + * the HW to automatically set to '1' the proper bitfields + * during the next reset event. */ + __IOM uint32_t HWRESET_STAT : 1; /*!< [1..1] Indicates that a HW Reset has happened */ + __IOM uint32_t SWRESET_STAT : 1; /*!< [2..2] Indicates that a SW Reset has happened */ + __IOM uint32_t SWD_HWRESET_STAT : 1; /*!< [3..3] Indicates that a write to SWD_RESET_REG has happened. + * Note that it is also set when a POReset has happened. */ + __IOM uint32_t M33_WDOG_STAT : 1; /*!< [4..4] Indicates that M33 Watchdog has reached -16 while counting + * down and triggered a HW reset. Note that it is also set + * when a POReset has happened. */ + uint32_t : 27; + } RESET_STAT_REG_b; + }; + + union + { + __IOM uint32_t PMU_CTRL_REG; /*!< (@ 0x00000028) Spare register */ + + struct + { + __IOM uint32_t PHY_SLEEP : 1; /*!< [0..0] WiFi : PHY block sleep control */ + __IOM uint32_t MAC_SLEEP : 1; /*!< [1..1] WiFi : Mac block sleep control */ + uint32_t : 30; + } PMU_CTRL_REG_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t SYS_STATUS_REG; /*!< (@ 0x00000034) system status read register */ + + struct + { + __IM uint32_t SYS_IS_DOWN : 1; /*!< [0..0] 1 indicates PD_SYS is powered down */ + __IM uint32_t SYS_IS_UP : 1; /*!< [1..1] 1 indicates PD_SYS is powered on */ + __IM uint32_t MAC_IS_DOWN : 1; /*!< [2..2] 1 indicates PD_MAC is powered down */ + __IM uint32_t MAC_IS_UP : 1; /*!< [3..3] 1 indicates PD_MAC is powered on */ + __IM uint32_t PHY_IS_DOWN : 1; /*!< [4..4] 1 indicates PD_MAC is powered down */ + __IM uint32_t PHY_IS_UP : 1; /*!< [5..5] 1 indicates PD_MAC is powered on */ + __IM uint32_t DBG_IS_ACTIVE : 1; /*!< [6..6] 1 indicates a debugger is attached */ + uint32_t : 25; + } SYS_STATUS_REG_b; + }; + + union + { + __IOM uint32_t RFMON_INT_REG; /*!< (@ 0x00000038) RFMON Interface CRG control register */ + + struct + { + __IOM uint32_t CLK_ENABLE : 1; /*!< [0..0] RFMON Interface clock enable. 0=disable, 1=enable */ + __IOM uint32_t CFG_RESET : 1; /*!< [1..1] RFMON Interface configure reset. If set, RFMON inteface + * block will be reset. */ + uint32_t : 30; + } RFMON_INT_REG_b; + }; +} CRG_TOP_Type; /*!< Size = 60 (0x3c) */ + +/* =========================================================================================================================== */ +/* ================ DAI ================ */ +/* =========================================================================================================================== */ + +/** + * @brief DAI registers (DAI) + */ + +typedef struct /*!< (@ 0x400E0900) DAI Structure */ +{ + union + { + __IOM uint32_t DAI_ENABLE_REG; /*!< (@ 0x00000000) DAI_ENABLE_REG */ + + struct + { + __IOM uint32_t EN : 1; /*!< [0..0] EN */ + uint32_t : 31; + } DAI_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t DAI_MODE_REG; /*!< (@ 0x00000004) DAI mode */ + + struct + { + __IOM uint32_t MODE : 1; /*!< [0..0] Selects between Master and Slave clock generation for + * the digital audio interface (DAI).0: Slave mode (DAI receives + * clocks)1: Master Mode (DAI generates clocks) */ + uint32_t : 31; + } DAI_MODE_REG_b; + }; + + union + { + __IOM uint32_t DAI_SLOT_CNT_REG; /*!< (@ 0x00000008) DAI maximum slot number */ + + struct + { + __IOM uint32_t SLOT_CNT : 2; /*!< [1..0] Total number of slots0: no slots are enabled,1-2: number + * of slots3-31: reserved */ + uint32_t : 30; + } DAI_SLOT_CNT_REG_b; + }; + + union + { + __IOM uint32_t DAI_CONFIG_REG; /*!< (@ 0x0000000C) DAI configuration */ + + struct + { + __IOM uint32_t FORMAT : 2; /*!< [1..0] DAI frame format.0: I2S1: LJF(Left justified)2: RJF(Right + * justified)3: DSP */ + __IOM uint32_t FRAME_LEN : 3; /*!< [4..2] Frame length control for the internal clock generator. + * The DAI word clock is generated with a 50% duty cycle according + * to the applied frame length.This register is ignored when + * the DAI is in slave mode.0: 32bit1: 64bit2: 128bit3: 256bit4-7 + * : Reserved */ + uint32_t : 27; + } DAI_CONFIG_REG_b; + }; + + union + { + __IOM uint32_t DAI_W_LEN_REG; /*!< (@ 0x00000010) DAI word length */ + + struct + { + __IOM uint32_t W_LEN : 2; /*!< [1..0] The width of the audio data sent and received over the + * DAI per Channel.0: 16bits per slot1: 20bits per slot2: + * 24bits per slot3: 32bits per slot */ + uint32_t : 30; + } DAI_W_LEN_REG_b; + }; + + union + { + __IOM uint32_t DAI_DATA_OUT_CTRL_REG; /*!< (@ 0x00000014) DAI output control */ + + struct + { + __IOM uint32_t BCLK_POL : 1; /*!< [0..0] The BCLK edge used to sample incoming data (DATA_IN). + * Outgoing data (DATA_OUT) is driven on the opposite edge.0: + * Rising1: Falling */ + __IOM uint32_t WCLK_POL : 1; /*!< [1..1] The WCLK edge defining the start of the PCM frame. NOTE: + * The edge is dependent on the DAI Format.0: Rising (LJF, + * RJF, DSP), Falling (I2S)1: Falling (LJF, RJF, DSP), Rising + * (I2S) */ + uint32_t : 1; + __IOM uint32_t DATA_OUT_EN : 2; /*!< [4..3] DAI output enable.0: Hi-Z (Data output is tristate)1: + * Hi-Z (Data output is tristate)2: Enabled (Data driven on + * all slots)3: TDM (Data driven only during enabled slots) */ + __IOM uint32_t TDM_EARLY_RLS : 1; /*!< [5..5] Configures the timing of the DAI data output in TDM mode.0: + * Normal (dai_dataout_oe is driven until the end of the slot)1: + * Early (dai_dataout_oe is deasserted half of BCLK earlier + * at the end of the slot) */ + uint32_t : 26; + } DAI_DATA_OUT_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DAI_DATA_OUT_TEST_REG; /*!< (@ 0x00000018) DAI_DATA_OUT_TEST_REG */ + + struct + { + uint32_t : 2; + __IOM uint32_t DATA_OUT_POL : 1; /*!< [2..2] DATA_OUT_POL */ + uint32_t : 29; + } DAI_DATA_OUT_TEST_REG_b; + }; + + union + { + __IOM uint32_t DAI_OFFSET_MSB_REG; /*!< (@ 0x0000001C) DAI offset control [11:8] */ + + struct + { + __IOM uint32_t OFFSET_MSB : 4; /*!< [3..0] Bits 11-8 of the 12-bit OFFSET, which is the number of + * BCLK cycles offset relative to the normal data formatting. + * The minimum offset value is 0, the maximum is equal to + * the applied frame length. */ + uint32_t : 28; + } DAI_OFFSET_MSB_REG_b; + }; + + union + { + __IOM uint32_t DAI_OFFSET_LSB_REG; /*!< (@ 0x00000020) DAI offset control [7:0] */ + + struct + { + __IOM uint32_t OFFSET_LSB : 8; /*!< [7..0] Bits 7-0 of the 12-bit OFFSET, which is the number of + * BCLK cycles offset relative to the normal data formatting. + * The minimum offset value is 0, the maximum is equal to + * the applied frame length. DAI_OFFSET_MSB_REG hold bits + * 11-8 */ + uint32_t : 24; + } DAI_OFFSET_LSB_REG_b; + }; + + union + { + __IOM uint32_t DAI_TX1_CH_REG; /*!< (@ 0x00000024) DAI slot number mapped to TX channel1 */ + + struct + { + __IOM uint32_t TX1_CH : 2; /*!< [1..0] DAI TX channel1 mapping to slots 1 - 160: Disable channel1-2: + * slots 1-163-32: Reserved */ + uint32_t : 30; + } DAI_TX1_CH_REG_b; + }; + + union + { + __IOM uint32_t DAI_TX2_CH_REG; /*!< (@ 0x00000028) DAI slot number mapped to TX channel2 */ + + struct + { + __IOM uint32_t TX2_CH : 2; /*!< [1..0] DAI TX channel2 mapping to slots 1 - 160: Disable channel1-2: + * slots 1-163-32: Reserved */ + uint32_t : 30; + } DAI_TX2_CH_REG_b; + }; + __IM uint32_t RESERVED[10]; + + union + { + __IOM uint32_t DAI_RX1_CH_REG; /*!< (@ 0x00000054) DAI slot number mapped to RX channel1 */ + + struct + { + __IOM uint32_t RX1_CH : 2; /*!< [1..0] DAI RX channel1 mapping to slots 1 - 160: Disable channel1-2: + * slots 1-163-32: Reserved */ + uint32_t : 30; + } DAI_RX1_CH_REG_b; + }; + + union + { + __IOM uint32_t DAI_RX2_CH_REG; /*!< (@ 0x00000058) DAI slot number mapped to RX channel2 */ + + struct + { + __IOM uint32_t RX2_CH : 2; /*!< [1..0] DAI RX channel2 mapping to slots 1 - 160: Disable channel1-2: + * slots 1-163-32: Reserved */ + uint32_t : 30; + } DAI_RX2_CH_REG_b; + }; + __IM uint32_t RESERVED1[10]; + + union + { + __IOM uint32_t DAI_SYNC_WIN_REG; /*!< (@ 0x00000084) DAI_SYNC_WIN_REG */ + + struct + { + __IOM uint32_t SYNC_WIN_WIDTH : 5; /*!< [4..0] SYNC_WIN_WIDTH */ + uint32_t : 2; + __IOM uint32_t SYNC_WIN_MODE : 1; /*!< [7..7] SYNC_WIN_MODE */ + uint32_t : 24; + } DAI_SYNC_WIN_REG_b; + }; + + union + { + __IOM uint32_t DAI_TX1_REG; /*!< (@ 0x00000088) DAI TX1 Data */ + + struct + { + __IOM uint32_t TX1_REG : 32; /*!< [31..0] DAI TX1 Data register */ + } DAI_TX1_REG_b; + }; + + union + { + __IOM uint32_t DAI_TX2_REG; /*!< (@ 0x0000008C) DAI TX2 Data */ + + struct + { + __IOM uint32_t TX2_REG : 32; /*!< [31..0] DAI TX2 Data register */ + } DAI_TX2_REG_b; + }; + __IM uint32_t RESERVED2[10]; + + union + { + __IOM uint32_t DAI_RX1_REG; /*!< (@ 0x000000B8) DAI RX1 Data */ + + struct + { + __IM uint32_t RX1_REG : 32; /*!< [31..0] DAI RX1 Data register */ + } DAI_RX1_REG_b; + }; + + union + { + __IOM uint32_t DAI_RX2_REG; /*!< (@ 0x000000BC) DAI RX2 Data */ + + struct + { + __IM uint32_t RX2_REG : 32; /*!< [31..0] DAI RX2 Data register */ + } DAI_RX2_REG_b; + }; + __IM uint32_t RESERVED3[10]; + + union + { + __IOM uint32_t DAI_TX_MUX_REG; /*!< (@ 0x000000E8) DAI TX data selection */ + + struct + { + __IOM uint32_t DAI_TX1_SEL : 1; /*!< [0..0] DAI TX1 data selection0: DAI_TX1_REG1: DAI_TX1 (from + * SRC1_OUT1) */ + __IOM uint32_t DAI_TX2_SEL : 1; /*!< [1..1] DAI TX2 data selection0: DAI_TX2_REG1: DAI_TX2 (from + * SRC1_OUT2) */ + uint32_t : 30; + } DAI_TX_MUX_REG_b; + }; + + union + { + __IOM uint32_t DAI_SR_CONFIG_REG; /*!< (@ 0x000000EC) DAI Sample rate configuration */ + + struct + { + __IOM uint32_t DAI_SR : 5; /*!< [4..0] DAI sample rate (kHz)0x00: Reserved0x01: 80x02: 11.0250x03: + * 120x04: Reserved0x05: 160x06: 22.050x07: 240x08: Reserved0x09: + * 320x0A: 44.10x0B: 480x0C: Reserved0x0D: Reserved0x0E: 88.20x0F: + * 960x10: Reserved0x11: Reserved0x12: 176.40x13: 192Others: + * Reserved */ + uint32_t : 27; + } DAI_SR_CONFIG_REG_b; + }; +} DAI_Type; /*!< Size = 240 (0xf0) */ + +/* =========================================================================================================================== */ +/* ================ DCACHE ================ */ +/* =========================================================================================================================== */ + +/** + * @brief DCACHE registers (DCACHE) + */ + +typedef struct /*!< (@ 0x21000000) DCACHE Structure */ +{ + union + { + __IOM uint32_t DCACHE_CTRL_REG; /*!< (@ 0x00000000) Dcache Control Register */ + + struct + { + __IOM uint32_t DCACHE_LEN : 18; /*!< [17..0] Length of PSRAM cacheable memory.N*1 kB. N = 0 to 131072 + * (max. of 128 MB).Setting DCACHE_LEN = 0 disables the caching. */ + __IOM uint32_t DCACHE_ENABLE : 1; /*!< [18..18] Enable the dcache controller hardware block:0: Disabled, + * all AHB accesses towards the QSPI are bypassing the hardware + * block straight into the PSRAM.1: Enabled, all AHB access + * towards the QSPI within the cacheable region are cached. */ + __OM uint32_t DCACHE_INIT : 1; /*!< [19..19] Writing 1 to this field triggers an initialization + * of the cache (0s are written in the TAG area). Reading + * from this field always returns 0. */ + __OM uint32_t DCACHE_WFLUSH : 1; /*!< [20..20] Writing 1 to this field triggers a write flush of the + * "dirty" lines. All modified data in the "dirty" line are + * written back to the PSRAM. The corresponding "dirty" bits + * are cleared. Reading this bit returns 0. */ + __IM uint32_t DCACHE_READY : 1; /*!< [21..21] 0: DCACHE is not initialized yet.1: DCACHE initialization + * is completed. */ + __IOM uint32_t DCACHE_WFLUSHED : 1; /*!< [22..22] 0: DCACHE is not write flushed yet.1: DCACHE is write + * flushed.Note 1: Setting and clearing of this (status) bit + * field is automatically done by the hardware.Note 2: The + * CACHE_WFLUSHED bit can also be cleared first by the software + * by writing 0. */ + __IM uint32_t DCACHE_WBUFFER_EMPTY : 1; /*!< [23..23] Status of the write buffer.0: Write buffer is not empty.1: + * Write buffer is empty. */ + __IOM uint32_t DCACHE_WBUFFER_FLUSH : 1; /*!< [24..24] Write buffer flush.0: Write buffer is not flushed (default).1: + * Write buffer is flushed. */ + __IOM uint32_t DCACHE_DISABLE_CLKGATE : 1; /*!< [25..25] DCACHE_DISABLE_CLKGATE */ + uint32_t : 6; + } DCACHE_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_BASE_ADDR_REG; /*!< (@ 0x00000004) Dcache base address for cacheable region */ + + struct + { + __IOM uint32_t DCACHE_BASE_ADDR : 17; /*!< [16..0] Base of PSRAM cacheable memory.N*1 kB. N = 0 to 131072 + * (max. of 128 MB). */ + uint32_t : 15; + } DCACHE_BASE_ADDR_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_MRM_HITS_REG; /*!< (@ 0x00000008) Dcache MRM (Miss Rate Monitor) HITS Register */ + + struct + { + __IOM uint32_t MRM_HITS : 32; /*!< [31..0] Contain the amount of cache hits. */ + } DCACHE_MRM_HITS_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_MRM_MISSES_REG; /*!< (@ 0x0000000C) Dcache MRM (Miss Rate Monitor) MISSES Register */ + + struct + { + __IOM uint32_t MRM_MISSES : 32; /*!< [31..0] Contain the amount of cache misses. */ + } DCACHE_MRM_MISSES_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_MRM_EVICTS_REG; /*!< (@ 0x00000010) Dcache MRM (Miss Rate Monitor) EVICTS Register */ + + struct + { + __IOM uint32_t MRM_EVICTS : 32; /*!< [31..0] Contain the amount of cache evicts. */ + } DCACHE_MRM_EVICTS_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_MRM_CTRL_REG; /*!< (@ 0x00000014) Dcache MRM (Miss Rate Monitor) CONTROL Register */ + + struct + { + __IOM uint32_t MRM_START : 1; /*!< [0..0] 0: Freeze the "misses/hits" counters and reset the time + * interval counter to the programmed value in CACHE_MRM_TINT_REG.1: + * Enables the counters.Note: In case CACHE_MRM_CTRL_REG[MRM_START] + * is set to 1 and CACHE_MRM_TINT_REG (!=0) is used for the + * MRM interrupt generation, the time interval counter counts + * down (on a fixed reference clock of 16 MHz) until it is + * 0. At that time CACHE_MRM_CTRL_REG[MRM_START] is reset + * automatically to 0 by the MRM hardware and the MRM interrupt + * is generated. */ + __IOM uint32_t MRM_IRQ_MASK : 1; /*!< [1..1] 0: Disables interrupt generation.1: Enables interrupt + * generation.Note: The Cache MRM generates a pulse-sensitive + * interrupt towards the Am processor. */ + __IOM uint32_t MRM_IRQ_TINT_STATUS : 1; /*!< [2..2] 0: No interrupt is generated.1: Interrupt (pulse-sensitive) + * is generated because the time interval counter reached + * the end (time interval != 0). */ + __IOM uint32_t MRM_IRQ_MISSES_THRES_STATUS : 1; /*!< [3..3] 0: No interrupt is generated.1: Interrupt (pulse-sensitive) + * is generated because the number of cache misses reached + * the programmed threshold (threshold != 0). */ + __IOM uint32_t MRM_IRQ_HITS_THRES_STATUS : 1; /*!< [4..4] 0: No interrupt is generated.1: Interrupt (pulse-sensitive) + * is generated because the number of cache hits reached the + * programmed threshold (threshold != 0). */ + __IOM uint32_t MRM_IRQ_EVICTS_THRES_STATUS : 1; /*!< [5..5] 0: No interrupt is generated.1: Interrupt (pulse-sensitive) + * is generated because the number of cache evicts reached + * the programmed threshold (threshold != 0). */ + uint32_t : 26; + } DCACHE_MRM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_MRM_TINT_REG; /*!< (@ 0x00000018) Dcache MRM (Miss Rate Monitor) TIME INTERVAL + * Register */ + + struct + { + __IOM uint32_t MRM_TINT : 19; /*!< [18..0] Define the time interval for the monitoring in (bus + * clock/4) clock cycles.Also, see the description of CACHE_MRM_CTRL_REG[MRM + * IRQ_TINT_STATUS].Note: When MRM_TINT = 0 (unrealistic value), + * no interrupt is generated. */ + uint32_t : 13; + } DCACHE_MRM_TINT_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_MRM_MISSES_THRES_REG; /*!< (@ 0x0000001C) Dcache MRM (Miss Rate Monitor) THRESHOLD Register */ + + struct + { + __IOM uint32_t MRM_MISSES_THRES : 32; /*!< [31..0] Define the misses threshold to trigger the interrupt + * generation.Also, see the description of CACHE_MRM_CTRL_REG[MRM_IRQ_MISSES + * THRES_STATUS].Note: When MRM_MISSES_THRES = 0 (unrealistic + * value), no interrupt is generated. */ + } DCACHE_MRM_MISSES_THRES_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_MRM_HITS_THRES_REG; /*!< (@ 0x00000020) Dcache MRM (Miss Rate Monitor) HITS THRESHOLD + * Register */ + + struct + { + __IOM uint32_t MRM_HITS_THRES : 32; /*!< [31..0] Define the hits threshold to trigger the interrupt generation.Alos, + * see the description of CACHE_MRM_CTRL_REG[MRM_IRQ_HITS_THRES_STATUS].Note + * When MRM_HITS_THRES = 0 (unrealistic value), no interrupt + * is generated. */ + } DCACHE_MRM_HITS_THRES_REG_b; + }; + + union + { + __IOM uint32_t DCACHE_MRM_EVICTS_THRES_REG; /*!< (@ 0x00000024) Dcache MRM (Miss Rate Monitor) EVICTS THRESHOLD + * Register */ + + struct + { + __IOM uint32_t MRM_EVICTS_THRES : 32; /*!< [31..0] Define the hits threshold to trigger the interrupt generation.Also, + * see the description of CACHE_MRM_CTRL_REG[MRM_IRQ_EVICTS_THRES_STATUS].No + * e: When MRM_EVICTS_THRES = 0 (unrealistic value), no interrupt + * is generated. */ + } DCACHE_MRM_EVICTS_THRES_REG_b; + }; +} DCACHE_Type; /*!< Size = 40 (0x28) */ + +/* =========================================================================================================================== */ +/* ================ DMA ================ */ +/* =========================================================================================================================== */ + +/** + * @brief DMA registers (DMA) + */ + +typedef struct /*!< (@ 0x40070700) DMA Structure */ +{ + union + { + __IOM uint32_t DMA0_A_START_REG; /*!< (@ 0x00000000) Start address A of DMA channel 0 */ + + struct + { + __IOM uint32_t DMA0_A_START : 32; /*!< [31..0] Source start address */ + } DMA0_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA0_B_START_REG; /*!< (@ 0x00000004) Start address B of DMA channel 0 */ + + struct + { + __IOM uint32_t DMA0_B_START : 32; /*!< [31..0] Destination start address */ + } DMA0_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA0_INT_REG; /*!< (@ 0x00000008) DMA receive interrupt register channel 0 */ + + struct + { + __IOM uint32_t DMA0_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA0_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA0_LEN_REG; /*!< (@ 0x0000000C) DMA receive length register channel 0 */ + + struct + { + __IOM uint32_t DMA0_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA0_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA0_CTRL_REG; /*!< (@ 0x00000010) Control register for the DMA channel 0 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers and 24/32-bit audio samples)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA0_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA0_IDX_REG; /*!< (@ 0x00000014) Index value of DMA channel 0 */ + + struct + { + __IM uint32_t DMA0_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA0_IDX_REG_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t DMA1_A_START_REG; /*!< (@ 0x00000020) Start address A of DMA channel 1 */ + + struct + { + __IOM uint32_t DMA1_A_START : 32; /*!< [31..0] Source start address */ + } DMA1_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA1_B_START_REG; /*!< (@ 0x00000024) Start address B of DMA channel 1 */ + + struct + { + __IOM uint32_t DMA1_B_START : 32; /*!< [31..0] Destination start address */ + } DMA1_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA1_INT_REG; /*!< (@ 0x00000028) DMA receive interrupt register channel 1 */ + + struct + { + __IOM uint32_t DMA1_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA1_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA1_LEN_REG; /*!< (@ 0x0000002C) DMA receive length register channel 1 */ + + struct + { + __IOM uint32_t DMA1_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA1_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA1_CTRL_REG; /*!< (@ 0x00000030) Control register for the DMA channel 1 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA1_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA1_IDX_REG; /*!< (@ 0x00000034) Index value of DMA channel 1 */ + + struct + { + __IM uint32_t DMA1_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA1_IDX_REG_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t DMA2_A_START_REG; /*!< (@ 0x00000040) Start address A of DMA channel 2 */ + + struct + { + __IOM uint32_t DMA2_A_START : 32; /*!< [31..0] Source start address */ + } DMA2_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA2_B_START_REG; /*!< (@ 0x00000044) Start address B of DMA channel 2 */ + + struct + { + __IOM uint32_t DMA2_B_START : 32; /*!< [31..0] Destination start address */ + } DMA2_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA2_INT_REG; /*!< (@ 0x00000048) DMA receive interrupt register channel 2 */ + + struct + { + __IOM uint32_t DMA2_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA2_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA2_LEN_REG; /*!< (@ 0x0000004C) DMA receive length register channel 2 */ + + struct + { + __IOM uint32_t DMA2_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA2_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA2_CTRL_REG; /*!< (@ 0x00000050) Control register for the DMA channel 2 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address0 = do not increment1 + * = increment according value of BW */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA2_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA2_IDX_REG; /*!< (@ 0x00000054) Index value of DMA channel 2 */ + + struct + { + __IM uint32_t DMA2_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA2_IDX_REG_b; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IOM uint32_t DMA3_A_START_REG; /*!< (@ 0x00000060) Start address A of DMA channel 3 */ + + struct + { + __IOM uint32_t DMA3_A_START : 32; /*!< [31..0] Source start address */ + } DMA3_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA3_B_START_REG; /*!< (@ 0x00000064) Start address B of DMA channel 3 */ + + struct + { + __IOM uint32_t DMA3_B_START : 32; /*!< [31..0] Destination start address */ + } DMA3_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA3_INT_REG; /*!< (@ 0x00000068) DMA receive interrupt register channel 3 */ + + struct + { + __IOM uint32_t DMA3_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA3_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA3_LEN_REG; /*!< (@ 0x0000006C) DMA receive length register channel 3 */ + + struct + { + __IOM uint32_t DMA3_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA3_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA3_CTRL_REG; /*!< (@ 0x00000070) Control register for the DMA channel 3 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA3_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA3_IDX_REG; /*!< (@ 0x00000074) Index value of DMA channel 3 */ + + struct + { + __IM uint32_t DMA3_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA3_IDX_REG_b; + }; + __IM uint32_t RESERVED3[2]; + + union + { + __IOM uint32_t DMA4_A_START_REG; /*!< (@ 0x00000080) Start address A of DMA channel 4 */ + + struct + { + __IOM uint32_t DMA4_A_START : 32; /*!< [31..0] Source start address */ + } DMA4_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA4_B_START_REG; /*!< (@ 0x00000084) Start address B of DMA channel 4 */ + + struct + { + __IOM uint32_t DMA4_B_START : 32; /*!< [31..0] Destination start address */ + } DMA4_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA4_INT_REG; /*!< (@ 0x00000088) DMA receive interrupt register channel 4 */ + + struct + { + __IOM uint32_t DMA4_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA4_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA4_LEN_REG; /*!< (@ 0x0000008C) DMA receive length register channel 4 */ + + struct + { + __IOM uint32_t DMA4_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA4_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA4_CTRL_REG; /*!< (@ 0x00000090) Control register for the DMA channel 4 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA4_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA4_IDX_REG; /*!< (@ 0x00000094) Index value of DMA channel 4 */ + + struct + { + __IM uint32_t DMA4_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA4_IDX_REG_b; + }; + __IM uint32_t RESERVED4[2]; + + union + { + __IOM uint32_t DMA5_A_START_REG; /*!< (@ 0x000000A0) Start address A of DMA channel 5 */ + + struct + { + __IOM uint32_t DMA5_A_START : 32; /*!< [31..0] Source start address */ + } DMA5_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA5_B_START_REG; /*!< (@ 0x000000A4) Start address B of DMA channel 5 */ + + struct + { + __IOM uint32_t DMA5_B_START : 32; /*!< [31..0] Destination start address */ + } DMA5_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA5_INT_REG; /*!< (@ 0x000000A8) DMA receive interrupt register channel 5 */ + + struct + { + __IOM uint32_t DMA5_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA5_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA5_LEN_REG; /*!< (@ 0x000000AC) DMA receive length register channel 5 */ + + struct + { + __IOM uint32_t DMA5_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA5_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA5_CTRL_REG; /*!< (@ 0x000000B0) Control register for the DMA channel 5 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA5_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA5_IDX_REG; /*!< (@ 0x000000B4) Index value of DMA channel 5 */ + + struct + { + __IM uint32_t DMA5_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA5_IDX_REG_b; + }; + __IM uint32_t RESERVED5[2]; + + union + { + __IOM uint32_t DMA6_A_START_REG; /*!< (@ 0x000000C0) Start address A of DMA channel 6 */ + + struct + { + __IOM uint32_t DMA6_A_START : 32; /*!< [31..0] Source start address */ + } DMA6_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA6_B_START_REG; /*!< (@ 0x000000C4) Start address B of DMA channel 6 */ + + struct + { + __IOM uint32_t DMA6_B_START : 32; /*!< [31..0] Destination start address */ + } DMA6_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA6_INT_REG; /*!< (@ 0x000000C8) DMA receive interrupt register channel 6 */ + + struct + { + __IOM uint32_t DMA6_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA6_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA6_LEN_REG; /*!< (@ 0x000000CC) DMA receive length register channel 6 */ + + struct + { + __IOM uint32_t DMA6_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA6_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA6_CTRL_REG; /*!< (@ 0x000000D0) Control register for the DMA channel 6 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA6_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA6_IDX_REG; /*!< (@ 0x000000D4) Index value of DMA channel 6 */ + + struct + { + __IM uint32_t DMA6_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA6_IDX_REG_b; + }; + __IM uint32_t RESERVED6[2]; + + union + { + __IOM uint32_t DMA7_A_START_REG; /*!< (@ 0x000000E0) Start address A of DMA channel 7 */ + + struct + { + __IOM uint32_t DMA7_A_START : 32; /*!< [31..0] Source start address */ + } DMA7_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA7_B_START_REG; /*!< (@ 0x000000E4) Start address B of DMA channel 7 */ + + struct + { + __IOM uint32_t DMA7_B_START : 32; /*!< [31..0] Destination start address */ + } DMA7_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA7_INT_REG; /*!< (@ 0x000000E8) DMA receive interrupt register channel 7 */ + + struct + { + __IOM uint32_t DMA7_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA7_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA7_LEN_REG; /*!< (@ 0x000000EC) DMA receive length register channel 7 */ + + struct + { + __IOM uint32_t DMA7_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA7_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA7_CTRL_REG; /*!< (@ 0x000000F0) Control register for the DMA channel 7 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA7_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA7_IDX_REG; /*!< (@ 0x000000F4) Index value of DMA channel 7 */ + + struct + { + __IM uint32_t DMA7_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA7_IDX_REG_b; + }; + __IM uint32_t RESERVED7[2]; + + union + { + __IOM uint32_t DMA8_A_START_REG; /*!< (@ 0x00000100) Start address A of DMA channel 8 */ + + struct + { + __IOM uint32_t DMA8_A_START : 32; /*!< [31..0] Source start address */ + } DMA8_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA8_B_START_REG; /*!< (@ 0x00000104) Start address B of DMA channel 8 */ + + struct + { + __IOM uint32_t DMA8_B_START : 32; /*!< [31..0] Destination start address */ + } DMA8_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA8_INT_REG; /*!< (@ 0x00000108) DMA receive interrupt register channel 8 */ + + struct + { + __IOM uint32_t DMA8_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA8_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA8_LEN_REG; /*!< (@ 0x0000010C) DMA receive length register channel 8 */ + + struct + { + __IOM uint32_t DMA8_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA8_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA8_CTRL_REG; /*!< (@ 0x00000110) Control register for the DMA channel 8 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA8_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA8_IDX_REG; /*!< (@ 0x00000114) Index value of DMA channel 8 */ + + struct + { + __IM uint32_t DMA8_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA8_IDX_REG_b; + }; + __IM uint32_t RESERVED8[2]; + + union + { + __IOM uint32_t DMA9_A_START_REG; /*!< (@ 0x00000120) Start address A of DMA channel 9 */ + + struct + { + __IOM uint32_t DMA9_A_START : 32; /*!< [31..0] Source start address */ + } DMA9_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA9_B_START_REG; /*!< (@ 0x00000124) Start address B of DMA channel 9 */ + + struct + { + __IOM uint32_t DMA9_B_START : 32; /*!< [31..0] Destination start address */ + } DMA9_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA9_INT_REG; /*!< (@ 0x00000128) DMA receive interrupt register channel 9 */ + + struct + { + __IOM uint32_t DMA9_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA9_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA9_LEN_REG; /*!< (@ 0x0000012C) DMA receive length register channel 9 */ + + struct + { + __IOM uint32_t DMA9_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA9_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA9_CTRL_REG; /*!< (@ 0x00000130) Control register for the DMA channel 9 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA9_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA9_IDX_REG; /*!< (@ 0x00000134) Index value of DMA channel 9 */ + + struct + { + __IM uint32_t DMA9_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA9_IDX_REG_b; + }; + __IM uint32_t RESERVED9[2]; + + union + { + __IOM uint32_t DMA10_A_START_REG; /*!< (@ 0x00000140) Start address A of DMA channel 10 */ + + struct + { + __IOM uint32_t DMA10_A_START : 32; /*!< [31..0] Source start address */ + } DMA10_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA10_B_START_REG; /*!< (@ 0x00000144) Start address B of DMA channel 10 */ + + struct + { + __IOM uint32_t DMA10_B_START : 32; /*!< [31..0] Destination start address */ + } DMA10_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA10_INT_REG; /*!< (@ 0x00000148) DMA receive interrupt register channel 10 */ + + struct + { + __IOM uint32_t DMA10_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA10_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA10_LEN_REG; /*!< (@ 0x0000014C) DMA receive length register channel 10 */ + + struct + { + __IOM uint32_t DMA10_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA10_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA10_CTRL_REG; /*!< (@ 0x00000150) Control register for the DMA channel 10 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA10_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA10_IDX_REG; /*!< (@ 0x00000154) Index value of DMA channel 10 */ + + struct + { + __IM uint32_t DMA10_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA10_IDX_REG_b; + }; + __IM uint32_t RESERVED10[2]; + + union + { + __IOM uint32_t DMA11_A_START_REG; /*!< (@ 0x00000160) Start address A of DMA channel 11 */ + + struct + { + __IOM uint32_t DMA11_A_START : 32; /*!< [31..0] Source start address */ + } DMA11_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA11_B_START_REG; /*!< (@ 0x00000164) Start address B of DMA channel 11 */ + + struct + { + __IOM uint32_t DMA11_B_START : 32; /*!< [31..0] Destination start address */ + } DMA11_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA11_INT_REG; /*!< (@ 0x00000168) DMA receive interrupt register channel 11 */ + + struct + { + __IOM uint32_t DMA11_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA11_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA11_LEN_REG; /*!< (@ 0x0000016C) DMA receive length register channel 11 */ + + struct + { + __IOM uint32_t DMA11_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA11_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA11_CTRL_REG; /*!< (@ 0x00000170) Control register for the DMA channel 11 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA11_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA11_IDX_REG; /*!< (@ 0x00000174) Index value of DMA channel 11 */ + + struct + { + __IM uint32_t DMA11_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA11_IDX_REG_b; + }; + __IM uint32_t RESERVED11[2]; + + union + { + __IOM uint32_t DMA12_A_START_REG; /*!< (@ 0x00000180) Start address A of DMA channel 12 */ + + struct + { + __IOM uint32_t DMA12_A_START : 32; /*!< [31..0] Source start address */ + } DMA12_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA12_B_START_REG; /*!< (@ 0x00000184) Start address B of DMA channel 12 */ + + struct + { + __IOM uint32_t DMA12_B_START : 32; /*!< [31..0] Destination start address */ + } DMA12_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA12_INT_REG; /*!< (@ 0x00000188) DMA receive interrupt register channel 12 */ + + struct + { + __IOM uint32_t DMA12_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA12_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA12_LEN_REG; /*!< (@ 0x0000018C) DMA receive length register channel 12 */ + + struct + { + __IOM uint32_t DMA12_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA12_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA12_CTRL_REG; /*!< (@ 0x00000190) Control register for the DMA channel 12 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA12_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA12_IDX_REG; /*!< (@ 0x00000194) Index value of DMA channel 12 */ + + struct + { + __IM uint32_t DMA12_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA12_IDX_REG_b; + }; + __IM uint32_t RESERVED12[2]; + + union + { + __IOM uint32_t DMA13_A_START_REG; /*!< (@ 0x000001A0) Start address A of DMA channel 13 */ + + struct + { + __IOM uint32_t DMA13_A_START : 32; /*!< [31..0] Source start address */ + } DMA13_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA13_B_START_REG; /*!< (@ 0x000001A4) Start address B of DMA channel 13 */ + + struct + { + __IOM uint32_t DMA13_B_START : 32; /*!< [31..0] Destination start address */ + } DMA13_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA13_INT_REG; /*!< (@ 0x000001A8) DMA receive interrupt register channel 13 */ + + struct + { + __IOM uint32_t DMA13_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA13_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA13_LEN_REG; /*!< (@ 0x000001AC) DMA receive length register channel 13 */ + + struct + { + __IOM uint32_t DMA13_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA13_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA13_CTRL_REG; /*!< (@ 0x000001B0) Control register for the DMA channel 13 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA13_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA13_IDX_REG; /*!< (@ 0x000001B4) Index value of DMA channel 13 */ + + struct + { + __IM uint32_t DMA13_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA13_IDX_REG_b; + }; + __IM uint32_t RESERVED13[2]; + + union + { + __IOM uint32_t DMA14_A_START_REG; /*!< (@ 0x000001C0) Start address A of DMA channel 14 */ + + struct + { + __IOM uint32_t DMA14_A_START : 32; /*!< [31..0] Source start address */ + } DMA14_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA14_B_START_REG; /*!< (@ 0x000001C4) Start address B of DMA channel 14 */ + + struct + { + __IOM uint32_t DMA14_B_START : 32; /*!< [31..0] Destination start address */ + } DMA14_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA14_INT_REG; /*!< (@ 0x000001C8) DMA receive interrupt register channel 14 */ + + struct + { + __IOM uint32_t DMA14_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA14_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA14_LEN_REG; /*!< (@ 0x000001CC) DMA receive length register channel 14 */ + + struct + { + __IOM uint32_t DMA14_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA14_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA14_CTRL_REG; /*!< (@ 0x000001D0) Control register for the DMA channel 14 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA14_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA14_IDX_REG; /*!< (@ 0x000001D4) Index value of DMA channel 14 */ + + struct + { + __IM uint32_t DMA14_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA14_IDX_REG_b; + }; + __IM uint32_t RESERVED14[2]; + + union + { + __IOM uint32_t DMA15_A_START_REG; /*!< (@ 0x000001E0) Start address A of DMA channel 15 */ + + struct + { + __IOM uint32_t DMA15_A_START : 32; /*!< [31..0] Source start address */ + } DMA15_A_START_REG_b; + }; + + union + { + __IOM uint32_t DMA15_B_START_REG; /*!< (@ 0x000001E4) Start address B of DMA channel 15 */ + + struct + { + __IOM uint32_t DMA15_B_START : 32; /*!< [31..0] Destination start address */ + } DMA15_B_START_REG_b; + }; + + union + { + __IOM uint32_t DMA15_INT_REG; /*!< (@ 0x000001E8) DMA receive interrupt register channel 15 */ + + struct + { + __IOM uint32_t DMA15_INT : 16; /*!< [15..0] Number of transfers until an interrupt is generated. + * The interrupt is generated after a transfer, if DMAx_INT_REG + * is equal to DMAx_IDX_REG and before DMAx_IDX_REG is incremented. + * The bit-field DMA_IRQ_ENABLEx of DMA_INT_MASK_REG must + * be set to '1' to let the controller generate the interrupt. */ + uint32_t : 16; + } DMA15_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA15_LEN_REG; /*!< (@ 0x000001EC) DMA receive length register channel 15 */ + + struct + { + __IOM uint32_t DMA15_LEN : 16; /*!< [15..0] DMA channel's transfer length. DMAx_LEN of value 0, + * 1, 2, ... results into an actual transfer length of 1, + * 2, 3, ... */ + uint32_t : 16; + } DMA15_LEN_REG_b; + }; + + union + { + __IOM uint32_t DMA15_CTRL_REG; /*!< (@ 0x000001F0) Control register for the DMA channel 15 */ + + struct + { + __IOM uint32_t DMA_ON : 1; /*!< [0..0] 0 = DMA channel is off, clocks are disabled1 = DMA channel + * is enabled. This bit will be automatically cleared after + * the completion of a transfer, if circular mode is not enabled. + * In circular mode, this bit stays set.Note: If DMA_ON is + * disabled by SW while the DMA channel is active, it cannot + * be enabled again until the channel has completed the last + * on-going read-write cycle and has stopped. Thus, the SW + * has to check that the reading of DMAx_CTRL_REG. DMA_ON + * returns 0, before setting again the spe */ + __IOM uint32_t BW : 2; /*!< [2..1] Bus transfer width:00 = 1 Byte (suggested for peripherals + * like UART and 8-bit SPI)01 = 2 Bytes (suggested for peripherals + * like I2C and 16-bit SPI)10 = 4 Bytes (suggested for Memory-to-Memory + * transfers)11 = Reserved */ + __IOM uint32_t DREQ_MODE : 1; /*!< [3..3] 0 = DMA channel starts immediately1 = DMA channel must + * be triggered by peripheral DMA request (see also the description + * of DMA_REQ_MUX_REG) */ + __IOM uint32_t BINC : 1; /*!< [4..4] Enable increment of destination address.0 = do not increment + * (destination address stays the same during the transfer)1 + * = increment according to the value of BW bit-field (by + * 1, when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t AINC : 1; /*!< [5..5] Enable increment of source address.0 = do not increment + * (source address stays the same during the transfer)1 = + * increment according to the value of BW bit-field (by 1, + * when BW="00" ; by 2, when BW="01" ; by 4, when BW="10") */ + __IOM uint32_t CIRCULAR : 1; /*!< [6..6] 0 = Normal mode. The DMA channel stops after having completed + * the transfer of length determined by DMAx_LEN_REG. DMA_ON + * automatically deasserts when the transfer is completed.1 + * = Circular mode (applicable only if DREQ_MODE = '1'). In + * this mode, DMA_ON never deasserts, as the DMA channel automatically + * resets DMAx_IDX_REG and starts a new transfer. */ + __IOM uint32_t DMA_PRIO : 3; /*!< [9..7] The priority level determines which DMA channel will + * be granted access for transferring data, in case more than + * one channels are active and request the bus at the same + * time. The greater the value, the higher the priority. In + * specific:000 = lowest priority111 = highest priorityIf + * different channels with equal priority level values request + * the bus at the same time, an inherent priority mechanism + * is applied. According to this mechanism, if, for example, + * both the DMA0 and DMA1 channels have the s */ + __IOM uint32_t DMA_IDLE : 1; /*!< [10..10] 0 = Blocking mode, the DMA performs a fast back-to-back + * copy, disabling bus access for any bus master with lower + * priority.1 = Interrupting mode, the DMA inserts a wait + * cycle after each store allowing the CPU to steal cycles + * or cache to perform a burst read. If DREQ_MODE='1', DMA_IDLE + * is don't care. */ + __IOM uint32_t DMA_INIT : 1; /*!< [11..11] 0 = DMA performs copy A1 to B1, A2 to B2, etc ...1 + * = DMA performs copy of A1 to B1, B2, etc ...This feature + * is useful for memory initialization to any value. Thus, + * BINC must be set to '1', while AINC is don't care, as only + * one fetch from A is done. This process cannot be interrupted + * by other DMA channels. It is also noted that DMA_INIT should + * not be used when DREQ_MODE='1'. */ + __IOM uint32_t REQ_SENSE : 1; /*!< [12..12] 0 = DMA operates with level-sensitive peripheral requests + * (default)1 = DMA operates with (positive) edge-sensitive + * peripheral requests */ + __IOM uint32_t BURST_MODE : 2; /*!< [14..13] Enables the DMA read/write bursts, according to the + * following configuration:00 = Bursts are disabled01 = Bursts + * of 4 are enabled10 = Bursts of 8 are enabled11 = Reserved */ + __IOM uint32_t BUS_ERROR_DETECT : 1; /*!< [15..15] 0 = Ignores bus error response from the AHB bus, so + * DMA continues normally.1 = Detects the bus response and + * tracks any bus error may occur during the transfer. If + * a bus error is detected, the channel completes the current + * read-write DMA cycle (either in burst or single transfers + * mode) and then closes the transfer, de-asserting DMA_ON + * bit automatically.It is noted that the respective bus error + * detection status bit of DMA_INT_STATUS_REG is automatically + * cleared as soon as the channel is switched-on */ + __IOM uint32_t ADDR_INC : 3; /*!< [18..16] Address increment definition for the peripherals (BW + * 32bit only)000 : 4byte001 : 8byte010 : 12byte011 : 16byte100 + * : 20byte101 : 24byte110 : 28byte111 : 32byte */ + uint32_t : 13; + } DMA15_CTRL_REG_b; + }; + + union + { + __IOM uint32_t DMA15_IDX_REG; /*!< (@ 0x000001F4) Index value of DMA channel 15 */ + + struct + { + __IM uint32_t DMA15_IDX : 16; /*!< [15..0] This (read-only) register determines the data items + * already transferred by the DMA channel. Hence, if its value + * is 1, then the DMA channel has already copied one data + * item and it is currently performing the next copy. If its + * value is 2, then two items have already been copied and + * so on.When the transfer is completed (so when DMAx_CTRL_REG. + * DMA_ON has been cleared) and DMAx_CTRL_REG. CIRCULAR is + * not set, the register keeps its (last) value (which should + * be equal to DMAx_LEN_REG) and it is automaticall */ + uint32_t : 16; + } DMA15_IDX_REG_b; + }; + __IM uint32_t RESERVED15[2]; + + union + { + __IOM uint32_t DMA_REQ_MUX_REG; /*!< (@ 0x00000200) DMA channel assignments (Channel 0~3) */ + + struct + { + __IOM uint32_t DMA0_SEL : 5; /*!< [4..0] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 0.0x00: SPI_RX0x01: + * SPI_TX0x02: SPI2_RX0x03: SPI2_TX0x04: UART_RX0x05: UART_TX0x06: + * UART2_RX0x07: UART2_TX0x08: UART3RX0x09: UART3_TX0x0A: + * I2C_RX0x0B: I2C_TX0x0C: I2C2_RX0x0D: I2C2_TX0x0E: AUXADC<0>0x0F: + * AUXADC<1>0x10: AUXADC<2>0x11: AUXADC<3>0x12: SRC_IN0x13: + * SRC_OUT0x14: DAI_TX0x15: DAI_RXNote: If any of t */ + uint32_t : 3; + __IOM uint32_t DMA1_SEL : 5; /*!< [12..8] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 1.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA2_SEL : 5; /*!< [20..16] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 2.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA3_SEL : 5; /*!< [28..24] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 3See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + } DMA_REQ_MUX_REG_b; + }; + + union + { + __IOM uint32_t DMA_REQ_MUX2_REG; /*!< (@ 0x00000204) DMA channel assignments (Channel 4~7) */ + + struct + { + __IOM uint32_t DMA4_SEL : 5; /*!< [4..0] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 4.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA5_SEL : 5; /*!< [12..8] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 5.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA6_SEL : 5; /*!< [20..16] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 6.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA7_SEL : 5; /*!< [28..24] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 7.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + } DMA_REQ_MUX2_REG_b; + }; + + union + { + __IOM uint32_t DMA_REQ_MUX3_REG; /*!< (@ 0x00000208) DMA channel assignments (Channel 8~11) */ + + struct + { + __IOM uint32_t DMA8_SEL : 5; /*!< [4..0] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 8.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA9_SEL : 5; /*!< [12..8] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 9.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA10_SEL : 5; /*!< [20..16] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 10.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA11_SEL : 5; /*!< [28..24] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 11.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + } DMA_REQ_MUX3_REG_b; + }; + + union + { + __IOM uint32_t DMA_REQ_MUX4_REG; /*!< (@ 0x0000020C) DMA channel assignments (Channel 12~15) */ + + struct + { + __IOM uint32_t DMA12_SEL : 5; /*!< [4..0] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 12.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA13_SEL : 5; /*!< [12..8] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 13.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA14_SEL : 5; /*!< [20..16] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 14.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + __IOM uint32_t DMA15_SEL : 5; /*!< [28..24] Select which peripheral is mapped on the DMA channel.Here, + * the DMA request is mapped on channel 15.See DMA0_SEL for + * the peripherals' mapping. */ + uint32_t : 3; + } DMA_REQ_MUX4_REG_b; + }; + + union + { + __IOM uint32_t DMA_INT_STATUS_REG; /*!< (@ 0x00000210) DMA interrupt status register */ + + struct + { + __IM uint32_t DMA_IRQ_CH0 : 1; /*!< [0..0] 0 = IRQ on channel 0 is not set1 = IRQ on channel 0 is + * set */ + __IM uint32_t DMA_IRQ_CH1 : 1; /*!< [1..1] 0 = IRQ on channel 1 is not set1 = IRQ on channel 1 is + * set */ + __IM uint32_t DMA_IRQ_CH2 : 1; /*!< [2..2] 0 = IRQ on channel 2 is not set1 = IRQ on channel 2 is + * set */ + __IM uint32_t DMA_IRQ_CH3 : 1; /*!< [3..3] 0 = IRQ on channel 3 is not set1 = IRQ on channel 3 is + * set */ + __IM uint32_t DMA_IRQ_CH4 : 1; /*!< [4..4] 0 = IRQ on channel 4 is not set1 = IRQ on channel 4 is + * set */ + __IM uint32_t DMA_IRQ_CH5 : 1; /*!< [5..5] 0 = IRQ on channel 5 is not set1 = IRQ on channel 5 is + * set */ + __IM uint32_t DMA_IRQ_CH6 : 1; /*!< [6..6] 0 = IRQ on channel 6 is not set1 = IRQ on channel 6 is + * set */ + __IM uint32_t DMA_IRQ_CH7 : 1; /*!< [7..7] 0 = IRQ on channel 7 is not set1 = IRQ on channel 7 is + * set */ + __IM uint32_t DMA_IRQ_CH8 : 1; /*!< [8..8] 0 = IRQ on channel 8 is not set1 = IRQ on channel 8 is + * set */ + __IM uint32_t DMA_IRQ_CH9 : 1; /*!< [9..9] 0 = IRQ on channel 9 is not set1 = IRQ on channel 9 is + * set */ + __IM uint32_t DMA_IRQ_CH10 : 1; /*!< [10..10] 0 = IRQ on channel 10 is not set1 = IRQ on channel + * 10 is set */ + __IM uint32_t DMA_IRQ_CH11 : 1; /*!< [11..11] 0 = IRQ on channel 11 is not set1 = IRQ on channel + * 11 is set */ + __IM uint32_t DMA_IRQ_CH12 : 1; /*!< [12..12] 0 = IRQ on channel 12 is not set1 = IRQ on channel + * 12 is set */ + __IM uint32_t DMA_IRQ_CH13 : 1; /*!< [13..13] 0 = IRQ on channel 13 is not set1 = IRQ on channel + * 13 is set */ + __IM uint32_t DMA_IRQ_CH14 : 1; /*!< [14..14] 0 = IRQ on channel 14 is not set1 = IRQ on channel + * 14 is set */ + __IM uint32_t DMA_IRQ_CH15 : 1; /*!< [15..15] 0 = IRQ on channel 15 is not set1 = IRQ on channel + * 15 is set */ + __IM uint32_t DMA_BUS_ERR0 : 1; /*!< [16..16] 0 = No bus error response is detected for channel 01 + * = Bus error response detected for channel 0NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR1 : 1; /*!< [17..17] 0 = No bus error response is detected for channel 11 + * = Bus error response detected for channel 1NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR2 : 1; /*!< [18..18] 0 = No bus error response is detected for channel 21 + * = Bus error response detected for channel 2NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR3 : 1; /*!< [19..19] 0 = No bus error response is detected for channel 31 + * = Bus error response detected for channel 3NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR4 : 1; /*!< [20..20] 0 = No bus error response is detected for channel 41 + * = Bus error response detected for channel 4NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR5 : 1; /*!< [21..21] 0 = No bus error response is detected for channel 51 + * = Bus error response detected for channel 5NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR6 : 1; /*!< [22..22] 0 = No bus error response is detected for channel 61 + * = Bus error response detected for channel 6NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR7 : 1; /*!< [23..23] 0 = No bus error response is detected for channel 71 + * = Bus error response detected for channel 7NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR8 : 1; /*!< [24..24] 0 = No bus error response is detected for channel 81 + * = Bus error response detected for channel 8NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR9 : 1; /*!< [25..25] 0 = No bus error response is detected for channel 91 + * = Bus error response detected for channel 9NOTE: This bit-field + * is auto-clear and it is initialized to '0' as soon as a + * new transfer is started. */ + __IM uint32_t DMA_BUS_ERR10 : 1; /*!< [26..26] 0 = No bus error response is detected for channel 101 + * = Bus error response detected for channel 10NOTE: This + * bit-field is auto-clear and it is initialized to '0' as + * soon as a new transfer is started. */ + __IM uint32_t DMA_BUS_ERR11 : 1; /*!< [27..27] 0 = No bus error response is detected for channel 111 + * = Bus error response detected for channel 11NOTE: This + * bit-field is auto-clear and it is initialized to '0' as + * soon as a new transfer is started. */ + __IM uint32_t DMA_BUS_ERR12 : 1; /*!< [28..28] 0 = No bus error response is detected for channel 121 + * = Bus error response detected for channel 12NOTE: This + * bit-field is auto-clear and it is initialized to '0' as + * soon as a new transfer is started. */ + __IM uint32_t DMA_BUS_ERR13 : 1; /*!< [29..29] 0 = No bus error response is detected for channel 131 + * = Bus error response detected for channel 13NOTE: This + * bit-field is auto-clear and it is initialized to '0' as + * soon as a new transfer is started. */ + __IM uint32_t DMA_BUS_ERR14 : 1; /*!< [30..30] 0 = No bus error response is detected for channel 141 + * = Bus error response detected for channel 14NOTE: This + * bit-field is auto-clear and it is initialized to '0' as + * soon as a new transfer is started. */ + __IM uint32_t DMA_BUS_ERR15 : 1; /*!< [31..31] 0 = No bus error response is detected for channel 151 + * = Bus error response detected for channel 15NOTE: This + * bit-field is auto-clear and it is initialized to '0' as + * soon as a new transfer is started. */ + } DMA_INT_STATUS_REG_b; + }; + + union + { + __IOM uint32_t DMA_CLEAR_INT_REG; /*!< (@ 0x00000214) DMA clear interrupt register */ + + struct + { + __OM uint32_t DMA_RST_IRQ_CH0 : 1; /*!< [0..0] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 0 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH1 : 1; /*!< [1..1] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 1 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH2 : 1; /*!< [2..2] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 2 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH3 : 1; /*!< [3..3] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 3 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH4 : 1; /*!< [4..4] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 4 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH5 : 1; /*!< [5..5] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 5 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH6 : 1; /*!< [6..6] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 6 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH7 : 1; /*!< [7..7] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 7 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH8 : 1; /*!< [8..8] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 8 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH9 : 1; /*!< [9..9] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 9 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH10 : 1; /*!< [10..10] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 10 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH11 : 1; /*!< [11..11] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 11 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH12 : 1; /*!< [12..12] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 12 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH13 : 1; /*!< [13..13] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 13 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH14 : 1; /*!< [14..14] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 14 ; writing a 0 will have no effect */ + __OM uint32_t DMA_RST_IRQ_CH15 : 1; /*!< [15..15] Writing a 1 will reset the status bit of DMA_INT_STATUS_REG + * for channel 15 ; writing a 0 will have no effect */ + uint32_t : 16; + } DMA_CLEAR_INT_REG_b; + }; + + union + { + __IOM uint32_t DMA_INT_MASK_REG; /*!< (@ 0x00000218) DMA Interrupt mask register */ + + struct + { + __IOM uint32_t DMA_IRQ_ENABLE0 : 1; /*!< [0..0] 0 = disable interrupts on channel 01 = enable interrupts + * on channel 0 */ + __IOM uint32_t DMA_IRQ_ENABLE1 : 1; /*!< [1..1] 0 = disable interrupts on channel 11 = enable interrupts + * on channel 1 */ + __IOM uint32_t DMA_IRQ_ENABLE2 : 1; /*!< [2..2] 0 = disable interrupts on channel 21 = enable interrupts + * on channel 2 */ + __IOM uint32_t DMA_IRQ_ENABLE3 : 1; /*!< [3..3] 0 = disable interrupts on channel 31 = enable interrupts + * on channel 3 */ + __IOM uint32_t DMA_IRQ_ENABLE4 : 1; /*!< [4..4] 0 = disable interrupts on channel 41 = enable interrupts + * on channel 4 */ + __IOM uint32_t DMA_IRQ_ENABLE5 : 1; /*!< [5..5] 0 = disable interrupts on channel 51 = enable interrupts + * on channel 5 */ + __IOM uint32_t DMA_IRQ_ENABLE6 : 1; /*!< [6..6] 0 = disable interrupts on channel 61 = enable interrupts + * on channel 6 */ + __IOM uint32_t DMA_IRQ_ENABLE7 : 1; /*!< [7..7] 0 = disable interrupts on channel 71 = enable interrupts + * on channel 7 */ + __IOM uint32_t DMA_IRQ_ENABLE8 : 1; /*!< [8..8] 0 = disable interrupts on channel 81 = enable interrupts + * on channel 8 */ + __IOM uint32_t DMA_IRQ_ENABLE9 : 1; /*!< [9..9] 0 = disable interrupts on channel 91 = enable interrupts + * on channel 9 */ + __IOM uint32_t DMA_IRQ_ENABLE10 : 1; /*!< [10..10] 0 = disable interrupts on channel 101 = enable interrupts + * on channel 10 */ + __IOM uint32_t DMA_IRQ_ENABLE11 : 1; /*!< [11..11] 0 = disable interrupts on channel 111 = enable interrupts + * on channel 11 */ + __IOM uint32_t DMA_IRQ_ENABLE12 : 1; /*!< [12..12] 0 = disable interrupts on channel 121 = enable interrupts + * on channel 12 */ + __IOM uint32_t DMA_IRQ_ENABLE13 : 1; /*!< [13..13] 0 = disable interrupts on channel 131 = enable interrupts + * on channel 13 */ + __IOM uint32_t DMA_IRQ_ENABLE14 : 1; /*!< [14..14] 0 = disable interrupts on channel 141 = enable interrupts + * on channel 14 */ + __IOM uint32_t DMA_IRQ_ENABLE15 : 1; /*!< [15..15] 0 = disable interrupts on channel 151 = enable interrupts + * on channel 15 */ + uint32_t : 16; + } DMA_INT_MASK_REG_b; + }; +} DMA_Type; /*!< Size = 540 (0x21c) */ + +/* =========================================================================================================================== */ +/* ================ FPLL ================ */ +/* =========================================================================================================================== */ + +/** + * @brief FPLL registers (FPLL) + */ + +typedef struct /*!< (@ 0x400C0300) FPLL Structure */ +{ + union + { + __IOM uint32_t PLLD_FBDIV_REG; /*!< (@ 0x00000000) FPLL feedback divider value register */ + + struct + { + __IOM uint32_t FBDIV : 20; /*!< [19..0] Feedback divider value. The value forms a 20-bit fixed + * point PLL multiplier in 7.13 format. */ + uint32_t : 12; + } PLLD_FBDIV_REG_b; + }; + + union + { + __IOM uint32_t PLLD_CTRL_REG; /*!< (@ 0x00000004) FPLL control register */ + + struct + { + uint32_t : 1; + __IOM uint32_t CLKOUT_EN : 1; /*!< [1..1] PLL Bypass clock (XTAL40M) output enable0: FPLL Bypass + * clock disable1: FPLL Bypass clock enable */ + __IOM uint32_t BYPASS_SEL : 1; /*!< [2..2] This bit has become don't care.For XTAL bypass mode, + * set CLKOUT_EN=0. Set FPLL_EN=0, VCO_EN=0 for power saving, + * see datasheet text */ + __IOM uint32_t PFD_CP_EN : 1; /*!< [3..3] Enable PLL charge pump and PFD0: Disable PFD and charge + * pump1: Enable PFD and charge pump */ + __IOM uint32_t VCO_EN : 1; /*!< [4..4] Enables the PLL VCO0: FPLL VCO disable1: FPLL VCO enable */ + __IOM uint32_t FPLL_EN : 1; /*!< [5..5] FPLL enable0: Disable1: Enable */ + uint32_t : 26; + } PLLD_CTRL_REG_b; + }; + + union + { + __IOM uint32_t PLLD_CONFIG_REG; /*!< (@ 0x00000008) FPLL config register */ + + struct + { + __IOM uint32_t BIAS_HOLD : 1; /*!< [0..0] Controls a leaky pass gate to perform sample and hold + * for noise filtering in VCO0: bias current unfiltered1: + * bias voltage sampled */ + uint32_t : 4; + __IOM uint32_t INDIV : 3; /*!< [7..5] Frequency range of PLL reference clock (MHz)0: 2.5 to + * 51: 5 to 102: Reserved3: 10 to 204: Reserved5: 20 to 406: + * Reserved7: 40 to 54 */ + __IOM uint32_t OUTDIV : 2; /*!< [9..8] Output divider Selector0: gnd1: VCO/22: VCO/43: VCO/8 */ + uint32_t : 22; + } PLLD_CONFIG_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t PLLD_STATUS_REG; /*!< (@ 0x00000010) FPLL status register */ + + struct + { + __IM uint32_t STA_RUNNING_AT_XTAL40M : 1; /*!< [0..0] PLL XTAL40M active actual status0: Bypass mode is not + * active1: Bypass mode is active, system clock is supplied + * by oscillator clock */ + __IM uint32_t STA_RUNNING_AT_FPLL : 1; /*!< [1..1] PLL FPLL active actual status0: PLL is not active1: PLL + * is active */ + __IM uint32_t STA_PLL_LOCK : 1; /*!< [2..2] PLL lock actual status0: PLL not in lock1: PLL acquired + * lock */ + uint32_t : 29; + } PLLD_STATUS_REG_b; + }; + + union + { + __IOM uint32_t PLLD_IRQ_REG; /*!< (@ 0x00000014) FPLL IRQ register */ + + struct + { + __IM uint32_t IRQ_PLL_LOST_LOCK : 1; /*!< [0..0] IInterrupt when PLL lost lock to reference clock.0:PLL + * not in lost lock1:PLL lost lock */ + __IM uint32_t IRQ_PLL_LOCK : 1; /*!< [1..1] Interrupt when PLL locked to reference clock0: PLL not + * in lock1: PLL acquired lock */ + uint32_t : 30; + } PLLD_IRQ_REG_b; + }; + + union + { + __IOM uint32_t PLLD_IRQ_CLR_REG; /*!< (@ 0x00000018) FPLL IRQ clear register */ + + struct + { + __IOM uint32_t CLR_IRQ_PLL_LOST_LOCK : 1; /*!< [0..0] 0: -1: Clear IRQ_PLL_LOST_LOCK */ + __IOM uint32_t CLR_IRQ_PLL_LOCK : 1; /*!< [1..1] 0: -1: Clear IRQ_PLL_LOCK */ + uint32_t : 30; + } PLLD_IRQ_CLR_REG_b; + }; + + union + { + __IOM uint32_t PLLD_IRQ_MASK_REG; /*!< (@ 0x0000001C) FPLL IRQ mask register */ + + struct + { + __IOM uint32_t MIRQ_PLL_LOST_LOCK : 1; /*!< [0..0] Mask for PLL lost lock interrupt0: EVT_PLL_LOST_LOCK + * interrupt not masked1: EVT_PLL_LOST_LOCK interrupt masked */ + __IOM uint32_t MIRQ_PLL_LOCK : 1; /*!< [1..1] Mask for PLL lock interrupt0: EVT_PLL_LOCK interrupt + * not masked1: EVT_PLL_LOCK interrupt masked */ + uint32_t : 30; + } PLLD_IRQ_MASK_REG_b; + }; + + union + { + __IOM uint32_t PLLD_TEST_REG; /*!< (@ 0x00000020) PLLD_TEST_REG */ + + struct + { + __IOM uint32_t SDM_ENABLE : 1; /*!< [0..0] SDM_ENABLE */ + __IOM uint32_t SDM_DITHER : 2; /*!< [2..1] SDM_DITHER */ + __IOM uint32_t ANA_TEST_SEL : 1; /*!< [3..3] ANA_TEST_SEL */ + __IOM uint32_t CP_BIAS : 1; /*!< [4..4] CP_BIAS */ + __IOM uint32_t CAL_EN : 1; /*!< [5..5] CAL_EN */ + uint32_t : 26; + } PLLD_TEST_REG_b; + }; + + union + { + __IOM uint32_t PLLD_VCO_TRIM_REG; /*!< (@ 0x00000024) PLLD_VCO_TRIM_REG */ + + struct + { + __IOM uint32_t CAL_VCO : 4; /*!< [3..0] CAL_VCO */ + uint32_t : 28; + } PLLD_VCO_TRIM_REG_b; + }; +} FPLL_Type; /*!< Size = 40 (0x28) */ + +/* =========================================================================================================================== */ +/* ================ GPIO ================ */ +/* =========================================================================================================================== */ + +/** + * @brief GPIO registers (GPIO) + */ + +typedef struct /*!< (@ 0x400B0000) GPIO Structure */ +{ + union + { + __IOM uint32_t P0_DATA_REG; /*!< (@ 0x00000000) P0 Data input / output Register */ + + struct + { + __IOM uint32_t P0_DATA : 14; /*!< [13..0] Set P0 output register when written; Returns the value + * of P0 port when read */ + uint32_t : 18; + } P0_DATA_REG_b; + }; + + union + { + __IOM uint32_t P1_DATA_REG; /*!< (@ 0x00000004) P1 Data input / output Register */ + + struct + { + __IOM uint32_t P1_DATA : 16; /*!< [15..0] Set P1 output register when written; Returns the value + * of P1 port when read */ + uint32_t : 16; + } P1_DATA_REG_b; + }; + + union + { + __IOM uint32_t SW_DATA_REG; /*!< (@ 0x00000008) SW Data input / output Register */ + + struct + { + __IOM uint32_t SWD_DATA : 2; /*!< [1..0] Set SWD_[y] output register when written; Returns the + * value of SWD_[y] port when read */ + uint32_t : 30; + } SW_DATA_REG_b; + }; + + union + { + __IOM uint32_t P0_SET_DATA_REG; /*!< (@ 0x0000000C) P0 Set port pins Register */ + + struct + { + __OM uint32_t P0_SET : 14; /*!< [13..0] Writing a 1 to P0[y] sets P0[y] to 1. Writing 0 is discarded;Reading + * returns 0 */ + uint32_t : 18; + } P0_SET_DATA_REG_b; + }; + + union + { + __IOM uint32_t P1_SET_DATA_REG; /*!< (@ 0x00000010) P1 Set port pins Register */ + + struct + { + __OM uint32_t P1_SET : 16; /*!< [15..0] Writing a 1 to P1[y] sets P1[y] to 1. Writing 0 is discarded;Reading + * returns 0 */ + uint32_t : 16; + } P1_SET_DATA_REG_b; + }; + + union + { + __IOM uint32_t SW_SET_DATA_REG; /*!< (@ 0x00000014) SW Set port pins Register */ + + struct + { + __OM uint32_t SWD_SET : 2; /*!< [1..0] Writing a 1 to SWD_[y] sets SWD_[y] to 1. Writing 0 is + * discarded;Reading returns 0 */ + uint32_t : 30; + } SW_SET_DATA_REG_b; + }; + + union + { + __IOM uint32_t P0_RESET_DATA_REG; /*!< (@ 0x00000018) P0 Reset port pins Register */ + + struct + { + __OM uint32_t P0_RESET : 14; /*!< [13..0] Writing a 1 to P0[y] sets P0[y] to 0. Writing 0 is discarded;Reading + * returns 0 */ + uint32_t : 18; + } P0_RESET_DATA_REG_b; + }; + + union + { + __IOM uint32_t P1_RESET_DATA_REG; /*!< (@ 0x0000001C) P1 Reset port pins Register */ + + struct + { + __OM uint32_t P1_RESET : 16; /*!< [15..0] Writing a 1 to P1[y] sets P1[y] to 0. Writing 0 is discarded;Reading + * returns 0 */ + uint32_t : 16; + } P1_RESET_DATA_REG_b; + }; + + union + { + __IOM uint32_t SW_RESET_DATA_REG; /*!< (@ 0x00000020) SW Reset port pins Register */ + + struct + { + __OM uint32_t SWD_RESET : 2; /*!< [1..0] Writing a 1 to SWD_[y] sets SWD_[y] to 0. Writing 0 is + * discarded;Reading returns 0 */ + uint32_t : 30; + } SW_RESET_DATA_REG_b; + }; + + union + { + __IOM uint32_t P0_00_MODE_REG; /*!< (@ 0x00000024) P0_00 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] 0: GPIO (I/O)1: UART_RX (IA)2: UART_TX (OA)3: UART_CTSN + * (IA)4: UART_RTSN (OA)5: UART_TXDOE (OA)6: UART1_RX (IA)7: + * UART1_TX (OA)8: UART1_CTSN (IA)9: UART1_RTSN (OA)10: UART1_TXDOE + * (OA)11: UART2_RX (IA)12: UART2_TX (OA)13: UART2_CTSN (IA)14: + * UART2_RTSN (OA)15: UART2_TXDOE (OA)16: SPI_DI (IA)17: SPI_DO + * (OA)18: SPI_CLK (I/O)19: SPI_CSN0 (I/O)20: SPI_CSN1 (OA)21: + * SPI2_DI (IA)22: SPI2_DO (OA)23: SPI2_CLK (I/O)24: SP */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_00_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_01_MODE_REG; /*!< (@ 0x00000028) P0_01 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_01_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_02_MODE_REG; /*!< (@ 0x0000002C) P0_02 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selectedIn + * ADC mode, these bits are don't care */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_02_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_03_MODE_REG; /*!< (@ 0x00000030) P0_03 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_03_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_04_MODE_REG; /*!< (@ 0x00000034) P0_04 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_04_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_05_MODE_REG; /*!< (@ 0x00000038) P0_05 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_05_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_06_MODE_REG; /*!< (@ 0x0000003C) P0_06 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_06_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_07_MODE_REG; /*!< (@ 0x00000040) P0_07 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_07_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_08_MODE_REG; /*!< (@ 0x00000044) P0_08 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selectedIn + * ADC mode, these bits are don't care. */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_08_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_09_MODE_REG; /*!< (@ 0x00000048) P0_09 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_09_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_10_MODE_REG; /*!< (@ 0x0000004C) P0_10 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_10_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_11_MODE_REG; /*!< (@ 0x00000050) P0_11 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_11_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_12_MODE_REG; /*!< (@ 0x00000054) P0_12 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_12_MODE_REG_b; + }; + + union + { + __IOM uint32_t P0_13_MODE_REG; /*!< (@ 0x00000058) P0_13 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P0_13_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_00_MODE_REG; /*!< (@ 0x0000005C) P1_00 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_00_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_01_MODE_REG; /*!< (@ 0x00000060) P1_01 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_01_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_02_MODE_REG; /*!< (@ 0x00000064) P1_02 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_02_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_03_MODE_REG; /*!< (@ 0x00000068) P1_03 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_03_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_04_MODE_REG; /*!< (@ 0x0000006C) P1_04 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_04_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_05_MODE_REG; /*!< (@ 0x00000070) P1_05 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_05_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_06_MODE_REG; /*!< (@ 0x00000074) P1_06 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_06_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_07_MODE_REG; /*!< (@ 0x00000078) P1_07 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_07_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_08_MODE_REG; /*!< (@ 0x0000007C) P1_08 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_08_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_09_MODE_REG; /*!< (@ 0x00000080) P1_09 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_09_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_10_MODE_REG; /*!< (@ 0x00000084) P1_10 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_10_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_11_MODE_REG; /*!< (@ 0x00000088) P1_11 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_11_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_12_MODE_REG; /*!< (@ 0x0000008C) P1_12 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_12_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_13_MODE_REG; /*!< (@ 0x00000090) P1_13 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_13_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_14_MODE_REG; /*!< (@ 0x00000094) P1_14 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selectedIn + * ADC mode, these bits are don't care. */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_14_MODE_REG_b; + }; + + union + { + __IOM uint32_t P1_15_MODE_REG; /*!< (@ 0x00000098) P1_15 Mode Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } P1_15_MODE_REG_b; + }; + + union + { + __IOM uint32_t SW0_MODE_REG; /*!< (@ 0x0000009C) SWCLK pin Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } SW0_MODE_REG_b; + }; + + union + { + __IOM uint32_t SW1_MODE_REG; /*!< (@ 0x000000A0) SWDIO Data Register */ + + struct + { + __IOM uint32_t PID : 7; /*!< [6..0] See P0_00_MODE_REG[PID] */ + uint32_t : 1; + __IOM uint32_t PUPD : 2; /*!< [9..8] 00: Input, no resistors selected01: Input, pull-up selected10: + * Input, pull-down selected11: Output, no resistors selected */ + __IOM uint32_t PPOD : 1; /*!< [10..10] 0: Push pull1: Open drain */ + __IOM uint32_t IS : 1; /*!< [11..11] Standard PAD input selection0: CMOS input1: Schmitt + * input */ + __IOM uint32_t DS : 2; /*!< [13..12] Standard PAD drive strength0: 2 mA1: 4 mA2: 8 mA3: + * 14 mA */ + __IOM uint32_t SR : 1; /*!< [14..14] Standard PAD slew rate control0: fast slew rate1: slow + * slew rate */ + __IOM uint32_t POE : 1; /*!< [15..15] Standard PAD Parametric Output control, parametric + * inverted data0: disable1: enable */ + uint32_t : 16; + } SW1_MODE_REG_b; + }; + + union + { + __IOM uint32_t GPIO_CLK_SEL_REG; /*!< (@ 0x000000A4) Select which clock to map on ports P0/P1 */ + + struct + { + __IOM uint32_t FUNC_CLOCK_SEL : 3; /*!< [2..0] Select which clock to map when PID = FUNC_CLOCK.0x1 : + * xtal40m0x2 : rc10m0x3 : xtal32k0x4 : osc32k0x5 : fpll98m0x6 + * : dpll480m0x7 : divn_clkothers : Reserved */ + __IOM uint32_t FUNC_CLOCK_EN : 1; /*!< [3..3] If set, it enables the mapping of the selected clock + * signal, according to FUNC_CLOCK_SEL bit-field. */ + __IOM uint32_t XTAL40M_OUTPUT_EN : 1; /*!< [4..4] XTAL40M_CLK output enable bit-field. When set, it enables + * the mapping of xtal40m clock on dedicated GPIO (P0_11). + * The specific GPIO must be configured as GPIO output. */ + __IOM uint32_t RC10M_OUTPUT_EN : 1; /*!< [5..5] RC10M_CLK output enable bit-field. When set, it enables + * the mapping of rc10m clock on dedicated GPIO (P0_09). The + * specific GPIO must be configured as GPIO output. */ + __IOM uint32_t XTAL32K_OUTPUT_EN : 1; /*!< [6..6] XTAL32K output enable bit-field. When set, it enables + * the mapping of xtal32k clock on dedicated GPIO (P0_08). + * The specific GPIO must be configured as GPIO output. */ + __IOM uint32_t OSC32K_OUTPUT_EN : 1; /*!< [7..7] OSC32K output enable bit-field. When set, it enables + * the mapping of osc32k clock on dedicated GPIO (P0_12). + * The specific GPIO must be configured as GPIO output. */ + __IOM uint32_t FPLL98M_OUTPUT_EN : 1; /*!< [8..8] FPLL98M output enable bit-field. When set, it enables + * the mapping of fpll98m clock on dedicated GPIO (P0_10). + * The specific GPIO must be configured as GPIO output. */ + __IOM uint32_t DPLL480M_OUTPUT_EN : 1; /*!< [9..9] DPLL480M output enable bit-field. When set, it enables + * the mapping of dpll480m clock on dedicated GPIO (P0_13). + * The specific GPIO must be configured as GPIO output. */ + __IOM uint32_t MCLK_OUTPUT_EN : 1; /*!< [10..10] MCLK output enable bit-field. When set, it enables + * the mapping of MCLK clock on dedicated GPIO (P1_11). The + * specific GPIO must be configured as GPIO output. */ + uint32_t : 21; + } GPIO_CLK_SEL_REG_b; + }; + + union + { + __IOM uint32_t EMMC_MODE_REG; /*!< (@ 0x000000A8) OQSPI PAD control Register */ + + struct + { + __IOM uint32_t EMMC_ENABLE : 1; /*!< [0..0] EMMC / GPIO PADs Mode enable0: GPIO mode (default)1: + * eMMC mode with {P1_[3:0], P1_[15:10]} or P0_[13:4] */ + __IOM uint32_t EMMC_PORT_SEL : 1; /*!< [1..1] eMMC Port selection when set to high SDIO_ENABLE0: eMMC + * Port P0_[13:4]1: eMMC Port P1_[3:0] and P1_[15:10] (default) */ + __IOM uint32_t EMMC_OCTA_MODE : 1; /*!< [2..2] EMMC Octa Mode enable0: eMMC Quad mode (default)1: eMMC + * Octa mode with P1_[3:0] or P0_[7:4] */ + __IOM uint32_t EMMC_CD_SEL : 1; /*!< [3..3] EMMC Card Detect selection0: CD signal from register + * set value1: CD signal from PIN */ + __IOM uint32_t EMMC_WP_SEL : 1; /*!< [4..4] EMMC Write Protect selection0: WP signal from register + * set value1: WP signal from PIN */ + __IOM uint32_t EMMC_CD_VAL : 1; /*!< [5..5] EMMC Card Detect value */ + __IOM uint32_t EMMC_WP_VAL : 1; /*!< [6..6] EMMC Write Protect value */ + __IOM uint32_t EMMC_CLKIN_SEL : 1; /*!< [7..7] EMMC rxclk_in selection0: clkout signal1: clkout_inv + * signal */ + __IOM uint32_t EMMC_PULL_EN : 10; /*!< [17..8] eMMC PADS Mode Pull Enable1: Pull enalbe0: PUll disablebit[8]: + * eMMC_CLK Padbit[9]: eMMC_CMD Padbit[10]: eMMC_DIO0 Padbit[11]: + * eMMC_DIO1 Padbit[12]: eMMC_DIO2 Padbit[13]: eMMC_DIO3 Padbit[14]: + * eMMC_DIO4 Padbit[15]: eMMC_DIO5 Padbit[16]: eMMC_DIO6 Padbit[17]: + * eMMC_DIO7 Pad */ + uint32_t : 2; + __IOM uint32_t EMMC_PULL_SEL : 10; /*!< [29..20] eMMC PADS Mode Pull Selection1: Pull-Up0: PUll-Downbit[20]: + * eMMC_CLK Padbit[21]: eMMC_CMD Padbit[22]: eMMC_DIO0 Padbit[23]: + * eMMC_DIO1 Padbit[24]: eMMC_DIO2 Padbit[25]: eMMC_DIO3 Padbit[26]: + * eMMC_DIO4 Padbit[27]: eMMC_DIO5 Padbit[28]: eMMC_DIO6 Padbit[29]: + * eMMC_DIO7 Pad */ + uint32_t : 2; + } EMMC_MODE_REG_b; + }; + + union + { + __IOM uint32_t SDIO_MODE_REG; /*!< (@ 0x000000AC) QSPI PAD Control Register */ + + struct + { + __IOM uint32_t SDIO_PAD_ENABLE : 1; /*!< [0..0] SDIO / GPIO PADs Mode enable0: GPIO mode1: SDIO mode */ + __IOM uint32_t SDIO_PORT_SEL : 1; /*!< [1..1] SDIO Port selection when set to high SDIO_ENABLE0: SDIO + * Port P0_[13:8]1: SDIO Port P1_[15:10] */ + __IOM uint32_t CFG_DRV : 2; /*!< [3..2] SDIO PADS Mode drive strength0: 2 mA@ 3.3V1: 4 mA@ 3.3V2: + * 8 mA@ 3.3V3: 14 mA@ 3.3V */ + __IOM uint32_t SDIO_PULL_EN : 6; /*!< [9..4] SDIO PADS Mode Pull Enable1: Pull enalbe0: PUll disablebit[4]: + * SDIO_CLK Padbit[5]: SDIO_CMD Padbit[6]: SDIO_DIO0 Padbit[7]: + * SDIO_DIO1 Padbit[8]: SDIO_DIO2 Padbit[9]: SDIO_DIO3 Pad */ + __IOM uint32_t SDIO_PULL_SEL : 6; /*!< [15..10] SDIO PADS Mode Pull Selection1: Pull-Up0: PUll-Downbit[10]: + * SDIO_CLK Padbit[11]: SDIO_CMD Padbit[12]: SDIO_DIO0 Padbit[13]: + * SDIO_DIO1 Padbit[14]: SDIO_DIO2 Padbit[15]: SDIO_DIO3 Pad */ + uint32_t : 16; + } SDIO_MODE_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t GPIO_INT_SEL_P0_REG; /*!< (@ 0x000000C0) select which inputs from P0 port can trigger + * wkup counter */ + + struct + { + __IOM uint32_t GPIO_SELECT_P0 : 14; /*!< [13..0] 0: input P0_xx is not enabled for wakeup event1: input + * P0_xx is enabled for wakeup event */ + uint32_t : 18; + } GPIO_INT_SEL_P0_REG_b; + }; + + union + { + __IOM uint32_t GPIO_INT_SEL_P1_REG; /*!< (@ 0x000000C4) select which inputs from P1 port can trigger + * wkup counter */ + + struct + { + __IOM uint32_t GPIO_SELECT_P1 : 16; /*!< [15..0] 0: input P1_xx is not enabled for wakeup event1: input + * P1_xx is enabled for wakeup event */ + uint32_t : 16; + } GPIO_INT_SEL_P1_REG_b; + }; + + union + { + __IOM uint32_t GPIO_INT_POL_P0_REG; /*!< (@ 0x000000C8) select the sesitivity polarity for each P0 input */ + + struct + { + __IOM uint32_t GPIO_POL_P0 : 14; /*!< [13..0] 0: enabled input P0_xx will give an event if that input + * goes high1: enabled input P0_xx will give an event if that + * input goes low */ + uint32_t : 18; + } GPIO_INT_POL_P0_REG_b; + }; + + union + { + __IOM uint32_t GPIO_INT_POL_P1_REG; /*!< (@ 0x000000CC) select the sesitivity polarity for each P1 input */ + + struct + { + __IOM uint32_t GPIO_POL_P1 : 16; /*!< [15..0] 0: enabled input P1_xx will give an event if that input + * goes high1: enabled input P1_xx will give an event if that + * input goes low */ + uint32_t : 16; + } GPIO_INT_POL_P1_REG_b; + }; + + union + { + __IOM uint32_t GPIO_INT_STS_P0_REG; /*!< (@ 0x000000D0) Event status register for P0 */ + + struct + { + __IM uint32_t GPIO_STAT_P0 : 14; /*!< [13..0] Contains the latched value of any toggle of the GPIOs + * Port P0. WKUP_STAT_P0[0] -> P0_00. */ + uint32_t : 18; + } GPIO_INT_STS_P0_REG_b; + }; + + union + { + __IOM uint32_t GPIO_INT_STS_P1_REG; /*!< (@ 0x000000D4) Event status register for P1 */ + + struct + { + __IM uint32_t GPIO_STAT_P1 : 16; /*!< [15..0] Contains the latched value of any toggle of the GPIOs + * Port P1. WKUP_STAT_P1[0] -> P1_00. */ + uint32_t : 16; + } GPIO_INT_STS_P1_REG_b; + }; + + union + { + __IOM uint32_t GPIO_INT_CLR_P0_REG; /*!< (@ 0x000000D8) Clear event register for P0 */ + + struct + { + __OM uint32_t GPIO_CLEAR_P0 : 14; /*!< [13..0] Clear latched value of the GPIOs P0 when corresponding + * bit is 1 */ + uint32_t : 18; + } GPIO_INT_CLR_P0_REG_b; + }; + + union + { + __IOM uint32_t GPIO_INT_CLR_P1_REG; /*!< (@ 0x000000DC) Clear event register for P1 */ + + struct + { + __OM uint32_t GPIO_CLEAR_P1 : 16; /*!< [15..0] Clear latched value of the GPIOs P1 when corresponding + * bit is 1 */ + uint32_t : 16; + } GPIO_INT_CLR_P1_REG_b; + }; + + union + { + __IOM uint32_t GPIO_SEL_P0_REG; /*!< (@ 0x000000E0) Enable fast wakeup and enable GPIO_P0_IRQ */ + + struct + { + __IOM uint32_t GPIO_SEL_P0 : 14; /*!< [13..0] 0:No GPIO_P0_IRQ on input P0_x.Fast wakeup is not enabled + * if the corresponding WKUP_SEL1_GPIO_P0_REG[x] is 0 too.1:GPIO_P0_IRQ + * will be generated on P0_x input event. If WKUP_SEL1_GPIO_P0_REG[x] + * is 0, IRQ generation is level sensitive. If WKUP_SEL1_GPIO_P0_REG[x] + * is 1, IRQ generation is edge sensitive (only if there is + * a change on P0_x input).Fast wakeup from the corresponding + * P0_x input is enabled. */ + uint32_t : 18; + } GPIO_SEL_P0_REG_b; + }; + + union + { + __IOM uint32_t GPIO_SEL_P1_REG; /*!< (@ 0x000000E4) Enable fast wakeup and enable GPIO_P1_IRQ */ + + struct + { + __IOM uint32_t GPIO_SEL_P1 : 16; /*!< [15..0] 0:No GPIO_P1_IRQ on input P1_x.Fast wakeup is not enabled + * if the corresponding WKUP_SEL1_GPIO_P1_REG[x] is 0 too.1:GPIO_P1_IRQ + * will be generated on P1_x input event. If WKUP_SEL1_GPIO_P1_REG[x] + * is 0, IRQ generation is level sensitive. If WKUP_SEL1_GPIO_P1_REG[x] + * is 1, IRQ generation is edge sensitive (only if there is + * a change on P1_x input).Fast wakeup from the corresponding + * P1_x input is enabled. */ + uint32_t : 16; + } GPIO_SEL_P1_REG_b; + }; + + union + { + __IOM uint32_t GPIO_SEL1_P0_REG; /*!< (@ 0x000000E8) Configure to generate level or edge sensitive + * IRQ on P0 events */ + + struct + { + __IOM uint32_t GPIO_SEL1_P0 : 14; /*!< [13..0] 0 (level sensitive):If WKUP_SEL_GPIO_P0_REG[x] is 1, + * generate GPIO_P0_IRQ based on P0_x level.Fast wakeup is + * not enabled if the corresponding WKUP_SEL_GPIO_P0_REG[x] + * is 0 too.1 (edge sensitive):If WKUP_SEL_GPIO_P0_REG[x] + * is 1, GPIO_P0_IRQ will be generated only on rising/falling + * (defined by WKUP_POL_P0_REG) edge on P0_x.Fast wakeup from + * the corresponding P0_x input is enabled. */ + uint32_t : 18; + } GPIO_SEL1_P0_REG_b; + }; + + union + { + __IOM uint32_t GPIO_SEL1_P1_REG; /*!< (@ 0x000000EC) Configure to generate level or edge sensitive + * IRQ on P1 events */ + + struct + { + __IOM uint32_t GPIO_SEL1_P1 : 16; /*!< [15..0] 0 (level sensitive):If WKUP_SEL_GPIO_P1_REG[x] is 1, + * generate GPIO_P1_IRQ based on P1_x level.Fast wakeup is + * not enabled if the corresponding WKUP_SEL_GPIO_P1_REG[x] + * is 0 too.1 (edge sensitive):If WKUP_SEL_GPIO_P1_REG[x] + * is 1, GPIO_P1_IRQ will be generated only on rising/falling + * (defined by WKUP_POL_P1_REG) edge on P1_x.Fast wakeup from + * the corresponding P1_x input is enabled. */ + uint32_t : 16; + } GPIO_SEL1_P1_REG_b; + }; + __IM uint32_t RESERVED1[68]; + + union + { + __IOM uint32_t BIST_CTRL_REG; /*!< (@ 0x00000200) BIST_CTRL_REG */ + + struct + { + __IOM uint32_t BIST_CONFIG : 2; /*!< [1..0] BIST_CONFIG */ + __IOM uint32_t RAM_BIST_PATTERN : 2; /*!< [3..2] RAM_BIST_PATTERN */ + __IOM uint32_t RAMBIST_REPEAT : 1; /*!< [4..4] RAMBIST_REPEAT */ + __IOM uint32_t FAST_ADDRESS : 1; /*!< [5..5] FAST_ADDRESS */ + __IOM uint32_t ADDRESS_SCRAMBLING : 1; /*!< [6..6] ADDRESS_SCRAMBLING */ + __IOM uint32_t SHOW_BIST : 1; /*!< [7..7] SHOW_BIST */ + uint32_t : 24; + } BIST_CTRL_REG_b; + }; + + union + { + __IOM uint32_t RAMBIST_ENABLE1_REG; /*!< (@ 0x00000204) RAMBIST_ENABLE1_REG */ + + struct + { + __IOM uint32_t MROM_BIST_ENABLE : 1; /*!< [0..0] MROM_BIST_ENABLE */ + __IOM uint32_t SYSRAM0_BIST_ENABLE : 1; /*!< [1..1] SYSRAM0_BIST_ENABLE */ + __IOM uint32_t SYSRAM1_BIST_ENABLE : 1; /*!< [2..2] SYSRAM1_BIST_ENABLE */ + __IOM uint32_t SYSRAM2_BIST_ENABLE : 1; /*!< [3..3] SYSRAM2_BIST_ENABLE */ + __IOM uint32_t SYSRAM3_BIST_ENABLE : 1; /*!< [4..4] SYSRAM3_BIST_ENABLE */ + __IOM uint32_t SYSRAM4_BIST_ENABLE : 1; /*!< [5..5] SYSRAM4_BIST_ENABLE */ + __IOM uint32_t SYSRAM5_BIST_ENABLE : 1; /*!< [6..6] SYSRAM5_BIST_ENABLE */ + __IOM uint32_t RETMEM_BIST_ENABLE : 1; /*!< [7..7] RETMEM_BIST_ENABLE */ + __IOM uint32_t AGCRAM_BIST_ENABLE : 1; /*!< [8..8] AGCRAM_BIST_ENABLE */ + __IOM uint32_t CC312RAM_BIST_ENABLE : 1; /*!< [9..9] CC312RAM_BIST_ENABLE */ + __IOM uint32_t KEYSTG0_BIST_ENABLE : 1; /*!< [10..10] KEYSTG0_BIST_ENABLE */ + __IOM uint32_t KEYSTG1_BIST_ENABLE : 1; /*!< [11..11] KEYSTG1_BIST_ENABLE */ + __IOM uint32_t MIBRAM_BIST_ENABLE : 1; /*!< [12..12] MIBRAM_BIST_ENABLE */ + __IOM uint32_t MACTX_BIST_ENABLE : 1; /*!< [13..13] MACTX_BIST_ENABLE */ + __IOM uint32_t MACRX_BIST_ENABLE : 1; /*!< [14..14] MACRX_BIST_ENABLE */ + __IOM uint32_t SBOXRAM_BIST_ENABLE : 1; /*!< [15..15] SBOXRAM_BIST_ENABLE */ + __IOM uint32_t MPIFTX_BIST_ENABLE : 1; /*!< [16..16] MPIFTX_BIST_ENABLE */ + __IOM uint32_t MPIFRX_BIST_ENABLE : 1; /*!< [17..17] MPIFRX_BIST_ENABLE */ + __IOM uint32_t LDPCTX_BIST_ENABLE : 1; /*!< [18..18] LDPCTX_BIST_ENABLE */ + __IOM uint32_t BFMEE_BIST_ENABLE : 1; /*!< [19..19] BFMEE_BIST_ENABLE */ + __IOM uint32_t RADAR_BIST_ENABLE : 1; /*!< [20..20] RADAR_BIST_ENABLE */ + __IOM uint32_t FFTMEM0_BIST_ENABLE : 1; /*!< [21..21] FFTMEM0_BIST_ENABLE */ + __IOM uint32_t FFTMEM1_BIST_ENABLE : 1; /*!< [22..22] FFTMEM1_BIST_ENABLE */ + __IOM uint32_t FFTMEM2_BIST_ENABLE : 1; /*!< [23..23] FFTMEM2_BIST_ENABLE */ + __IOM uint32_t FFTMEM3_BIST_ENABLE : 1; /*!< [24..24] FFTMEM3_BIST_ENABLE */ + __IOM uint32_t FFTMEM4_BIST_ENABLE : 1; /*!< [25..25] FFTMEM4_BIST_ENABLE */ + __IOM uint32_t FFTMEM5_BIST_ENABLE : 1; /*!< [26..26] FFTMEM5_BIST_ENABLE */ + __IOM uint32_t FFTMEM6_BIST_ENABLE : 1; /*!< [27..27] FFTMEM6_BIST_ENABLE */ + __IOM uint32_t LDPC0_CR_BIST_ENABLE : 1; /*!< [28..28] LDPC0_CR_BIST_ENABLE */ + __IOM uint32_t LDPC0_VR_BIST_ENABLE : 1; /*!< [29..29] LDPC0_VR_BIST_ENABLE */ + __IOM uint32_t LDPC0_VMX10_BIST_ENABLE : 1; /*!< [30..30] LDPC0_VMX10_BIST_ENABLE */ + __IOM uint32_t LDPC0_VMX32_BIST_ENABLE : 1; /*!< [31..31] LDPC0_VMX32_BIST_ENABLE */ + } RAMBIST_ENABLE1_REG_b; + }; + + union + { + __IOM uint32_t RAMBIST_ENABLE2_REG; /*!< (@ 0x00000208) RAMBIST_ENABLE2_REG */ + + struct + { + __IOM uint32_t LDPC0_VMX54_BIST_ENABLE : 1; /*!< [0..0] LDPC0_VMX54_BIST_ENABLE */ + __IOM uint32_t LDPC0_VMY10_BIST_ENABLE : 1; /*!< [1..1] LDPC0_VMY10_BIST_ENABLE */ + __IOM uint32_t LDPC0_VMY32_BIST_ENABLE : 1; /*!< [2..2] LDPC0_VMY32_BIST_ENABLE */ + __IOM uint32_t LDPC0_VMY54_BIST_ENABLE : 1; /*!< [3..3] LDPC0_VMY54_BIST_ENABLE */ + __IOM uint32_t LDPC0_HDXY_BIST_ENABLE : 1; /*!< [4..4] LDPC0_HDXY_BIST_ENABLE */ + __IOM uint32_t BDFD1_RAM_BIST_ENABLE : 1; /*!< [5..5] BDFD1_RAM_BIST_ENABLE */ + __IOM uint32_t EMMCRAM_BIST_ENABLE : 1; /*!< [6..6] EMMCRAM_BIST_ENABLE */ + __IOM uint32_t SDIO_RAM_BIST_ENABLE : 1; /*!< [7..7] SDIO_RAM_BIST_ENABLE */ + __IOM uint32_t CACHE_MEM10_BIST_ENABLE : 1; /*!< [8..8] CACHE_MEM10_BIST_ENABLE */ + __IOM uint32_t DCACHE_DATA_RAM_BIST_ENABLE : 1; /*!< [9..9] DCACHE_DATA_RAM_BIST_ENABLE */ + __IOM uint32_t DCACHE_TAG_RAM_BIST_ENABLE : 1; /*!< [10..10] DCACHE_TAG_RAM_BIST_ENABLE */ + uint32_t : 21; + } RAMBIST_ENABLE2_REG_b; + }; + __IM uint32_t RESERVED2; + + union + { + __IOM uint32_t RAMBIST_STATUS1_REG; /*!< (@ 0x00000210) RAMBIST_STATUS1_REG */ + + struct + { + __IM uint32_t RAM_GRP1_BIST_BUSY : 32; /*!< [31..0] RAM_GRP1_BIST_BUSY */ + } RAMBIST_STATUS1_REG_b; + }; + + union + { + __IOM uint32_t RAMBIST_STATUS2_REG; /*!< (@ 0x00000214) RAMBIST_STATUS2_REG */ + + struct + { + __IM uint32_t RAM_GRP2_BIST_BUSY : 32; /*!< [31..0] RAM_GRP2_BIST_BUSY */ + } RAMBIST_STATUS2_REG_b; + }; + + union + { + __IOM uint32_t RAMBIST_STATUS3_REG; /*!< (@ 0x00000218) RAMBIST_STATUS3_REG */ + + struct + { + __IM uint32_t RAM_GRP3_BIST_BUSY : 4; /*!< [3..0] RAM_GRP3_BIST_BUSY */ + uint32_t : 28; + } RAMBIST_STATUS3_REG_b; + }; + + union + { + __IOM uint32_t RAMBIST_RESULT1_REG; /*!< (@ 0x0000021C) RAMBIST_RESULT1_REG */ + + struct + { + __IM uint32_t RAM_GRP1_BIST_FAIL : 32; /*!< [31..0] RAM_GRP1_BIST_FAIL */ + } RAMBIST_RESULT1_REG_b; + }; + + union + { + __IOM uint32_t RAMBIST_RESULT2_REG; /*!< (@ 0x00000220) RAMBIST_RESULT2_REG */ + + struct + { + __IM uint32_t RAM_GRP2_BIST_FAIL : 32; /*!< [31..0] RAM_GRP2_BIST_FAIL */ + } RAMBIST_RESULT2_REG_b; + }; + + union + { + __IOM uint32_t RAMBIST_RESULT3_REG; /*!< (@ 0x00000224) RAMBIST_RESULT3_REG */ + + struct + { + __IM uint32_t RAM_GRP3_BIST_FAIL : 4; /*!< [3..0] RAM_GRP3_BIST_FAIL */ + uint32_t : 28; + } RAMBIST_RESULT3_REG_b; + }; + + union + { + __IOM uint32_t ROMBIST_RESULT_REG; /*!< (@ 0x00000228) ROMBIST_RESULT_REG */ + + struct + { + __IM uint32_t ROMBIST_RESULT : 32; /*!< [31..0] ROMBIST_RESULT */ + } ROMBIST_RESULT_REG_b; + }; + + union + { + __IOM uint32_t TEST_CTRL_REG; /*!< (@ 0x0000022C) TEST_CTRL_REG */ + + struct + { + __IOM uint32_t SHOW_CLOCKS : 1; /*!< [0..0] SHOW_CLOCKS */ + __IOM uint32_t RFPT_ENABLE : 1; /*!< [1..1] RFPT_ENABLE */ + __IOM uint32_t RTC_MONITOR_EN : 1; /*!< [2..2] RTC_MONITOR_EN */ + __IOM uint32_t IQADC_TEST_EN : 1; /*!< [3..3] IQADC_TEST_EN */ + __IOM uint32_t IQDAC_TEST_EN : 1; /*!< [4..4] IQDAC_TEST_EN */ + __IOM uint32_t AUXADC_TEST_EN : 1; /*!< [5..5] AUXADC_TEST_EN */ + __IOM uint32_t RFMON_TBUS_SEL : 2; /*!< [7..6] RFMON_TBUS_SEL */ + __IOM uint32_t RTC_SCAN_TEST_EN : 1; /*!< [8..8] RTC_SCAN_TEST_EN */ + __IOM uint32_t ADCSEN_SCAN_TEST_EN : 1; /*!< [9..9] ADCSEN_SCAN_TEST_EN */ + __IOM uint32_t LD_SCAN_TEST_EN : 1; /*!< [10..10] LD_SCAN_TEST_EN */ + __IOM uint32_t LOCAL_SCAN_TEST_EN : 1; /*!< [11..11] LOCAL_SCAN_TEST_EN */ + __IOM uint32_t AFC_SCAN_TEST_EN : 1; /*!< [12..12] AFC_SCAN_TEST_EN */ + __IOM uint32_t FILCAL_SCAN_TEST_EN : 1; /*!< [13..13] FILCAL_SCAN_TEST_EN */ + __IOM uint32_t UPSAM_5G0_1_SCAN_TEST_EN : 1; /*!< [14..14] UPSAM_5G0_1_SCAN_TEST_EN */ + __IOM uint32_t UPSAM_5G0_2_SCAN_TEST_EN : 1; /*!< [15..15] UPSAM_5G0_2_SCAN_TEST_EN */ + __IOM uint32_t UPSAM_2G4_1_SCAN_TEST_EN : 1; /*!< [16..16] UPSAM_2G4_1_SCAN_TEST_EN */ + __IOM uint32_t UPSAM_2G4_2_SCAN_TEST_EN : 1; /*!< [17..17] UPSAM_2G4_2_SCAN_TEST_EN */ + __IOM uint32_t POLARTX_SCAN_TEST_EN : 1; /*!< [18..18] POLARTX_SCAN_TEST_EN */ + __IOM uint32_t RF_ONLY_MODE_EN : 1; /*!< [19..19] RF_ONLY_MODE_EN */ + __IOM uint32_t RF_ONLY_MODE_SEL : 1; /*!< [20..20] RF_ONLY_MODE_SEL */ + uint32_t : 11; + } TEST_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TEST_CTRL2_REG; /*!< (@ 0x00000230) TEST_CTRL2_REG */ + + struct + { + __IOM uint32_t SCAN_CONTROL : 6; /*!< [5..0] SCAN_CONTROL */ + uint32_t : 26; + } TEST_CTRL2_REG_b; + }; +} GPIO_Type; /*!< Size = 564 (0x234) */ + +/* =========================================================================================================================== */ +/* ================ GPREG ================ */ +/* =========================================================================================================================== */ + +/** + * @brief GPREG registers (GPREG) + */ + +typedef struct /*!< (@ 0x40070300) GPREG Structure */ +{ + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t DEBUG_REG; /*!< (@ 0x00000008) Various debug information register. */ + + struct + { + __IOM uint32_t SYS_CPU_FREEZE_EN : 1; /*!< [0..0] 1: Enable Freezing on-chip peripherals (see Note 2) by + * the SYS CPU (ARM CM33).Default '1', freezing of the on-chip + * peripherals is enabled when the Cortex-M33 is halted in + * DEBUG State.If '0', freezing of the on-chip peripherals + * is only depending on [RE]SET_FREEZE_REG except the system + * watchdog timer. The system watchdog timer is always frozen + * when the Cortex-M33 is halted in DEBUG State.Note 1: This + * bit is retained.Note 2: See [RE]SET_FREEZE_REG for the + * specific on-chip peripherals. */ + __IM uint32_t SYS_CPU_IS_HALTED : 1; /*!< [1..1] 1: SYS CPU (ARM CM33) is halted. */ + __IOM uint32_t SYS_CPUWAIT : 1; /*!< [2..2] 1: Stall the processor core out of reset (always after + * a wake-up). Debugger access continue when the core is stalled. + * When set to '0' again the core resumes instruction execution.Note: + * This bit is retained. */ + __IOM uint32_t SYS_CPUWAIT_ON_JTAG : 1; /*!< [3..3] 1: Stall the processor core out of reset (only after + * a wake-up from JTAG). Debugger access continue when the + * core is stalled. When set to '0' again the core resumes + * instruction execution.This feature is independent of the + * PDC (Power Domain Controller) settings. If this bit is + * set and there is SW/JTAG activity during deep sleep, the + * SYS CPU is stalled after the wake-up.Note: This bit is + * retained. */ + __IOM uint32_t ETM_TRACE_MAP_ON_PINS_EN : 1; /*!< [4..4] 1: ETM/TPIU Trace signals mapped on GPIO pins is enabled. */ + uint32_t : 27; + } DEBUG_REG_b; + }; + + union + { + __IOM uint32_t GP_STATUS_REG; /*!< (@ 0x0000000C) General purpose system status register. */ + + struct + { + __IOM uint32_t CAL_PHASE : 1; /*!< [0..0] If '1', it designates that the chip is in Calibration + * Phase i.e. the OTP has been initially programmed but no + * Calibration has occurred. */ + uint32_t : 31; + } GP_STATUS_REG_b; + }; +} GPREG_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ HW_ACC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief HW_ACC registers (HW_ACC) + */ + +typedef struct /*!< (@ 0x40032000) HW_ACC Structure */ +{ + union + { + __IOM uint32_t PRNG_REQ_CLR_REG; /*!< (@ 0x00000000) Clear Request to load the seed value of PRNG, + * active high with auto clear function */ + + struct + { + __OM uint32_t PRNG_REQ_CLR : 1; /*!< [0..0] Clear Request to load the seed value of PRNG, active + * high with auto clear function */ + __OM uint32_t PRNG_REQ_GET : 1; /*!< [1..1] Get Request to obtain a new pseudo-random number in PRNG, + * active high with auto clear function */ + uint32_t : 30; + } PRNG_REQ_CLR_REG_b; + }; + + union + { + __IOM uint32_t PRNG_OP_EN_REG; /*!< (@ 0x00000004) Operation Enable of PRNG */ + + struct + { + __IOM uint32_t PRNG_OP_EN : 1; /*!< [0..0] Operation Enable of PRNG */ + uint32_t : 31; + } PRNG_OP_EN_REG_b; + }; + + union + { + __IOM uint32_t PRNG_PAR_TYPE_REG; /*!< (@ 0x00000008) Parallel Type of PRNG */ + + struct + { + __IOM uint32_t PRNG_PAR_TYPE : 2; /*!< [1..0] Parallel Type of PRNG00 : 8 bits01 : 16 bits10 : 32 bits */ + uint32_t : 30; + } PRNG_PAR_TYPE_REG_b; + }; + + union + { + __IOM uint32_t PRNG_SEED_REG; /*!< (@ 0x0000000C) reverse enable of seed value */ + + struct + { + __IOM uint32_t PRNG_SEED_VAL : 31; /*!< [30..0] seed value of PRNG */ + uint32_t : 1; + } PRNG_SEED_REG_b; + }; + + union + { + __IOM uint32_t PRNG_REG_CAL_VAL; /*!< (@ 0x00000010) PRNG calculation value */ + + struct + { + __IM uint32_t PRNG_CAL_VAL_REG : 32; /*!< [31..0] PRNG_CAL_VAL_REG */ + } PRNG_REG_CAL_VAL_b; + }; + __IM uint32_t RESERVED[59]; + + union + { + __IOM uint32_t CRC_REQ_CTRL_REG; /*!< (@ 0x00000100) Stop Request of CRC Calculation, active high + * with auto clear function */ + + struct + { + __OM uint32_t CRC_REQ_CLR : 1; /*!< [0..0] Clear Request of CRC Calculation, active high with auto + * clear function */ + __OM uint32_t CRC_REQ_START : 1; /*!< [1..1] Start Request of CRC Calculation, active high with auto + * clear function */ + __OM uint32_t CRC_REQ_STOP : 1; /*!< [2..2] Stop Request of CRC Calculation, active high with auto + * clear function */ + uint32_t : 29; + } CRC_REQ_CTRL_REG_b; + }; + + union + { + __IOM uint32_t CRC_OP_EN_REG; /*!< (@ 0x00000104) Operation Enable of CRC Calculation */ + + struct + { + __IOM uint32_t CRC_OP_EN : 1; /*!< [0..0] Operation Enable of CRC Calculation */ + uint32_t : 31; + } CRC_OP_EN_REG_b; + }; + + union + { + __IOM uint32_t CRC_CONFIG_REG; /*!< (@ 0x00000108) Configuration of CRC Calculation Input data */ + + struct + { + __IOM uint32_t CRC_PATH_SEL : 5; /*!< [4..0] Path Selection of CRC Calculation0x00 : OQSPI0x01 : DMA0x02 + * : MAC_DMA0x03 : AHB_SYS */ + uint32_t : 3; + __IOM uint32_t CRC_ACC_TYPE : 1; /*!< [8..8] Access Type of CRC Calculation0 : Read access1 : Write + * access */ + __IOM uint32_t CRC_PAR_TYPE : 2; /*!< [10..9] Parallel Type of CRC Calculation00 : 8 bits01 : 16 bits10 + * : 32 bits */ + uint32_t : 1; + __IOM uint32_t CRC_ENDIAN_TYPE : 1; /*!< [12..12] Bit Endian Type (Reverse Bit)0 : Big Endian (Same In/output)1 + * : Little EndianWhen CRC_PAR_TYPE=0, 0->1->2->3->4->5->6->7When + * CRC_PAR_TYPE=1, 0->1->2->...->13->14->15When CRC_PAR_TYPE=2, + * 0->1->2->...->29->30->31 */ + __IOM uint32_t CRC_SWAP_EN : 1; /*!< [13..13] Input Data Swap Enable0 : Normal1 : Byte Swap */ + uint32_t : 2; + __IOM uint32_t CRC_MST_TYPE : 5; /*!< [20..16] Master Type of CRC Calculation for slave path selection + * in Master Checking Enable0x00 : OQSPI0x01 : DMA0x02 : MAC_DMA0x03 + * : AHB_SYS */ + uint32_t : 3; + __IOM uint32_t CRC_CHK_ADDR : 1; /*!< [24..24] Address Checking Enable of CRC Calculation */ + __IOM uint32_t CRC_CHK_MST : 1; /*!< [25..25] Master Checking Enable of CRC Calculation for slave + * path selection */ + __IOM uint32_t CRC_OP_TYPE : 2; /*!< [27..26] Operation Type of CRC Calculation0 : CRC-321 : CRC-32C2 + * : CRC-16 CCITT3 : CRC-16 IBM */ + uint32_t : 4; + } CRC_CONFIG_REG_b; + }; + + union + { + __IOM uint32_t CRC_SEED_VAL_REG; /*!< (@ 0x0000010C) CRC seed value */ + + struct + { + __IOM uint32_t CRC_SEED_VAL : 32; /*!< [31..0] CRC seed value */ + } CRC_SEED_VAL_REG_b; + }; + + union + { + __IOM uint32_t CRC_ADDR_MIN_REG; /*!< (@ 0x00000110) Minimum address to check the bus address range */ + + struct + { + __IOM uint32_t CRC_ADDR_MIN : 32; /*!< [31..0] Minimum address to check the bus address range */ + } CRC_ADDR_MIN_REG_b; + }; + + union + { + __IOM uint32_t CRC_ADDR_MAX_REG; /*!< (@ 0x00000114) Maximum address to check the bus address range */ + + struct + { + __IOM uint32_t CRC_ADDR_MAX : 32; /*!< [31..0] Maximum address to check the bus address range */ + } CRC_ADDR_MAX_REG_b; + }; + + union + { + __IOM uint32_t CRC_PSEUDO_VAL_REG; /*!< (@ 0x00000118) CRC pseudo value to accumulate manually */ + + struct + { + __IOM uint32_t CRC_PSEUDO_VAL : 32; /*!< [31..0] CRC pseudo value to accumulate manually */ + } CRC_PSEUDO_VAL_REG_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t CRC_CAL_VAL_REG; /*!< (@ 0x00000120) CRC calculation value */ + + struct + { + __IM uint32_t CRC_CAL_VAL : 32; /*!< [31..0] CRC calculation value */ + } CRC_CAL_VAL_REG_b; + }; + + union + { + __IOM uint32_t CRC_STA_REG; /*!< (@ 0x00000124) Status of CRC Calculation */ + + struct + { + uint32_t : 24; + __IM uint32_t CRC_CAL_STA : 2; /*!< [25..24] Status of CRC Calculation0 : Idle1 : Busy2 : Stop3 + * : Error */ + uint32_t : 6; + } CRC_STA_REG_b; + }; + + union + { + __IOM uint32_t CRC_CAL_VAL_REV_REG; /*!< (@ 0x00000128) CRC calculation reversed value */ + + struct + { + __IM uint32_t CRC_CAL_VAL_REV : 32; /*!< [31..0] CRC calculation reversed value */ + } CRC_CAL_VAL_REV_REG_b; + }; + __IM uint32_t RESERVED2[53]; + + union + { + __IOM uint32_t CRC_1_REQ_CTRL_REG; /*!< (@ 0x00000200) Stop Request of CRC Calculation, active high + * with auto clear function */ + + struct + { + __OM uint32_t CRC_1_REQ_CLR : 1; /*!< [0..0] Clear Request of CRC Calculation, active high with auto + * clear function */ + __OM uint32_t CRC_1_REQ_START : 1; /*!< [1..1] Start Request of CRC Calculation, active high with auto + * clear function */ + __OM uint32_t CRC_1_REQ_STOP : 1; /*!< [2..2] Stop Request of CRC Calculation, active high with auto + * clear function */ + uint32_t : 29; + } CRC_1_REQ_CTRL_REG_b; + }; + + union + { + __IOM uint32_t CRC_1_OP_EN_REG; /*!< (@ 0x00000204) Operation Enable of CRC Calculation */ + + struct + { + __IOM uint32_t CRC_1_OP_EN : 1; /*!< [0..0] Operation Enable of CRC Calculation */ + uint32_t : 31; + } CRC_1_OP_EN_REG_b; + }; + + union + { + __IOM uint32_t CRC_1_CONFIG_REG; /*!< (@ 0x00000208) Configuration of CRC Calculation Input data */ + + struct + { + __IOM uint32_t CRC_1_PATH_SEL : 5; /*!< [4..0] Path Selection of CRC Calculation0x00 : OQSPI0x01 : DMA0x02 + * : MAC_DMA0x03 : AHB_SYS */ + uint32_t : 3; + __IOM uint32_t CRC_1_ACC_TYPE : 1; /*!< [8..8] Access Type of CRC Calculation0 : Read access1 : Write + * access */ + __IOM uint32_t CRC_1_PAR_TYPE : 2; /*!< [10..9] Parallel Type of CRC Calculation00 : 8 bits01 : 16 bits10 + * : 32 bits */ + uint32_t : 1; + __IOM uint32_t CRC_1_ENDIAN_TYPE : 1; /*!< [12..12] Bit Endian Type (Reverse Bit)0 : Big Endian (Same In/output)1 + * : Little EndianWhen CRC_PAR_TYPE=0, 0->1->2->3->4->5->6->7When + * CRC_PAR_TYPE=1, 0->1->2->...->13->14->15When CRC_PAR_TYPE=2, + * 0->1->2->...->29->30->31 */ + __IOM uint32_t CRC_1_SWAP_EN : 1; /*!< [13..13] Input Data Swap Enable0 : Normal1 : Byte Swap */ + uint32_t : 2; + __IOM uint32_t CRC_1_MST_TYPE : 5; /*!< [20..16] Master Type of CRC Calculation for slave path selection + * in Master Checking Enable0x00 : OQSPI0x01 : DMA0x02 : MAC_DMA0x03 + * : AHB_SYS */ + uint32_t : 3; + __IOM uint32_t CRC_1_CHK_ADDR : 1; /*!< [24..24] Address Checking Enable of CRC Calculation */ + __IOM uint32_t CRC_1_CHK_MST : 1; /*!< [25..25] Master Checking Enable of CRC Calculation for slave + * path selection */ + __IOM uint32_t CRC_1_OP_TYPE : 2; /*!< [27..26] Operation Type of CRC Calculation0 : CRC-321 : CRC-32C2 + * : CRC-16 CCITT3 : CRC-16 IBM */ + uint32_t : 4; + } CRC_1_CONFIG_REG_b; + }; + + union + { + __IOM uint32_t CRC_1_SEED_VAL_REG; /*!< (@ 0x0000020C) CRC seed value */ + + struct + { + __IOM uint32_t CRC_1_SEED_VAL : 32; /*!< [31..0] CRC seed value */ + } CRC_1_SEED_VAL_REG_b; + }; + + union + { + __IOM uint32_t CRC_1_ADDR_MIN_REG; /*!< (@ 0x00000210) Minimum address to check the bus address range */ + + struct + { + __IOM uint32_t CRC_1_ADDR_MIN : 32; /*!< [31..0] Minimum address to check the bus address range */ + } CRC_1_ADDR_MIN_REG_b; + }; + + union + { + __IOM uint32_t CRC_1_ADDR_MAX_REG; /*!< (@ 0x00000214) Maximum address to check the bus address range */ + + struct + { + __IOM uint32_t CRC_1_ADDR_MAX : 32; /*!< [31..0] Maximum address to check the bus address range */ + } CRC_1_ADDR_MAX_REG_b; + }; + + union + { + __IOM uint32_t CRC_1_PSEUDO_VAL_REG; /*!< (@ 0x00000218) CRC pseudo value to accumulate manually */ + + struct + { + __IOM uint32_t CRC_1_PSEUDO_VAL : 32; /*!< [31..0] CRC pseudo value to accumulate manually */ + } CRC_1_PSEUDO_VAL_REG_b; + }; + __IM uint32_t RESERVED3; + + union + { + __IOM uint32_t CRC_1_CAL_VAL_REG; /*!< (@ 0x00000220) CRC calculation value */ + + struct + { + __IM uint32_t CRC_1_CAL_VAL : 32; /*!< [31..0] CRC calculation value */ + } CRC_1_CAL_VAL_REG_b; + }; + + union + { + __IOM uint32_t CRC_1_STA_REG; /*!< (@ 0x00000224) Status of CRC Calculation */ + + struct + { + uint32_t : 24; + __IM uint32_t CRC_1_CAL_STA : 2; /*!< [25..24] Status of CRC Calculation0 : Idle1 : Busy2 : Stop3 + * : Error */ + uint32_t : 6; + } CRC_1_STA_REG_b; + }; + + union + { + __IOM uint32_t CRC_1_CAL_VAL_REV_REG; /*!< (@ 0x00000228) CRC calculation reversed value */ + + struct + { + __IM uint32_t CRC_1_CAL_VAL_REV : 32; /*!< [31..0] CRC calculation reversed value */ + } CRC_1_CAL_VAL_REV_REG_b; + }; + __IM uint32_t RESERVED4[53]; + + union + { + __IOM uint32_t HW_CHS_REQ_CTRL_REG; /*!< (@ 0x00000300) Request of TCP CheckSum */ + + struct + { + __OM uint32_t HW_CHS_REQ_CLR : 1; /*!< [0..0] Clear Request of HW CheckSum, active high with auto clear + * function */ + __OM uint32_t HW_CHS_REQ_START : 1; /*!< [1..1] Start Request of HW CheckSum, active high with auto clear + * function */ + uint32_t : 30; + } HW_CHS_REQ_CTRL_REG_b; + }; + + union + { + __IOM uint32_t HW_CHS_OP_EN_REG; /*!< (@ 0x00000304) Operation Enable of TCP CheckSum */ + + struct + { + __IOM uint32_t HW_CHS_OP_EN : 1; /*!< [0..0] Operation Enable of HW CheckSum */ + uint32_t : 31; + } HW_CHS_OP_EN_REG_b; + }; + + union + { + __IOM uint32_t HW_CHS_CONFIG_REG; /*!< (@ 0x00000308) Configuration of TCP CheckSum */ + + struct + { + __IOM uint32_t HW_CHS_PATH_SEL : 5; /*!< [4..0] Path Selection of HW CheckSum0x00 : CPUS0x01 : DMA0x02 + * : RESERVED */ + uint32_t : 4; + __IOM uint32_t HW_CHS_PAR_TYPE : 2; /*!< [10..9] Parallel Type of HW CheckSum00 : Reserved01 : 16 bits10 + * : 32 bits */ + uint32_t : 5; + __IOM uint32_t HW_CHS_MST_TYPE : 5; /*!< [20..16] Master Type of HW CheckSum for slave path selection + * in Master Checking Enable0x00 : CPUS0x01 : DMA0x02 : RESERVED */ + uint32_t : 3; + __IOM uint32_t HW_CHS_CHK_ADDR : 1; /*!< [24..24] Address Checking Enable of HW CheckSum */ + uint32_t : 7; + } HW_CHS_CONFIG_REG_b; + }; + __IM uint32_t RESERVED5; + + union + { + __IOM uint32_t HW_CHS_ADDR_MIN_REG; /*!< (@ 0x00000310) Minimum address to check the bus address range */ + + struct + { + __IOM uint32_t HW_CHS_ADDR_MIN : 32; /*!< [31..0] Minimum address to check the bus address range */ + } HW_CHS_ADDR_MIN_REG_b; + }; + + union + { + __IOM uint32_t HW_CHS_ADDR_MAX_REG; /*!< (@ 0x00000314) Maximum address to check the bus address range */ + + struct + { + __IOM uint32_t HW_CHS_ADDR_MAX : 32; /*!< [31..0] Maximum address to check the bus address range */ + } HW_CHS_ADDR_MAX_REG_b; + }; + __IOM uint32_t HW_CHS_PSEUDO_VAL_REG; /*!< (@ 0x00000318) TCS pseudo value to accumulate manually */ + __IM uint32_t RESERVED6; + + union + { + __IOM uint32_t HW_CHS_CAL_VAL_REG; /*!< (@ 0x00000320) TCP CheckSum calculation Value */ + + struct + { + __IM uint32_t HW_CHS_CAL_VAL : 16; /*!< [15..0] HW CheckSum calculation Value */ + uint32_t : 16; + } HW_CHS_CAL_VAL_REG_b; + }; + + union + { + __IOM uint32_t HW_CHS_CAL_STA_REG; /*!< (@ 0x00000324) Status of TCP CheckSum calculation */ + + struct + { + __IM uint32_t HW_CHS_CAL_NUM : 20; /*!< [19..0] Number of HW CheckSum calculation bytes (Max. 1M Bytes) */ + uint32_t : 4; + __IM uint32_t HW_CHS_CAL_STA : 2; /*!< [25..24] Status of HW CheckSum calculation0 : Idle1 : Busy2 + * : Stop3 : Error */ + uint32_t : 6; + } HW_CHS_CAL_STA_REG_b; + }; +} HW_ACC_Type; /*!< Size = 808 (0x328) */ + +/* =========================================================================================================================== */ +/* ================ I2C ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I2C registers (I2C) + */ + +typedef struct /*!< (@ 0x40090000) I2C Structure */ +{ + union + { + __IOM uint32_t I2C_CON_REG; /*!< (@ 0x00000000) I2C Control Register */ + + struct + { + __IOM uint32_t I2C_MASTER_MODE : 1; /*!< [0..0] This bit controls whether the controller master is enabled.0 + * = Master disabled1 = Master enabledSoftware should ensure + * that if this bit is written with '1' then bit 6 should + * also be written with a '1'. */ + __IOM uint32_t I2C_SPEED : 2; /*!< [2..1] These bits control at which speed the controller operates.1 + * = Standard mode (100 kbit/s)2 = Fast mode (400 kbit/s)3 + * = High speed mode */ + __IOM uint32_t I2C_10BITADDR_SLAVE : 1; /*!< [3..3] When acting as a slave, this bit controls whether the + * controller responds to 7- or 10-bit addresses.0 = 7-bit + * addressing1 = 10-bit addressing */ + __IOM uint32_t I2C_10BITADDR_MASTER : 1; /*!< [4..4] Control whether the controller starts its transfers in + * 7- or 10-bit addressing mode when acting as a master.0 + * = 7-bit addressing1 = 10-bit addressing */ + __IOM uint32_t I2C_RESTART_EN : 1; /*!< [5..5] Determine whether RESTART conditions may be sent when + * acting as a master.0 = Disable1 = Enable */ + __IOM uint32_t I2C_SLAVE_DISABLE : 1; /*!< [6..6] Slave enabled or disabled after reset is applied, which + * means software does not have to configure the slave.0 = + * Slave is enabled.1 = Slave is disabled.Software should + * ensure that if this bit is written with '0', then bit 0 + * should also be written with a '0'. */ + __IOM uint32_t I2C_STOP_DET_IFADDRESSED : 1; /*!< [7..7] 1 = Slave issues STOP_DET intr only if addressed.0 = + * Slave issues STOP_DET intr always.During a general call + * address, this slave does not issue the STOP_DET interrupt + * if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds + * to the general call address by generating ACK. The STOP_DET + * interrupt is generated only when the transmitted address + * matches the slave address (SAR). */ + __IOM uint32_t I2C_TX_EMPTY_CTRL : 1; /*!< [8..8] This bit controls the generation of the TX_EMPTY interrupt + * as described in the IC_RAW_INTR_STAT register.1 = Controlled + * generation of TX_EMPTY interrupt.0 = Default behaviour + * of TX_EMPTY interrupt. */ + __IOM uint32_t I2C_RX_FIFO_FULL_HLD_CTRL : 1; /*!< [9..9] This bit controls whether DW_apb_i2c should hold the + * bus when the RX FIFO is physically full to its RX_BUFFER_DEPTH.1 + * = Hold bus when RX_FIFO is full.0 = Overflow when RX_FIFO + * is full. */ + __IM uint32_t I2C_STOP_DET_IF_MASTER_ACTIVE : 1; /*!< [10..10] In Master mode:1 = Issue the STOP_DET interrupt only + * when master is active.0 = Issue the STOP_DET irrespective + * of whether master is active or not. */ + uint32_t : 21; + } I2C_CON_REG_b; + }; + + union + { + __IOM uint32_t I2C_TAR_REG; /*!< (@ 0x00000004) I2C Target Address Register */ + + struct + { + __IOM uint32_t IC_TAR : 10; /*!< [9..0] This is the target address for any master transaction. + * When transmitting a General Call, these bits are ignored. + * To generate a START BYTE, the CPU needs to write only once + * into these bits.Note: If the IC_TAR and IC_SAR are the + * same, loopback exists but the FIFOs are shared between + * master and slave, so full loopback is not feasible. Only + * one direction loopback mode is supported (simplex), not + * duplex. A master cannot transmit to itself; it can transmit + * to only a slave.Write to this register succeed */ + __IOM uint32_t GC_OR_START : 1; /*!< [10..10] On readIf bit 11 (SPECIAL) is set to 1, then this bit + * indicates whether a General Call or START byte command + * is to be performed by the controller.0 = General Call Address + * - after issuing a General Call, only writes may be performed. + * Attempting to issue a read command results in setting bit + * 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The controller + * remains in General Call mode until the SPECIAL bit value + * (bit 11) is cleared.1 = START BYTEOn write1 = START byte + * transmission0 = */ + __IOM uint32_t SPECIAL : 1; /*!< [11..11] On readThis bit indicates whether software performs + * a General Call or START BYTE command.0 = Ignore bit 10 + * GC_OR_START and use IC_TAR normally.1 = Perform special + * I2C command as specified in GC_OR_START bit.On write1 = + * Enables programming of GENERAL_CALL or START_BYTE transmission.0 + * = Disables programming of GENERAL_CALL or START_BYTE transmission.Write + * to this register succeed only when IC_ENABLE[0] is set + * to 0. */ + uint32_t : 20; + } I2C_TAR_REG_b; + }; + + union + { + __IOM uint32_t I2C_SAR_REG; /*!< (@ 0x00000008) I2C Slave Address Register */ + + struct + { + __IOM uint32_t IC_SAR : 10; /*!< [9..0] The IC_SAR holds the slave address when the I2C is operating + * as a slave. For 7-bit addressing, only IC_SAR[6:0] is used. + * This register can be written only when the I2C interface + * is disabled, which corresponds to the IC_ENABLE register + * being set to 0. Write at other times have no effect.Write + * to this register succeed only when IC_ENABLE[0] is set + * to 0. */ + uint32_t : 22; + } I2C_SAR_REG_b; + }; + + union + { + __IOM uint32_t I2C_HS_MADDR_REG; /*!< (@ 0x0000000C) I2C High Speed Master Mode Code Address Register */ + + struct + { + __IOM uint32_t I2C_IC_HS_MAR : 3; /*!< [2..0] This bit field holds the value of the I2C HS mode master + * code. HS-mode master codes are reserved 8-bit codes (00001xxx) + * that are not used for slave addressing or other purposes. + * Each master has its unique master code; up to eight high-speed + * mode masters can be present on the same I2C bus system. + * Valid values are from 0 to 7. This register can be written + * only when the I2C interface is disabled, which corresponds + * to the IC_ENABLE[0] register being set to 0. Write at other + * times have no effect. */ + uint32_t : 29; + } I2C_HS_MADDR_REG_b; + }; + + union + { + __IOM uint32_t I2C_DATA_CMD_REG; /*!< (@ 0x00000010) I2C Rx/Tx Data Buffer and Command Register */ + + struct + { + __IOM uint32_t I2C_DAT : 8; /*!< [7..0] This register contains the data to be transmitted or + * received on the I2C bus. If you are writing to this register + * and want to perform a read, bits 7:0 (DAT) are ignored + * by the controller. However, when you read this register, + * these bits return the value of data received on the controller's + * interface. */ + __OM uint32_t I2C_CMD : 1; /*!< [8..8] This bit controls whether a read or a write is performed. + * This bit does not control the direction when the I2C Ctrl + * acts as a slave. It controls only the direction when it + * acts as a master.1 = Read0 = WriteWhen a command is entered + * in the TX FIFO, this bit distinguishes the write and read + * commands. In slave-receiver mode, this bit is a "don't + * care" because writes to this register are not required. + * In slave-transmitter mode, a "0" indicates that CPU data + * is to be transmitted and as DAT or IC_D */ + __OM uint32_t I2C_STOP : 1; /*!< [9..9] This bit controls whether a STOP is issued after the + * byte is sent or received.1 = STOP is issued after this + * byte, regardless of whether or not the TX FIFO is empty. + * If the TX FIFO is not empty, the master immediately tries + * to start a new transfer by issuing a START and arbitrating + * for the bus.0 = STOP is not issued after this byte, regardless + * of whether or not the TX FIFO is empty. If the TX FIFO + * is not empty, the master continues the current transfer + * by sending/receiving data bytes according to */ + __OM uint32_t I2C_RESTART : 1; /*!< [10..10] This bit controls whether a RESTART is issued before + * the byte is sent or received. 1 = If IC_RESTART_EN is 1, + * a RESTART is issued before the data is sent/received (according + * to the value of CMD), regardless of whether or not the + * transfer direction is changing from the previous command; + * if IC_RESTART_EN is 0, a STOP followed by a START is issued + * instead.0 = If IC_RESTART_EN is 1, a RESTART is issued + * only if the transfer direction is changing from the previous + * command; if IC_RESTART_EN is 0, a STOP */ + uint32_t : 21; + } I2C_DATA_CMD_REG_b; + }; + + union + { + __IOM uint32_t I2C_SS_SCL_HCNT_REG; /*!< (@ 0x00000014) Standard Speed I2C Clock SCL High Count Register */ + + struct + { + __IOM uint32_t IC_SS_SCL_HCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock high-period count for standard speed. + * This register can be written only when the I2C interface + * is disabled which corresponds to the IC_ENABLE register + * being set to 0. Write at other times have no effect.The + * minimum valid value is 6; hardware prevents values less + * than this being written, and if attempted results in 6 + * being set.NOTE: This register must not be program */ + uint32_t : 16; + } I2C_SS_SCL_HCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C_SS_SCL_LCNT_REG; /*!< (@ 0x00000018) Standard Speed I2C Clock SCL Low Count Register */ + + struct + { + __IOM uint32_t IC_SS_SCL_LCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock low period count for standard speed.This + * register can be written only when the I2C interface is + * disabled which corresponds to the I2C_ENABLE register being + * set to 0. Write at other times have no effect.The minimum + * valid value is 8; hardware prevents values less than this + * being written, and if attempted, results in 8 being set. */ + uint32_t : 16; + } I2C_SS_SCL_LCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C_FS_SCL_HCNT_REG; /*!< (@ 0x0000001C) Fast Speed I2C Clock SCL High Count Register */ + + struct + { + __IOM uint32_t IC_FS_SCL_HCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock high-period count for fast speed. It + * is used in high-speed mode to send the Master Code and + * START BYTE or General CALL. This register can be written + * only when the I2C interface is disabled, which corresponds + * to the I2C_ENABLE register being set to 0. Writes at other + * times have no effect.The minimum valid value is 6; hardware + * prevents values less than this being written */ + uint32_t : 16; + } I2C_FS_SCL_HCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C_FS_SCL_LCNT_REG; /*!< (@ 0x00000020) Fast Speed I2C Clock SCL Low Count Register */ + + struct + { + __IOM uint32_t IC_FS_SCL_LCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock low-period count for fast speed. It + * is used in high-speed mode to send the Master Code and + * START BYTE or General CALL. This register can be written + * only when the I2C interface is disabled, which corresponds + * to the I2C_ENABLE register being set to 0. Write at other + * times have no effect.The minimum valid value is 8; hardware + * prevents values less than this being written, */ + uint32_t : 16; + } I2C_FS_SCL_LCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C_HS_SCL_HCNT_REG; /*!< (@ 0x00000024) High Speed I2C Clock SCL High Count Register */ + + struct + { + __IOM uint32_t IC_HS_SCL_HCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock high period count for high speed. See + * "IC_CLK Frequency Configuration".The SCL High time depends + * on the loading of the bus. For 100 pF loading, the SCL + * High time is 60 ns; for 400 pF loading, the SCL High time + * is 120 ns. This register goes away and becomes read-only + * returning 0s if IC_MAX_SPEED_MODE != high.This register + * can be written only when the I2C interface i */ + uint32_t : 16; + } I2C_HS_SCL_HCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C_HS_SCL_LCNT_REG; /*!< (@ 0x00000028) High Speed I2C Clock SCL Low Count Register */ + + struct + { + __IOM uint32_t IC_HS_SCL_LCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock low period count for high speed. For + * more information, see "IC_CLK Frequency Configuration".The + * SCL low time depends on the loading of the bus. For 100 + * pF loading, the SCL low time is 160 ns; for 400 pF loading, + * the SCL low time is 320 ns. This register goes away and + * becomes read-only returning 0s if IC_MAX_SPEED_MODE != + * high.This register can be written only when */ + uint32_t : 16; + } I2C_HS_SCL_LCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C_INTR_STAT_REG; /*!< (@ 0x0000002C) I2C Interrupt Status Register */ + + struct + { + __IM uint32_t R_RX_UNDER : 1; /*!< [0..0] Set if the processor attempts to read the receive buffer + * when it is empty by reading from the IC_DATA_CMD register. + * If the module is disabled (I2C_ENABLE[0]=0), this bit keeps + * its level until the master or slave state machines go into + * idle, and when ic_en goes to 0, this interrupt is cleared. */ + __IM uint32_t R_RX_OVER : 1; /*!< [1..1] Set if the receive buffer is completely filled to 32 + * and an additional byte is received from an external I2C + * device. The controller acknowledges this, but any data + * bytes received after the FIFO is full are lost. If the + * module is disabled (I2C_ENABLE[0]=0), this bit keeps its + * level until the master or slave state machines go into + * idle, and when ic_en goes to 0, this interrupt is cleared. */ + __IM uint32_t R_RX_FULL : 1; /*!< [2..2] Set when the receive buffer reaches or goes above the + * RX_TL threshold in the I2C_RX_TL register. It is automatically + * cleared by hardware when buffer level goes below the threshold. + * If the module is disabled (I2C_ENABLE[0]=0), the RX FIFO + * is flushed and held in reset; therefore the RX FIFO is + * not full. So this bit is cleared once, the I2C_ENABLE bit + * 0 is programmed with a 0 regardless of the activity that + * continues. */ + __IM uint32_t R_TX_OVER : 1; /*!< [3..3] Set during transmit if the transmit buffer is filled + * to 32 and the processor attempts to issue another I2C command + * by writing to the IC_DATA_CMD register. When the module + * is disabled, this bit keeps its level until the master + * or slave state machines go into idle, and when ic_en goes + * to 0, this interrupt is cleared */ + __IM uint32_t R_TX_EMPTY : 1; /*!< [4..4] This bit is set to 1 when the transmit buffer is at or + * below the threshold value set in the I2C_TX_TL register. + * It is automatically cleared by hardware when the buffer + * level goes above the threshold. When the IC_ENABLE bit + * 0 is 0, the TX FIFO is flushed and held in reset. There + * the TX FIFO looks like it has no data within it, so this + * bit is set to 1, provided there is activity in the master + * or slave state machines. When there is no longer activity, + * then with ic_en=0, this bit is set to 0. */ + __IM uint32_t R_RD_REQ : 1; /*!< [5..5] This bit is set to 1 when the controller is acting as + * a slave and another I2C master is attempting to read data + * from the controller. The controller holds the I2C bus in + * a wait state (SCL=0) until this interrupt is serviced, + * which means that the slave has been addressed by a remote + * master that is asking for data to be transferred. The processor + * must respond to this interrupt and then write the requested + * data to the I2C_DATA_CMD register. This bit is set to 0 + * just after the processor reads the I2C_CLR_RD_R */ + __IM uint32_t R_TX_ABRT : 1; /*!< [6..6] This bit indicates if the controller, as an I2C transmitter, + * is unable to complete the intended actions on the contents + * of the transmit FIFO. This situation can occur both as + * an I2C master or an I2C slave, and is referred to as a + * "transmit abort".When this bit is set to 1, the I2C_TX_ABRT_SOURCE + * register indicates the reason why the transmit abort takes + * places.NOTE: The controller flushes/resets/empties the + * TX FIFO whenever this bit is set. The TX FIFO remains in + * this flushed state until the regi */ + __IM uint32_t R_RX_DONE : 1; /*!< [7..7] When the controller is acting as a slave-transmitter, + * this bit is set to 1 if the master does not acknowledge + * a transmitted byte. This occurs on the last byte of the + * transmission, indicating that the transmission is done. */ + __IM uint32_t R_ACTIVITY : 1; /*!< [8..8] This bit captures I2C Ctrl activity and stays set until + * it is cleared. There are four ways to clear it:=> Disabling + * the I2C Ctrl=> Reading the IC_CLR_ACTIVITY register=> Reading + * the IC_CLR_INTR register=> System resetOnce this bit is + * set, it stays set unless one of the four methods is used + * to clear it. Even if the controller module is idle, this + * bit remains set until cleared, indicating that there was + * activity on the bus. */ + __IM uint32_t R_STOP_DET : 1; /*!< [9..9] Indicate whether a STOP condition has occurred on the + * I2C interface regardless of whether controller is operating + * in slave or master mode. */ + __IM uint32_t R_START_DET : 1; /*!< [10..10] Indicate whether a START or RESTART condition has occurred + * on the I2C interface regardless of whether controller is + * operating in slave or master mode. */ + __IM uint32_t R_GEN_CALL : 1; /*!< [11..11] Set only when a General Call address is received and + * it is acknowledged. It stays set until it is cleared either + * by disabling controller or when the CPU reads bit 0 of + * the I2C_CLR_GEN_CALL register. The controller stores the + * received data in the RX buffer. */ + __IM uint32_t R_RESTART_DET : 1; /*!< [12..12] Indicate whether a RESTART condition has occurred on + * the I2C interface when DW_apb_i2c is operating in Slave + * mode and the slave is being addressed.Enabled only when + * IC_SLV_RESTART_DET_EN=1.Note: However, in high-speed mode + * or during a START BYTE transfer, the RESTART comes before + * the address field as per the I2C protocol. In this case, + * the slave is not the addressed slave when the RESTART is + * issued, therefore DW_apb_i2c does not generate the RESTART_DET + * interrupt. */ + __IM uint32_t R_MASTER_ON_HOLD : 1; /*!< [13..13] Indicate whether master is holding the bus and TX FIFO + * is empty. Enabled only when I2C_DYNAMIC_TAR_UPDATE=1 and + * IC_EMPTYFIFO_HOLD_MASTER_EN=1. */ + __IM uint32_t R_SCL_STUCK_AT_LOW : 1; /*!< [14..14] 1 = R_SCL_STUCK_AT_LOW interrupt is active.0 = R_SCL_STUCK_AT_LOW + * interrupt is inactive. */ + uint32_t : 17; + } I2C_INTR_STAT_REG_b; + }; + + union + { + __IOM uint32_t I2C_INTR_MASK_REG; /*!< (@ 0x00000030) I2C Interrupt Mask Register */ + + struct + { + __IOM uint32_t M_RX_UNDER : 1; /*!< [0..0] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RX_OVER : 1; /*!< [1..1] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RX_FULL : 1; /*!< [2..2] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_TX_OVER : 1; /*!< [3..3] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_TX_EMPTY : 1; /*!< [4..4] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RD_REQ : 1; /*!< [5..5] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_TX_ABRT : 1; /*!< [6..6] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RX_DONE : 1; /*!< [7..7] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_ACTIVITY : 1; /*!< [8..8] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_STOP_DET : 1; /*!< [9..9] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_START_DET : 1; /*!< [10..10] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_GEN_CALL : 1; /*!< [11..11] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RESTART_DET : 1; /*!< [12..12] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_MASTER_ON_HOLD : 1; /*!< [13..13] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IM uint32_t M_SCL_STUCK_AT_LOW : 1; /*!< [14..14] M_SCL_STUCK_AT_LOW Register field Reserved bits. */ + uint32_t : 17; + } I2C_INTR_MASK_REG_b; + }; + + union + { + __IOM uint32_t I2C_RAW_INTR_STAT_REG; /*!< (@ 0x00000034) I2C Raw Interrupt Status Register */ + + struct + { + __IM uint32_t RX_UNDER : 1; /*!< [0..0] Set if the processor attempts to read the receive buffer + * when it is empty by reading from the IC_DATA_CMD register. + * If the module is disabled (I2C_ENABLE[0]=0), this bit keeps + * its level until the master or slave state machines go into + * idle, and when ic_en goes to 0, this interrupt is cleared. */ + __IM uint32_t RX_OVER : 1; /*!< [1..1] Set if the receive buffer is completely filled to 32 + * and an additional byte is received from an external I2C + * device. The controller acknowledges this, but any data + * bytes received after the FIFO is full are lost. If the + * module is disabled (I2C_ENABLE[0]=0), this bit keeps its + * level until the master or slave state machines go into + * idle, and when ic_en goes to 0, this interrupt is cleared. */ + __IM uint32_t RX_FULL : 1; /*!< [2..2] Set when the receive buffer reaches or goes above the + * RX_TL threshold in the I2C_RX_TL register. It is automatically + * cleared by hardware when buffer level goes below the threshold. + * If the module is disabled (I2C_ENABLE[0]=0), the RX FIFO + * is flushed and held in reset; therefore the RX FIFO is + * not full. So this bit is cleared once the I2C_ENABLE bit + * 0 is programmed with a 0, regardless of the activity that + * continues. */ + __IM uint32_t TX_OVER : 1; /*!< [3..3] Set during transmit if the transmit buffer is filled + * to 32 and the processor attempts to issue another I2C command + * by writing to the IC_DATA_CMD register. When the module + * is disabled, this bit keeps its level until the master + * or slave state machines go into idle, and when ic_en goes + * to 0, this interrupt is cleared . */ + __IM uint32_t TX_EMPTY : 1; /*!< [4..4] This bit is set to 1 when the transmit buffer is at or + * below the threshold value set in the I2C_TX_TL register. + * It is automatically cleared by hardware when the buffer + * level goes above the threshold. When the IC_ENABLE bit + * 0 is 0, the TX FIFO is flushed and held in reset. There + * the TX FIFO looks like it has no data within it, so this + * bit is set to 1, provided there is activity in the master + * or slave state machines. When there is no longer activity, + * then with ic_en=0, this bit is set to 0. */ + __IM uint32_t RD_REQ : 1; /*!< [5..5] This bit is set to 1 when I2C Ctrl is acting as a slave + * and another I2C master is attempting to read data from + * the controller. The controller holds the I2C bus in a wait + * state (SCL=0) until this interrupt is serviced, which means + * that the slave has been addressed by a remote master that + * is asking for data to be transferred. The processor must + * respond to this interrupt and then write the requested + * data to the I2C_DATA_CMD register. This bit is set to 0 + * just after the processor reads the I2C_CLR_RD_REQ reg */ + __IM uint32_t TX_ABRT : 1; /*!< [6..6] This bit indicates if the controller, as an I2C transmitter, + * is unable to complete the intended actions on the contents + * of the transmit FIFO. This situation can occur both as + * an I2C master or an I2C slave, and is referred to as a + * "transmit abort".When this bit is set to 1, the I2C_TX_ABRT_SOURCE + * register indicates the reason why the transmit abort takes + * places.NOTE: The controller flushes/resets/empties the + * TX FIFO whenever this bit is set. The TX FIFO remains in + * this flushed state until the regi */ + __IM uint32_t RX_DONE : 1; /*!< [7..7] When the controller is acting as a slave-transmitter, + * this bit is set to 1 if the master does not acknowledge + * a transmitted byte. This occurs on the last byte of the + * transmission, indicating that the transmission is done. */ + __IM uint32_t ACTIVITY : 1; /*!< [8..8] This bit captures I2C Ctrl activity and stays set until + * it is cleared. There are four ways to clear it:=> Disabling + * the I2C Ctrl=> Reading the IC_CLR_ACTIVITY register=> Reading + * the IC_CLR_INTR register=> System resetOnce this bit is + * set, it stays set unless one of the four methods is used + * to clear it. Even if the controller module is idle, this + * bit remains set until cleared, indicating that there was + * activity on the bus. */ + __IM uint32_t STOP_DET : 1; /*!< [9..9] Indicate whether a STOP condition has occurred on the + * I2C interface regardless of whether controller is operating + * in slave or master mode. */ + __IM uint32_t START_DET : 1; /*!< [10..10] Indicate whether a START or RESTART condition has occurred + * on the I2C interface regardless of whether controller is + * operating in slave or master mode. */ + __IM uint32_t GEN_CALL : 1; /*!< [11..11] Set only when a General Call address is received and + * it is acknowledged. It stays set until it is cleared either + * by disabling controller or when the CPU reads bit 0 of + * the I2C_CLR_GEN_CALL register. I2C Ctrl stores the received + * data in the Rx buffer. */ + __IM uint32_t RESTART_DET : 1; /*!< [12..12] Indicate whether a RESTART condition has occurred on + * the I2C interface when DW_apb_i2c is operating in Slave + * mode and the slave is being addressed.Enabled only when + * IC_SLV_RESTART_DET_EN=1.Note: However, in high-speed mode + * or during a START BYTE transfer, the RESTART comes before + * the address field as per the I2C protocol. In this case, + * the slave is not the addressed slave when the RESTART is + * issued, therefore DW_apb_i2c does not generate the RESTART_DET + * interrupt. */ + __IM uint32_t MASTER_ON_HOLD : 1; /*!< [13..13] ndicate whether master is holding the bus and TX FIFO + * is empty. Enabled only when I2C_DYNAMIC_TAR_UPDATE=1 and + * IC_EMPTYFIFO_HOLD_MASTER_EN=1. */ + __IM uint32_t SCL_STUCK_AT_LOW : 1; /*!< [14..14] CL_STUCK_AT_LOW Register field Reserved bits. */ + uint32_t : 17; + } I2C_RAW_INTR_STAT_REG_b; + }; + + union + { + __IOM uint32_t I2C_RX_TL_REG; /*!< (@ 0x00000038) I2C Receive FIFO Threshold Register */ + + struct + { + __IOM uint32_t RX_TL : 5; /*!< [4..0] Receive FIFO Threshold Level Controls the level of entries + * (or above) that triggers the RX_FULL interrupt (bit 2 in + * I2C_RAW_INTR_STAT register). The valid range is 0-31, with + * the additional restriction that hardware does not allow + * this value to be set to a value larger than the depth of + * the buffer. If an attempt is made to do that, the actual + * value set will be the maximum depth of the buffer. A value + * of 0 sets the threshold for 1 entry, and a value of 31 + * sets the threshold for 32 entries. */ + uint32_t : 27; + } I2C_RX_TL_REG_b; + }; + + union + { + __IOM uint32_t I2C_TX_TL_REG; /*!< (@ 0x0000003C) I2C Transmit FIFO Threshold Register */ + + struct + { + __IOM uint32_t TX_TL : 5; /*!< [4..0] Transmit FIFO Threshold Level Controls the level of entries + * (or below) that trigger the TX_EMPTY interrupt (bit 4 in + * I2C_RAW_INTR_STAT register). The valid range is 0-31, with + * the additional restriction that it may not be set to value + * larger than the depth of the buffer. If an attempt is made + * to do that, the actual value set will be the maximum depth + * of the buffer. A value of 0 sets the threshold for 0 entries, + * and a value of 31 sets the threshold for 32 entries. */ + uint32_t : 27; + } I2C_TX_TL_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_INTR_REG; /*!< (@ 0x00000040) Clear Combined and Individual Interrupt Register */ + + struct + { + __IM uint32_t CLR_INTR : 1; /*!< [0..0] Read this register to clear the combined interrupt, all + * individual interrupts, and the I2C_TX_ABRT_SOURCE register. + * This bit does not clear hardware clearable interrupts but + * software clearable interrupts. See Bit 9 of the I2C_TX_ABRT_SOURCE + * register for an exception to clearing I2C_TX_ABRT_SOURCE. */ + uint32_t : 31; + } I2C_CLR_INTR_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_RX_UNDER_REG; /*!< (@ 0x00000044) Clear RX_UNDER Interrupt Register */ + + struct + { + __IM uint32_t CLR_RX_UNDER : 1; /*!< [0..0] Read this register to clear the RX_UNDER interrupt (bit + * 0) of theI2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C_CLR_RX_UNDER_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_RX_OVER_REG; /*!< (@ 0x00000048) Clear RX_OVER Interrupt Register */ + + struct + { + __IM uint32_t CLR_RX_OVER : 1; /*!< [0..0] Read this register to clear the RX_OVER interrupt (bit + * 1) of theI2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C_CLR_RX_OVER_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_TX_OVER_REG; /*!< (@ 0x0000004C) Clear TX_OVER Interrupt Register */ + + struct + { + __IM uint32_t CLR_TX_OVER : 1; /*!< [0..0] Read this register to clear the TX_OVER interrupt (bit + * 3) of the I2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C_CLR_TX_OVER_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_RD_REQ_REG; /*!< (@ 0x00000050) Clear RD_REQ Interrupt Register */ + + struct + { + __IM uint32_t CLR_RD_REQ : 1; /*!< [0..0] Read this register to clear the RD_REQ interrupt (bit + * 5) of the I2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C_CLR_RD_REQ_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_TX_ABRT_REG; /*!< (@ 0x00000054) Clear TX_ABRT Interrupt Register */ + + struct + { + __IM uint32_t CLR_TX_ABRT : 1; /*!< [0..0] Read this register to clear the TX_ABRT interrupt (bit + * 6) of theIC_RAW_INTR_STAT register, and the I2C_TX_ABRT_SOURCE + * register. This also releases the TX FIFO from the flushed/reset + * state, allowing more writes to the TX FIFO. See Bit 9 of + * the I2C_TX_ABRT_SOURCE register for an exception to clearing + * IC_TX_ABRT_SOURCE. */ + uint32_t : 31; + } I2C_CLR_TX_ABRT_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_RX_DONE_REG; /*!< (@ 0x00000058) Clear RX_DONE Interrupt Register */ + + struct + { + __IM uint32_t CLR_RX_DONE : 1; /*!< [0..0] Read this register to clear the RX_DONE interrupt (bit + * 7) of theI2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C_CLR_RX_DONE_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_ACTIVITY_REG; /*!< (@ 0x0000005C) Clear ACTIVITY Interrupt Register */ + + struct + { + __IM uint32_t CLR_ACTIVITY : 1; /*!< [0..0] Reading this register clears the ACTIVITY interrupt if + * the I2C is not active anymore. If the I2C module is still + * active on the bus, the ACTIVITY interrupt bit continues + * to be set. It is automatically cleared by hardware if the + * module is disabled and if there is no further activity + * on the bus. The value read from this register to get status + * of the ACTIVITY interrupt (bit 8) of the IC_RAW_INTR_STAT + * register. */ + uint32_t : 31; + } I2C_CLR_ACTIVITY_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_STOP_DET_REG; /*!< (@ 0x00000060) Clear STOP_DET Interrupt Register */ + + struct + { + __IM uint32_t CLR_STOP_DET : 1; /*!< [0..0] Read this register to clear the STOP_DET interrupt (bit + * 9) of the IC_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C_CLR_STOP_DET_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_START_DET_REG; /*!< (@ 0x00000064) Clear START_DET Interrupt Register */ + + struct + { + __IM uint32_t CLR_START_DET : 1; /*!< [0..0] Read this register to clear the START_DET interrupt (bit + * 10) of the IC_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C_CLR_START_DET_REG_b; + }; + + union + { + __IOM uint32_t I2C_CLR_GEN_CALL_REG; /*!< (@ 0x00000068) Clear GEN_CALL Interrupt Register */ + + struct + { + __IM uint32_t CLR_GEN_CALL : 1; /*!< [0..0] Read this register to clear the GEN_CALL interrupt (bit + * 11) ofI2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C_CLR_GEN_CALL_REG_b; + }; + + union + { + __IOM uint32_t I2C_ENABLE_REG; /*!< (@ 0x0000006C) I2C Enable Register */ + + struct + { + __IOM uint32_t I2C_EN : 1; /*!< [0..0] Control whether the controller is enabled.0 = Disable + * the controller (TX and RX FIFOs are held in an erased state)1 + * = Enable the controllerSoftware can disable the controller + * while it is active. However, it is important that care + * be taken to ensure that the controller is disabled properly. + * When the controller is disabled, the following occurs:* + * The TX FIFO and RX FIFO get flushed.* Status bits in the + * IC_INTR_STAT register are still active until the controller + * goes into IDLE state. */ + __IOM uint32_t I2C_ABORT : 1; /*!< [1..1] The software can abort the I2C transfer in master mode + * by setting this bit. The software can set this bit only + * when ENABLE is already set; otherwise, the controller ignores + * any write to ABORT bit. The software cannot clear the ABORT + * bit once set. In response to an ABORT, the controller issues + * a STOP and flushes the TX FIFO after completing the current + * transfer, then sets the TX_ABORT interrupt after the abort + * operation. The ABORT bit is cleared automatically after + * the abort operation. */ + __IOM uint32_t I2C_TX_CMD_BLOCK : 1; /*!< [2..2] In Master mode:1 = Block the transmission of data on + * I2C bus even if TX FIFO has data to transmit.0.= The transmission + * of data starts on I2C bus automatically as soon as the + * first data is available in the TX FIFO. */ + uint32_t : 29; + } I2C_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t I2C_STATUS_REG; /*!< (@ 0x00000070) I2C Status Register */ + + struct + { + __IM uint32_t I2C_ACTIVITY : 1; /*!< [0..0] I2C Activity Status. */ + __IM uint32_t TFNF : 1; /*!< [1..1] Transmit FIFO Not Full. Set when the transmit FIFO contains + * one or more empty locations, and is cleared when the FIFO + * is full.0 = Transmit FIFO is full.1 = Transmit FIFO is + * not full. */ + __IM uint32_t TFE : 1; /*!< [2..2] Transmit FIFO Completely Empty. When the transmit FIFO + * is completely empty, this bit is set. When it contains + * one or more valid entries, this bit is cleared. This bit + * field does not request an interrupt.0 = Transmit FIFO is + * not empty.1 = Transmit FIFO is empty. */ + __IM uint32_t RFNE : 1; /*!< [3..3] Receive FIFO Not Empty. This bit is set when the receive + * FIFO contains one or more entries; it is cleared when the + * receive FIFO is empty.0 = Receive FIFO is empty.1 = Receive + * FIFO is not empty. */ + __IM uint32_t RFF : 1; /*!< [4..4] Receive FIFO Completely Full. When the receive FIFO is + * completely full, this bit is set. When the receive FIFO + * contains one or more empty location, this bit is cleared.0 + * = Receive FIFO is not full.1 = Receive FIFO is full. */ + __IM uint32_t MST_ACTIVITY : 1; /*!< [5..5] Master FSM Activity Status. When the Master Finite State + * Machine (FSM) is not in the IDLE state, this bit is set.0 + * = Master FSM is in IDLE state so the Master part of the + * controller is not Active.1 = Master FSM is not in IDLE + * state so the Master part of the controller is Active. */ + __IM uint32_t SLV_ACTIVITY : 1; /*!< [6..6] Slave FSM Activity Status. When the Slave Finite State + * Machine (FSM) is not in the IDLE state, this bit is set.0 + * = Slave FSM is in IDLE state so the Slave part of the controller + * is not Active.1 = Slave FSM is not in IDLE state so the + * Slave part of the controller is Active. */ + __IM uint32_t MST_HOLD_TX_FIFO_EMPTY : 1; /*!< [7..7] The DW_apb_i2c master stalls the write transfer when + * TX FIFO is empty, and the the last byte does not have the + * Stop bit set. This bit indicates the BUS hold when the + * master holds the bus because of the TX FIFO being empty, + * and the the previous transferred command does not have + * the Stop bit set.1 = Master holds the bus due to TX FIFO + * is empty.0 = Master is not holding the bus or Bus hold + * is not due to TX FIFO is empty. */ + __IM uint32_t MST_HOLD_RX_FIFO_FULL : 1; /*!< [8..8] This bit indicates the BUS Hold in Master mode due to + * RX FIFO is Full and additional byte is received.1 = Master + * holds the bus due to RX FIFO is full.0 = Master is not + * holding the bus or Bus hold is not due to RX FIFO is full. */ + __IM uint32_t SLV_HOLD_TX_FIFO_EMPTY : 1; /*!< [9..9] This bit indicates the BUS Hold in Slave mode for the + * Read request when the TX FIFO is empty. The Bus is in hold + * until the TX FIFO has data to Transmit for the read request.1 + * = Slave holds the bus due to TX FIFO is empty.0 = Slave + * is not holding the bus or Bus hold is not due to TX FIFO + * is empty. */ + __IM uint32_t LV_HOLD_RX_FIFO_FULL : 1; /*!< [10..10] This bit indicates the BUS Hold in Slave mode due to + * RX FIFO is Full and an additional byte has been received.1 + * = Slave holds the bus due to Rx FIFO is full.0 = Slave + * is not holding the bus or Bus hold is not due to Rx FIFO + * is full. */ + uint32_t : 21; + } I2C_STATUS_REG_b; + }; + + union + { + __IOM uint32_t I2C_TXFLR_REG; /*!< (@ 0x00000074) I2C Transmit FIFO Level Register */ + + struct + { + __IM uint32_t TXFLR : 6; /*!< [5..0] Transmit FIFO Level. Contain the number of valid data + * entries in the transmit FIFO. Size is constrained by the + * TXFLR value. */ + uint32_t : 26; + } I2C_TXFLR_REG_b; + }; + + union + { + __IOM uint32_t I2C_RXFLR_REG; /*!< (@ 0x00000078) I2C Receive FIFO Level Register */ + + struct + { + __IM uint32_t RXFLR : 6; /*!< [5..0] Receive FIFO Level. Contain the number of valid data + * entries in the receive FIFO. Size is constrained by the + * RXFLR value. */ + uint32_t : 26; + } I2C_RXFLR_REG_b; + }; + + union + { + __IOM uint32_t I2C_SDA_HOLD_REG; /*!< (@ 0x0000007C) I2C SDA Hold Time Length Register */ + + struct + { + __IOM uint32_t I2C_SDA_TX_HOLD : 16; /*!< [15..0] Set the required SDA hold time in units of ic_clk period + * when transmitting. */ + __IOM uint32_t I2C_SDA_RX_HOLD : 8; /*!< [23..16] Set the required SDA hold time in units of ic_clk period + * when receiving. */ + uint32_t : 8; + } I2C_SDA_HOLD_REG_b; + }; + + union + { + __IOM uint32_t I2C_TX_ABRT_SOURCE_REG; /*!< (@ 0x00000080) I2C Transmit Abort Source Register */ + + struct + { + __IM uint32_t ABRT_7B_ADDR_NOACK : 1; /*!< [0..0] Master-Transmitter or Master-Receiver: Master is in 7-bit + * addressing mode and the address sent was not acknowledged + * by any slave.1 = This abort is generated because of NOACK + * for 7-bit address.0 = This abort is not generated. */ + __IM uint32_t ABRT_10ADDR1_NOACK : 1; /*!< [1..1] Master-Transmitter or Master-Receiver: Master is in 10-bit + * address mode and the first 10-bit address byte was not + * acknowledged by any slave.1 = Byte 1 of 10-bit address + * not ACKed by any slave.0 = This abort is not generated. */ + __IM uint32_t ABRT_10ADDR2_NOACK : 1; /*!< [2..2] Master-Transmitter or Master-Receiver: Master is in 10-bit + * address mode and the second address byte of the 10-bit + * address was not acknowledged by any slave.1 = Byte 2 of + * 10-bit address not ACKed by any slave.0 = This abort is + * not generated. */ + __IM uint32_t ABRT_TXDATA_NOACK : 1; /*!< [3..3] Master-Transmitter: This is a master-mode only bit. Master + * has received an acknowledgement for the address, but when + * it sent data byte(s) following the address, it did not + * receive an acknowledge from the remote slave(s).1 = Transmitted + * data not ACKed by addressed slave.0 = Transmitted data + * non-ACKed by addressed slave-scenario not present. */ + __IM uint32_t ABRT_GCALL_NOACK : 1; /*!< [4..4] Master-Transmitter: The controller in master mode sent + * a General Call and no slave on the bus acknowledged the + * General Call.1 = GCALL not ACKed by any slave.0 = GCALL + * not ACKed by any slave-scenario not present. */ + __IM uint32_t ABRT_GCALL_READ : 1; /*!< [5..5] Master-Transmitter: The controller in master mode sent + * a General Call but the user programmed the byte following + * the General Call to be a read from the bus (IC_DATA_CMD[9] + * is set to 1).1 = GCALL is followed by read from bus.0 = + * GCALL is followed by read from bus-scenario not present. */ + __IM uint32_t ABRT_HS_ACKDET : 1; /*!< [6..6] Master: Master is in High Speed mode and the High Speed + * Master code was acknowledged (wrong behavior).1 = HS Master + * code ACKed in HS Mode.0 = HS Master code ACKed in HS Mode- + * scenario not present. */ + __IM uint32_t ABRT_SBYTE_ACKDET : 1; /*!< [7..7] Master: Master has sent a START Byte and the START Byte + * was acknowledged (wrong behavior). 1 = ACK detected for + * START byte.0 = ACK detected for START byte- scenario not + * present. */ + __IM uint32_t ABRT_HS_NORSTRT : 1; /*!< [8..8] Master-Transmitter or Master-Receiver: The restart is + * disabled (IC_RESTART_EN bit (I2C_CON[5]) = 0) and the user + * is trying to use the master to transfer data in High Speed + * mode.1 = User trying to switch Master to HS mode when RESTART + * disabled.0 = User trying to switch Master to HS mode when + * RESTART disabled- scenario not present. */ + __IM uint32_t ABRT_SBYTE_NORSTRT : 1; /*!< [9..9] Master: To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT + * must be fixed first; restart must be enabled (I2C_CON[5]=1), + * the SPECIAL bit must be cleared (I2C_TAR[11]), or the GC_OR_START + * bit must be cleared (I2C_TAR[10]). Once the source of the + * ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared + * in the same manner as other bits in this register. If the + * source of the ABRT_SBYTE_NORSTRT is not fixed before attempting + * to clear this bit, bit 9 clears for one cycle and then + * gets re-asserted. 1: The res */ + __IM uint32_t ABRT_10B_RD_NORSTRT : 1; /*!< [10..10] Master-Receiver: The restart is disabled (IC_RESTART_EN + * bit (I2C_CON[5]) = 0) and the master sends a read command + * in 10-bit addressing mode.1 = Master trying to read in + * 10-bit addressing mode when RESTART disabled.0 = Master + * not trying to read in 10-bit addressing mode when RESTART + * disabled. */ + __IM uint32_t ABRT_MASTER_DIS : 1; /*!< [11..11] Master-Transmitter or Master-Receiver: User tries to + * initiate a Master operation with the Master mode disabled.1 + * = User intitating master operation when MASTER disable.0 + * = User initiating master operation when MASTER disabled- + * scenario not present. */ + __IM uint32_t ARB_LOST : 1; /*!< [12..12] Master-Transmitter or Slave-Transmitter: Master has + * lost arbitration, or if I2C_TX_ABRT_SOURCE[14] is also + * set, then the slave transmitter has lost arbitration. Note: + * I2C can be both master and slave at the same time.1 = Master + * or Slave-Transmitter lost arbitration.0 = Master or Slave-Transmitter + * lost arbitration- scenario not present. */ + __IM uint32_t ABRT_SLVFLUSH_TXFIFO : 1; /*!< [13..13] Slave-Transmitter: Slave has received a read command + * and some data exists in the TX FIFO so the slave issues + * a TX_ABRT interrupt to flush old data in TX FIFO.1 = Slave + * flushes existing data in TX-FIFO upon getting read command.0 + * = Slave flushes existing data in TX-FIFO upon getting read + * command- scenario not present. */ + __IM uint32_t ABRT_SLV_ARBLOST : 1; /*!< [14..14] Slave-Transmitter: Slave lost the bus while transmitting + * data to a remote master. I2C_TX_ABRT_SOURCE[12] is set + * at the same time. Note: Even though the slave never "owns" + * the bus, something could go wrong on the bus. This is a + * fail safe check. For instance, during a data transmission + * at the low-to-high transition of SCL, if what is on the + * data bus is not what is supposed to be transmitted, then + * the controller no longer own the bus.1 = Slave lost arbitration + * to remote master.0 = Slave lost arbitra */ + __IM uint32_t ABRT_SLVRD_INTX : 1; /*!< [15..15] Slave-Transmitter: When the processor side responds + * to a slave mode request for data to be transmitted to a + * remote master and a user writes a 1 in CMD (bit 8) of 2IC_DATA_CMD + * register.1 = Slave trying to transmit to remote master + * in read mode.0 = Slave trying to transmit to remote master + * in read mode- scenario not present. */ + __IM uint32_t ABRT_USER_ABRT : 1; /*!< [16..16] Master-Transmitter: This is a master-mode-only bit. + * Master has detected the transfer abort (IC_ENABLE[1]). */ + uint32_t : 15; + } I2C_TX_ABRT_SOURCE_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t I2C_DMA_CR_REG; /*!< (@ 0x00000088) DMA Control Register */ + + struct + { + __IOM uint32_t RDMAE : 1; /*!< [0..0] Receive DMA Enable. This bit enables/disables the receive + * FIFO DMA channel.0 = Receive DMA disabled.1 = Receive DMA + * enabled. */ + __IOM uint32_t TDMAE : 1; /*!< [1..1] Transmit DMA Enable. This bit enables/disables the transmit + * FIFO DMA channel.0 = Transmit DMA disabled.1 = Transmit + * DMA enabled. */ + uint32_t : 30; + } I2C_DMA_CR_REG_b; + }; + + union + { + __IOM uint32_t I2C_DMA_TDLR_REG; /*!< (@ 0x0000008C) DMA Transmit Data Level Register */ + + struct + { + __IOM uint32_t DMATDL : 5; /*!< [4..0] Transmit Data Level. This bit field controls the level + * at which a DMA request is made by the transmit logic. It + * is equal to the watermark level; that is, the dma_tx_req + * signal is generated when the number of valid data entries + * in the transmit FIFO is equal to or below this field value, + * and TDMAE = 1. */ + uint32_t : 27; + } I2C_DMA_TDLR_REG_b; + }; + + union + { + __IOM uint32_t I2C_DMA_RDLR_REG; /*!< (@ 0x00000090) I2C Receive Data Level Register */ + + struct + { + __IOM uint32_t DMARDL : 5; /*!< [4..0] Receive Data Level. This bit field controls the level + * at which a DMA request is made by the receive logic. The + * watermark level = DMARDL+1; that is, dma_rx_req is generated + * when the number of valid data entries in the receive FIFO + * is equal to or more than this field value + 1, and RDMAE + * =1. For instance, when DMARDL is 0, then dma_rx_req is + * asserted when 1 or more data entries are present in the + * receive FIFO. */ + uint32_t : 27; + } I2C_DMA_RDLR_REG_b; + }; + + union + { + __IOM uint32_t I2C_SDA_SETUP_REG; /*!< (@ 0x00000094) I2C SDA Setup Register */ + + struct + { + __IOM uint32_t SDA_SETUP : 8; /*!< [7..0] SDA Setup.This register controls the amount of time delay + * (number of I2C clock periods) between the rising edge of + * SCL and SDA changing by holding SCL low when I2C block + * services a read request while operating as a slave-transmitter. + * The relevant I2C requirement is tSU:DAT (note 4) as detailed + * in the I2C Bus Specification. This register must be programmed + * with a value equal to or greater than 2.It is recommended + * that if the required delay is 1000 ns, then for an I2C + * frequency of 10 MHz, IC_SDA_SE */ + uint32_t : 24; + } I2C_SDA_SETUP_REG_b; + }; + + union + { + __IOM uint32_t I2C_ACK_GENERAL_CALL_REG; /*!< (@ 0x00000098) I2C ACK General Call Register */ + + struct + { + __IOM uint32_t ACK_GEN_CALL : 1; /*!< [0..0] ACK General Call. When set to 1, I2C Ctrl responds with + * a ACK (by asserting ic_data_oe) when it receives a General + * Call. When set to 0, the controller does not generate General + * Call interrupts.1 = Generate ACK for a General Call.0 = + * Generate NACK for General Call. */ + uint32_t : 31; + } I2C_ACK_GENERAL_CALL_REG_b; + }; + + union + { + __IOM uint32_t I2C_ENABLE_STATUS_REG; /*!< (@ 0x0000009C) I2C Enable Status Register */ + + struct + { + __IM uint32_t IC_EN : 1; /*!< [0..0] ic_en Status. This bit always reflects the value driven + * on the output port ic_en. When read as 1, the controller + * is deemed to be in an enabled state.When read as 0, the + * controller is deemed completely inactive.NOTE: The CPU + * can safely read this bit anytime. When this bit is read + * as 0, the CPU can safely read SLV_RX_DATA_LOST (bit 2) + * and SLV_DISABLED_WHILE_BUSY (bit 1).1 = I2C enabled.0 = + * I2C disabled. */ + __IM uint32_t SLV_DISABLED_WHILE_BUSY : 1; /*!< [1..1] Slave Disabled While Busy (Transmit, Receive). This bit + * indicates if a potential or active Slave operation has + * aborted due to the setting of the IC_ENABLE register from + * 1 to 0. This bit is set when the CPU writes a 0 to the + * IC_ENABLE register while:(a) I2C Ctrl is receiving the + * address byte of the Slave-Transmitter operation from a + * remote master; OR,(b) address and data bytes of the Slave-Receiver + * operation from a remote master. When read as 1, the controller + * is deemed to have forced a NACK durin */ + __IM uint32_t SLV_RX_DATA_LOST : 1; /*!< [2..2] Slave Received Data Lost. This bit indicates if a Slave-Receiver + * operation is aborted with at least one data byte received + * from an I2C transfer due to the setting of IC_ENABLE from + * 1 to 0. When read as 1, the controller is deemed to have + * actively engaged in an aborted I2C transfer (with matching + * address) and the data phase of the I2C transfer is entered, + * even though a data byte is responded with a NACK. NOTE: + * If the remote I2C master terminates the transfer with a + * STOP condition before the controller has */ + uint32_t : 29; + } I2C_ENABLE_STATUS_REG_b; + }; + + union + { + __IOM uint32_t I2C_IC_FS_SPKLEN_REG; /*!< (@ 0x000000A0) I2C SS and FS spike suppression limit Size */ + + struct + { + __IOM uint32_t I2C_FS_SPKLEN : 8; /*!< [7..0] This register must be set before any I2C bus transaction + * can take place to ensure stable operation. This register + * sets the duration, measured in ic_clk cycles, of the longest + * spike in the SCL or SDA lines that are filtered out by + * the spike suppression logic. This register can be written + * only when the I2C interface is disabled which corresponds + * to the IC_ENABLE register being set to 0. Write at other + * times have no effect. The minimum valid value is 1; hardware + * prevents values less than this being written, */ + uint32_t : 24; + } I2C_IC_FS_SPKLEN_REG_b; + }; + + union + { + __IOM uint32_t I2C_IC_HS_SPKLEN_REG; /*!< (@ 0x000000A4) I2C HS spike suppression limit Size */ + + struct + { + __IOM uint32_t I2C_HS_SPKLEN : 8; /*!< [7..0] This register must be set before any I2C bus transaction + * can take place to ensure stable operation. This register + * sets the duration, measured in ic_clk cycles, of the longest + * spike in the SCL or SDA lines that are filtered out by + * the spike suppression logic. This register can be written + * only when the I2C interface is disabled which corresponds + * to the IC_ENABLE[0] register being set to 0. Write at other + * times have no effect.The minimum valid value is 1; hardware + * prevents values less than this being wr */ + uint32_t : 24; + } I2C_IC_HS_SPKLEN_REG_b; + }; + __IM uint32_t RESERVED1[19]; + + union + { + __IOM uint32_t I2C_COMP_PARAM1_REG; /*!< (@ 0x000000F4) I2C_COMP_PARAM1_REG */ + + struct + { + __IM uint32_t IC_COMP_PARAM1 : 32; /*!< [31..0] IC_COMP_PARAM1 */ + } I2C_COMP_PARAM1_REG_b; + }; + + union + { + __IOM uint32_t I2C_COMP_VERSION_REG; /*!< (@ 0x000000F8) I2C_COMP_VERSION_REG */ + + struct + { + __IM uint32_t IC_COMP_VERSION : 32; /*!< [31..0] IC_COMP_VERSION */ + } I2C_COMP_VERSION_REG_b; + }; + + union + { + __IOM uint32_t I2C_COMP_TYPE_REG; /*!< (@ 0x000000FC) I2C_COMP_TYPE_REG */ + + struct + { + __IM uint32_t IC_COMP_TYPE : 32; /*!< [31..0] IC_COMP_TYPE */ + } I2C_COMP_TYPE_REG_b; + }; +} I2C_Type; /*!< Size = 256 (0x100) */ + +/* =========================================================================================================================== */ +/* ================ I2C2 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I2C2 registers (I2C2) + */ + +typedef struct /*!< (@ 0x40090100) I2C2 Structure */ +{ + union + { + __IOM uint32_t I2C2_CON_REG; /*!< (@ 0x00000000) I2C Control Register */ + + struct + { + __IOM uint32_t I2C_MASTER_MODE : 1; /*!< [0..0] This bit controls whether the controller master is enabled.0 + * = Master disabled1 = Master enabledSoftware should ensure + * that if this bit is written with '1' then bit 6 should + * also be written with a '1'. */ + __IOM uint32_t I2C_SPEED : 2; /*!< [2..1] These bits control at which speed the controller operates.1 + * = Standard mode (100 kbit/s)2 = Fast mode (400 kbit/s)3 + * = High speed mode */ + __IOM uint32_t I2C_10BITADDR_SLAVE : 1; /*!< [3..3] When acting as a slave, this bit controls whether the + * controller responds to 7- or 10-bit addresses.0 = 7-bit + * addressing1 = 10-bit addressing */ + __IOM uint32_t I2C_10BITADDR_MASTER : 1; /*!< [4..4] Control whether the controller starts its transfers in + * 7- or 10-bit addressing mode when acting as a master.0 + * = 7-bit addressing1 = 10-bit addressing */ + __IOM uint32_t I2C_RESTART_EN : 1; /*!< [5..5] Determine whether RESTART conditions may be sent when + * acting as a master.0 = Disable1 = Enable */ + __IOM uint32_t I2C_SLAVE_DISABLE : 1; /*!< [6..6] Slave enabled or disabled after reset is applied, which + * means software does not have to configure the slave.0 = + * Slave is enabled.1 = Slave is disabled.Software should + * ensure that if this bit is written with '0', then bit 0 + * should also be written with a '0'. */ + __IOM uint32_t I2C_STOP_DET_IFADDRESSED : 1; /*!< [7..7] 1 = Slave issues STOP_DET intr only if addressed.0 = + * Slave issues STOP_DET intr always.During a general call + * address, this slave does not issue the STOP_DET interrupt + * if STOP_DET_IF_ADDRESSED = 1'b1, even if the slave responds + * to the general call address by generating ACK. The STOP_DET + * interrupt is generated only when the transmitted address + * matches the slave address (SAR). */ + __IOM uint32_t I2C_TX_EMPTY_CTRL : 1; /*!< [8..8] This bit controls the generation of the TX_EMPTY interrupt + * as described in the IC_RAW_INTR_STAT register.1 = Controlled + * generation of TX_EMPTY interrupt.0 = Default behaviour + * of TX_EMPTY interrupt. */ + __IOM uint32_t I2C_RX_FIFO_FULL_HLD_CTRL : 1; /*!< [9..9] This bit controls whether DW_apb_i2c should hold the + * bus when the RX FIFO is physically full to its RX_BUFFER_DEPTH.1 + * = Hold bus when RX_FIFO is full.0 = Overflow when RX_FIFO + * is full. */ + __IM uint32_t I2C_STOP_DET_IF_MASTER_ACTIVE : 1; /*!< [10..10] In Master mode:1 = Issue the STOP_DET interrupt only + * when master is active.0 = Issue the STOP_DET irrespective + * of whether master is active or not. */ + uint32_t : 21; + } I2C2_CON_REG_b; + }; + + union + { + __IOM uint32_t I2C2_TAR_REG; /*!< (@ 0x00000004) I2C Target Address Register */ + + struct + { + __IOM uint32_t IC_TAR : 10; /*!< [9..0] This is the target address for any master transaction. + * When transmitting a General Call, these bits are ignored. + * To generate a START BYTE, the CPU needs to write only once + * into these bits.Note: If the IC_TAR and IC_SAR are the + * same, loopback exists but the FIFOs are shared between + * master and slave, so full loopback is not feasible. Only + * one direction loopback mode is supported (simplex), not + * duplex. A master cannot transmit to itself; it can transmit + * to only a slave.Write to this register succeed */ + __IOM uint32_t GC_OR_START : 1; /*!< [10..10] On readIf bit 11 (SPECIAL) is set to 1, then this bit + * indicates whether a General Call or START byte command + * is to be performed by the controller.0 = General Call Address + * - after issuing a General Call, only writes may be performed. + * Attempting to issue a read command results in setting bit + * 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The controller + * remains in General Call mode until the SPECIAL bit value + * (bit 11) is cleared.1 = START BYTEOn write1 = START byte + * transmission0 = */ + __IOM uint32_t SPECIAL : 1; /*!< [11..11] On readThis bit indicates whether software performs + * a General Call or START BYTE command.0 = Ignore bit 10 + * GC_OR_START and use IC_TAR normally.1 = Perform special + * I2C command as specified in GC_OR_START bit.On write1 = + * Enables programming of GENERAL_CALL or START_BYTE transmission.0 + * = Disables programming of GENERAL_CALL or START_BYTE transmission.Write + * to this register succeed only when IC_ENABLE[0] is set + * to 0. */ + uint32_t : 20; + } I2C2_TAR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_SAR_REG; /*!< (@ 0x00000008) I2C Slave Address Register */ + + struct + { + __IOM uint32_t IC_SAR : 10; /*!< [9..0] The IC_SAR holds the slave address when the I2C is operating + * as a slave. For 7-bit addressing, only IC_SAR[6:0] is used. + * This register can be written only when the I2C interface + * is disabled, which corresponds to the IC_ENABLE register + * being set to 0. Write at other times have no effect.Write + * to this register succeed only when IC_ENABLE[0] is set + * to 0. */ + uint32_t : 22; + } I2C2_SAR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_HS_MADDR_REG; /*!< (@ 0x0000000C) I2C High Speed Master Mode Code Address Register */ + + struct + { + __IOM uint32_t I2C_IC_HS_MAR : 3; /*!< [2..0] This bit field holds the value of the I2C HS mode master + * code. HS-mode master codes are reserved 8-bit codes (00001xxx) + * that are not used for slave addressing or other purposes. + * Each master has its unique master code; up to eight high-speed + * mode masters can be present on the same I2C bus system. + * Valid values are from 0 to 7. This register can be written + * only when the I2C interface is disabled, which corresponds + * to the IC_ENABLE[0] register being set to 0. Write at other + * times have no effect. */ + uint32_t : 29; + } I2C2_HS_MADDR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_DATA_CMD_REG; /*!< (@ 0x00000010) I2C Rx/Tx Data Buffer and Command Register */ + + struct + { + __IOM uint32_t I2C_DAT : 8; /*!< [7..0] This register contains the data to be transmitted or + * received on the I2C bus. If you are writing to this register + * and want to perform a read, bits 7:0 (DAT) are ignored + * by the controller. However, when you read this register, + * these bits return the value of data received on the controller's + * interface. */ + __OM uint32_t I2C_CMD : 1; /*!< [8..8] This bit controls whether a read or a write is performed. + * This bit does not control the direction when the I2C Ctrl + * acts as a slave. It controls only the direction when it + * acts as a master.1 = Read0 = WriteWhen a command is entered + * in the TX FIFO, this bit distinguishes the write and read + * commands. In slave-receiver mode, this bit is a "don't + * care" because writes to this register are not required. + * In slave-transmitter mode, a "0" indicates that CPU data + * is to be transmitted and as DAT or IC_D */ + __OM uint32_t I2C_STOP : 1; /*!< [9..9] This bit controls whether a STOP is issued after the + * byte is sent or received.1 = STOP is issued after this + * byte, regardless of whether or not the TX FIFO is empty. + * If the TX FIFO is not empty, the master immediately tries + * to start a new transfer by issuing a START and arbitrating + * for the bus.0 = STOP is not issued after this byte, regardless + * of whether or not the TX FIFO is empty. If the TX FIFO + * is not empty, the master continues the current transfer + * by sending/receiving data bytes according to */ + __OM uint32_t I2C_RESTART : 1; /*!< [10..10] This bit controls whether a RESTART is issued before + * the byte is sent or received. 1 = If IC_RESTART_EN is 1, + * a RESTART is issued before the data is sent/received (according + * to the value of CMD), regardless of whether or not the + * transfer direction is changing from the previous command; + * if IC_RESTART_EN is 0, a STOP followed by a START is issued + * instead.0 = If IC_RESTART_EN is 1, a RESTART is issued + * only if the transfer direction is changing from the previous + * command; if IC_RESTART_EN is 0, a STOP */ + uint32_t : 21; + } I2C2_DATA_CMD_REG_b; + }; + + union + { + __IOM uint32_t I2C2_SS_SCL_HCNT_REG; /*!< (@ 0x00000014) Standard Speed I2C Clock SCL High Count Register */ + + struct + { + __IOM uint32_t IC_SS_SCL_HCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock high-period count for standard speed. + * This register can be written only when the I2C interface + * is disabled which corresponds to the IC_ENABLE register + * being set to 0. Write at other times have no effect.The + * minimum valid value is 6; hardware prevents values less + * than this being written, and if attempted results in 6 + * being set.NOTE: This register must not be program */ + uint32_t : 16; + } I2C2_SS_SCL_HCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_SS_SCL_LCNT_REG; /*!< (@ 0x00000018) Standard Speed I2C Clock SCL Low Count Register */ + + struct + { + __IOM uint32_t IC_SS_SCL_LCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock low period count for standard speed.This + * register can be written only when the I2C interface is + * disabled which corresponds to the I2C_ENABLE register being + * set to 0. Write at other times have no effect.The minimum + * valid value is 8; hardware prevents values less than this + * being written, and if attempted, results in 8 being set. */ + uint32_t : 16; + } I2C2_SS_SCL_LCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_FS_SCL_HCNT_REG; /*!< (@ 0x0000001C) Fast Speed I2C Clock SCL High Count Register */ + + struct + { + __IOM uint32_t IC_FS_SCL_HCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock high-period count for fast speed. It + * is used in high-speed mode to send the Master Code and + * START BYTE or General CALL. This register can be written + * only when the I2C interface is disabled, which corresponds + * to the I2C_ENABLE register being set to 0. Writes at other + * times have no effect.The minimum valid value is 6; hardware + * prevents values less than this being written */ + uint32_t : 16; + } I2C2_FS_SCL_HCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_FS_SCL_LCNT_REG; /*!< (@ 0x00000020) Fast Speed I2C Clock SCL Low Count Register */ + + struct + { + __IOM uint32_t IC_FS_SCL_LCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock low-period count for fast speed. It + * is used in high-speed mode to send the Master Code and + * START BYTE or General CALL. This register can be written + * only when the I2C interface is disabled, which corresponds + * to the I2C_ENABLE register being set to 0. Write at other + * times have no effect.The minimum valid value is 8; hardware + * prevents values less than this being written, */ + uint32_t : 16; + } I2C2_FS_SCL_LCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_HS_SCL_HCNT_REG; /*!< (@ 0x00000024) High Speed I2C Clock SCL High Count Register */ + + struct + { + __IOM uint32_t IC_HS_SCL_HCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock high period count for high speed. See + * "IC_CLK Frequency Configuration".The SCL High time depends + * on the loading of the bus. For 100 pF loading, the SCL + * High time is 60 ns; for 400 pF loading, the SCL High time + * is 120 ns. This register goes away and becomes read-only + * returning 0s if IC_MAX_SPEED_MODE != high.This register + * can be written only when the I2C interface i */ + uint32_t : 16; + } I2C2_HS_SCL_HCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_HS_SCL_LCNT_REG; /*!< (@ 0x00000028) High Speed I2C Clock SCL Low Count Register */ + + struct + { + __IOM uint32_t IC_HS_SCL_LCNT : 16; /*!< [15..0] This register must be set before any I2C bus transaction + * can take place to ensure proper I/O timing. This register + * sets the SCL clock low period count for high speed. For + * more information, see "IC_CLK Frequency Configuration".The + * SCL low time depends on the loading of the bus. For 100 + * pF loading, the SCL low time is 160 ns; for 400 pF loading, + * the SCL low time is 320 ns. This register goes away and + * becomes read-only returning 0s if IC_MAX_SPEED_MODE != + * high.This register can be written only when */ + uint32_t : 16; + } I2C2_HS_SCL_LCNT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_INTR_STAT_REG; /*!< (@ 0x0000002C) I2C Interrupt Status Register */ + + struct + { + __IM uint32_t R_RX_UNDER : 1; /*!< [0..0] Set if the processor attempts to read the receive buffer + * when it is empty by reading from the IC_DATA_CMD register. + * If the module is disabled (I2C_ENABLE[0]=0), this bit keeps + * its level until the master or slave state machines go into + * idle, and when ic_en goes to 0, this interrupt is cleared. */ + __IM uint32_t R_RX_OVER : 1; /*!< [1..1] Set if the receive buffer is completely filled to 32 + * and an additional byte is received from an external I2C + * device. The controller acknowledges this, but any data + * bytes received after the FIFO is full are lost. If the + * module is disabled (I2C_ENABLE[0]=0), this bit keeps its + * level until the master or slave state machines go into + * idle, and when ic_en goes to 0, this interrupt is cleared. */ + __IM uint32_t R_RX_FULL : 1; /*!< [2..2] Set when the receive buffer reaches or goes above the + * RX_TL threshold in the I2C_RX_TL register. It is automatically + * cleared by hardware when buffer level goes below the threshold. + * If the module is disabled (I2C_ENABLE[0]=0), the RX FIFO + * is flushed and held in reset; therefore the RX FIFO is + * not full. So this bit is cleared once, the I2C_ENABLE bit + * 0 is programmed with a 0 regardless of the activity that + * continues. */ + __IM uint32_t R_TX_OVER : 1; /*!< [3..3] Set during transmit if the transmit buffer is filled + * to 32 and the processor attempts to issue another I2C command + * by writing to the IC_DATA_CMD register. When the module + * is disabled, this bit keeps its level until the master + * or slave state machines go into idle, and when ic_en goes + * to 0, this interrupt is cleared */ + __IM uint32_t R_TX_EMPTY : 1; /*!< [4..4] This bit is set to 1 when the transmit buffer is at or + * below the threshold value set in the I2C_TX_TL register. + * It is automatically cleared by hardware when the buffer + * level goes above the threshold. When the IC_ENABLE bit + * 0 is 0, the TX FIFO is flushed and held in reset. There + * the TX FIFO looks like it has no data within it, so this + * bit is set to 1, provided there is activity in the master + * or slave state machines. When there is no longer activity, + * then with ic_en=0, this bit is set to 0. */ + __IM uint32_t R_RD_REQ : 1; /*!< [5..5] This bit is set to 1 when the controller is acting as + * a slave and another I2C master is attempting to read data + * from the controller. The controller holds the I2C bus in + * a wait state (SCL=0) until this interrupt is serviced, + * which means that the slave has been addressed by a remote + * master that is asking for data to be transferred. The processor + * must respond to this interrupt and then write the requested + * data to the I2C_DATA_CMD register. This bit is set to 0 + * just after the processor reads the I2C_CLR_RD_R */ + __IM uint32_t R_TX_ABRT : 1; /*!< [6..6] This bit indicates if the controller, as an I2C transmitter, + * is unable to complete the intended actions on the contents + * of the transmit FIFO. This situation can occur both as + * an I2C master or an I2C slave, and is referred to as a + * "transmit abort".When this bit is set to 1, the I2C_TX_ABRT_SOURCE + * register indicates the reason why the transmit abort takes + * places.NOTE: The controller flushes/resets/empties the + * TX FIFO whenever this bit is set. The TX FIFO remains in + * this flushed state until the regi */ + __IM uint32_t R_RX_DONE : 1; /*!< [7..7] When the controller is acting as a slave-transmitter, + * this bit is set to 1 if the master does not acknowledge + * a transmitted byte. This occurs on the last byte of the + * transmission, indicating that the transmission is done. */ + __IM uint32_t R_ACTIVITY : 1; /*!< [8..8] This bit captures I2C Ctrl activity and stays set until + * it is cleared. There are four ways to clear it:=> Disabling + * the I2C Ctrl=> Reading the IC_CLR_ACTIVITY register=> Reading + * the IC_CLR_INTR register=> System resetOnce this bit is + * set, it stays set unless one of the four methods is used + * to clear it. Even if the controller module is idle, this + * bit remains set until cleared, indicating that there was + * activity on the bus. */ + __IM uint32_t R_STOP_DET : 1; /*!< [9..9] Indicate whether a STOP condition has occurred on the + * I2C interface regardless of whether controller is operating + * in slave or master mode. */ + __IM uint32_t R_START_DET : 1; /*!< [10..10] Indicate whether a START or RESTART condition has occurred + * on the I2C interface regardless of whether controller is + * operating in slave or master mode. */ + __IM uint32_t R_GEN_CALL : 1; /*!< [11..11] Set only when a General Call address is received and + * it is acknowledged. It stays set until it is cleared either + * by disabling controller or when the CPU reads bit 0 of + * the I2C_CLR_GEN_CALL register. The controller stores the + * received data in the RX buffer. */ + __IM uint32_t R_RESTART_DET : 1; /*!< [12..12] Indicate whether a RESTART condition has occurred on + * the I2C interface when DW_apb_i2c is operating in Slave + * mode and the slave is being addressed.Enabled only when + * IC_SLV_RESTART_DET_EN=1.Note: However, in high-speed mode + * or during a START BYTE transfer, the RESTART comes before + * the address field as per the I2C protocol. In this case, + * the slave is not the addressed slave when the RESTART is + * issued, therefore DW_apb_i2c does not generate the RESTART_DET + * interrupt. */ + __IM uint32_t R_MASTER_ON_HOLD : 1; /*!< [13..13] Indicate whether master is holding the bus and TX FIFO + * is empty. Enabled only when I2C_DYNAMIC_TAR_UPDATE=1 and + * IC_EMPTYFIFO_HOLD_MASTER_EN=1. */ + __IM uint32_t R_SCL_STUCK_AT_LOW : 1; /*!< [14..14] 1 = R_SCL_STUCK_AT_LOW interrupt is active.0 = R_SCL_STUCK_AT_LOW + * interrupt is inactive. */ + uint32_t : 17; + } I2C2_INTR_STAT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_INTR_MASK_REG; /*!< (@ 0x00000030) I2C Interrupt Mask Register */ + + struct + { + __IOM uint32_t M_RX_UNDER : 1; /*!< [0..0] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RX_OVER : 1; /*!< [1..1] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RX_FULL : 1; /*!< [2..2] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_TX_OVER : 1; /*!< [3..3] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_TX_EMPTY : 1; /*!< [4..4] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RD_REQ : 1; /*!< [5..5] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_TX_ABRT : 1; /*!< [6..6] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RX_DONE : 1; /*!< [7..7] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_ACTIVITY : 1; /*!< [8..8] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_STOP_DET : 1; /*!< [9..9] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_START_DET : 1; /*!< [10..10] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_GEN_CALL : 1; /*!< [11..11] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_RESTART_DET : 1; /*!< [12..12] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IOM uint32_t M_MASTER_ON_HOLD : 1; /*!< [13..13] These bits mask their corresponding interrupt status + * bits in the I2C_INTR_STAT register. */ + __IM uint32_t M_SCL_STUCK_AT_LOW : 1; /*!< [14..14] M_SCL_STUCK_AT_LOW Register field Reserved bits. */ + uint32_t : 17; + } I2C2_INTR_MASK_REG_b; + }; + + union + { + __IOM uint32_t I2C2_RAW_INTR_STAT_REG; /*!< (@ 0x00000034) I2C Raw Interrupt Status Register */ + + struct + { + __IM uint32_t RX_UNDER : 1; /*!< [0..0] Set if the processor attempts to read the receive buffer + * when it is empty by reading from the IC_DATA_CMD register. + * If the module is disabled (I2C_ENABLE[0]=0), this bit keeps + * its level until the master or slave state machines go into + * idle, and when ic_en goes to 0, this interrupt is cleared. */ + __IM uint32_t RX_OVER : 1; /*!< [1..1] Set if the receive buffer is completely filled to 32 + * and an additional byte is received from an external I2C + * device. The controller acknowledges this, but any data + * bytes received after the FIFO is full are lost. If the + * module is disabled (I2C_ENABLE[0]=0), this bit keeps its + * level until the master or slave state machines go into + * idle, and when ic_en goes to 0, this interrupt is cleared. */ + __IM uint32_t RX_FULL : 1; /*!< [2..2] Set when the receive buffer reaches or goes above the + * RX_TL threshold in the I2C_RX_TL register. It is automatically + * cleared by hardware when buffer level goes below the threshold. + * If the module is disabled (I2C_ENABLE[0]=0), the RX FIFO + * is flushed and held in reset; therefore the RX FIFO is + * not full. So this bit is cleared once the I2C_ENABLE bit + * 0 is programmed with a 0, regardless of the activity that + * continues. */ + __IM uint32_t TX_OVER : 1; /*!< [3..3] Set during transmit if the transmit buffer is filled + * to 32 and the processor attempts to issue another I2C command + * by writing to the IC_DATA_CMD register. When the module + * is disabled, this bit keeps its level until the master + * or slave state machines go into idle, and when ic_en goes + * to 0, this interrupt is cleared . */ + __IM uint32_t TX_EMPTY : 1; /*!< [4..4] This bit is set to 1 when the transmit buffer is at or + * below the threshold value set in the I2C_TX_TL register. + * It is automatically cleared by hardware when the buffer + * level goes above the threshold. When the IC_ENABLE bit + * 0 is 0, the TX FIFO is flushed and held in reset. There + * the TX FIFO looks like it has no data within it, so this + * bit is set to 1, provided there is activity in the master + * or slave state machines. When there is no longer activity, + * then with ic_en=0, this bit is set to 0. */ + __IM uint32_t RD_REQ : 1; /*!< [5..5] This bit is set to 1 when I2C Ctrl is acting as a slave + * and another I2C master is attempting to read data from + * the controller. The controller holds the I2C bus in a wait + * state (SCL=0) until this interrupt is serviced, which means + * that the slave has been addressed by a remote master that + * is asking for data to be transferred. The processor must + * respond to this interrupt and then write the requested + * data to the I2C_DATA_CMD register. This bit is set to 0 + * just after the processor reads the I2C_CLR_RD_REQ reg */ + __IM uint32_t TX_ABRT : 1; /*!< [6..6] This bit indicates if the controller, as an I2C transmitter, + * is unable to complete the intended actions on the contents + * of the transmit FIFO. This situation can occur both as + * an I2C master or an I2C slave, and is referred to as a + * "transmit abort".When this bit is set to 1, the I2C_TX_ABRT_SOURCE + * register indicates the reason why the transmit abort takes + * places.NOTE: The controller flushes/resets/empties the + * TX FIFO whenever this bit is set. The TX FIFO remains in + * this flushed state until the regi */ + __IM uint32_t RX_DONE : 1; /*!< [7..7] When the controller is acting as a slave-transmitter, + * this bit is set to 1 if the master does not acknowledge + * a transmitted byte. This occurs on the last byte of the + * transmission, indicating that the transmission is done. */ + __IM uint32_t ACTIVITY : 1; /*!< [8..8] This bit captures I2C Ctrl activity and stays set until + * it is cleared. There are four ways to clear it:=> Disabling + * the I2C Ctrl=> Reading the IC_CLR_ACTIVITY register=> Reading + * the IC_CLR_INTR register=> System resetOnce this bit is + * set, it stays set unless one of the four methods is used + * to clear it. Even if the controller module is idle, this + * bit remains set until cleared, indicating that there was + * activity on the bus. */ + __IM uint32_t STOP_DET : 1; /*!< [9..9] Indicate whether a STOP condition has occurred on the + * I2C interface regardless of whether controller is operating + * in slave or master mode. */ + __IM uint32_t START_DET : 1; /*!< [10..10] Indicate whether a START or RESTART condition has occurred + * on the I2C interface regardless of whether controller is + * operating in slave or master mode. */ + __IM uint32_t GEN_CALL : 1; /*!< [11..11] Set only when a General Call address is received and + * it is acknowledged. It stays set until it is cleared either + * by disabling controller or when the CPU reads bit 0 of + * the I2C_CLR_GEN_CALL register. I2C Ctrl stores the received + * data in the Rx buffer. */ + __IM uint32_t RESTART_DET : 1; /*!< [12..12] Indicate whether a RESTART condition has occurred on + * the I2C interface when DW_apb_i2c is operating in Slave + * mode and the slave is being addressed.Enabled only when + * IC_SLV_RESTART_DET_EN=1.Note: However, in high-speed mode + * or during a START BYTE transfer, the RESTART comes before + * the address field as per the I2C protocol. In this case, + * the slave is not the addressed slave when the RESTART is + * issued, therefore DW_apb_i2c does not generate the RESTART_DET + * interrupt. */ + __IM uint32_t MASTER_ON_HOLD : 1; /*!< [13..13] ndicate whether master is holding the bus and TX FIFO + * is empty. Enabled only when I2C_DYNAMIC_TAR_UPDATE=1 and + * IC_EMPTYFIFO_HOLD_MASTER_EN=1. */ + __IM uint32_t SCL_STUCK_AT_LOW : 1; /*!< [14..14] CL_STUCK_AT_LOW Register field Reserved bits. */ + uint32_t : 17; + } I2C2_RAW_INTR_STAT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_RX_TL_REG; /*!< (@ 0x00000038) I2C Receive FIFO Threshold Register */ + + struct + { + __IOM uint32_t RX_TL : 5; /*!< [4..0] Receive FIFO Threshold Level Controls the level of entries + * (or above) that triggers the RX_FULL interrupt (bit 2 in + * I2C_RAW_INTR_STAT register). The valid range is 0-31, with + * the additional restriction that hardware does not allow + * this value to be set to a value larger than the depth of + * the buffer. If an attempt is made to do that, the actual + * value set will be the maximum depth of the buffer. A value + * of 0 sets the threshold for 1 entry, and a value of 31 + * sets the threshold for 32 entries. */ + uint32_t : 27; + } I2C2_RX_TL_REG_b; + }; + + union + { + __IOM uint32_t I2C2_TX_TL_REG; /*!< (@ 0x0000003C) I2C Transmit FIFO Threshold Register */ + + struct + { + __IOM uint32_t TX_TL : 5; /*!< [4..0] Transmit FIFO Threshold Level Controls the level of entries + * (or below) that trigger the TX_EMPTY interrupt (bit 4 in + * I2C_RAW_INTR_STAT register). The valid range is 0-31, with + * the additional restriction that it may not be set to value + * larger than the depth of the buffer. If an attempt is made + * to do that, the actual value set will be the maximum depth + * of the buffer. A value of 0 sets the threshold for 0 entries, + * and a value of 31 sets the threshold for 32 entries. */ + uint32_t : 27; + } I2C2_TX_TL_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_INTR_REG; /*!< (@ 0x00000040) Clear Combined and Individual Interrupt Register */ + + struct + { + __IM uint32_t CLR_INTR : 1; /*!< [0..0] Read this register to clear the combined interrupt, all + * individual interrupts, and the I2C_TX_ABRT_SOURCE register. + * This bit does not clear hardware clearable interrupts but + * software clearable interrupts. See Bit 9 of the I2C_TX_ABRT_SOURCE + * register for an exception to clearing I2C_TX_ABRT_SOURCE. */ + uint32_t : 31; + } I2C2_CLR_INTR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_RX_UNDER_REG; /*!< (@ 0x00000044) Clear RX_UNDER Interrupt Register */ + + struct + { + __IM uint32_t CLR_RX_UNDER : 1; /*!< [0..0] Read this register to clear the RX_UNDER interrupt (bit + * 0) of theI2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C2_CLR_RX_UNDER_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_RX_OVER_REG; /*!< (@ 0x00000048) Clear RX_OVER Interrupt Register */ + + struct + { + __IM uint32_t CLR_RX_OVER : 1; /*!< [0..0] Read this register to clear the RX_OVER interrupt (bit + * 1) of theI2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C2_CLR_RX_OVER_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_TX_OVER_REG; /*!< (@ 0x0000004C) Clear TX_OVER Interrupt Register */ + + struct + { + __IM uint32_t CLR_TX_OVER : 1; /*!< [0..0] Read this register to clear the TX_OVER interrupt (bit + * 3) of the I2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C2_CLR_TX_OVER_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_RD_REQ_REG; /*!< (@ 0x00000050) Clear RD_REQ Interrupt Register */ + + struct + { + __IM uint32_t CLR_RD_REQ : 1; /*!< [0..0] Read this register to clear the RD_REQ interrupt (bit + * 5) of the I2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C2_CLR_RD_REQ_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_TX_ABRT_REG; /*!< (@ 0x00000054) Clear TX_ABRT Interrupt Register */ + + struct + { + __IM uint32_t CLR_TX_ABRT : 1; /*!< [0..0] Read this register to clear the TX_ABRT interrupt (bit + * 6) of theIC_RAW_INTR_STAT register, and the I2C_TX_ABRT_SOURCE + * register. This also releases the TX FIFO from the flushed/reset + * state, allowing more writes to the TX FIFO. See Bit 9 of + * the I2C_TX_ABRT_SOURCE register for an exception to clearing + * IC_TX_ABRT_SOURCE. */ + uint32_t : 31; + } I2C2_CLR_TX_ABRT_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_RX_DONE_REG; /*!< (@ 0x00000058) Clear RX_DONE Interrupt Register */ + + struct + { + __IM uint32_t CLR_RX_DONE : 1; /*!< [0..0] Read this register to clear the RX_DONE interrupt (bit + * 7) of theI2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C2_CLR_RX_DONE_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_ACTIVITY_REG; /*!< (@ 0x0000005C) Clear ACTIVITY Interrupt Register */ + + struct + { + __IM uint32_t CLR_ACTIVITY : 1; /*!< [0..0] Reading this register clears the ACTIVITY interrupt if + * the I2C is not active anymore. If the I2C module is still + * active on the bus, the ACTIVITY interrupt bit continues + * to be set. It is automatically cleared by hardware if the + * module is disabled and if there is no further activity + * on the bus. The value read from this register to get status + * of the ACTIVITY interrupt (bit 8) of the IC_RAW_INTR_STAT + * register. */ + uint32_t : 31; + } I2C2_CLR_ACTIVITY_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_STOP_DET_REG; /*!< (@ 0x00000060) Clear STOP_DET Interrupt Register */ + + struct + { + __IM uint32_t CLR_STOP_DET : 1; /*!< [0..0] Read this register to clear the STOP_DET interrupt (bit + * 9) of the IC_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C2_CLR_STOP_DET_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_START_DET_REG; /*!< (@ 0x00000064) Clear START_DET Interrupt Register */ + + struct + { + __IM uint32_t CLR_START_DET : 1; /*!< [0..0] Read this register to clear the START_DET interrupt (bit + * 10) of the IC_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C2_CLR_START_DET_REG_b; + }; + + union + { + __IOM uint32_t I2C2_CLR_GEN_CALL_REG; /*!< (@ 0x00000068) Clear GEN_CALL Interrupt Register */ + + struct + { + __IM uint32_t CLR_GEN_CALL : 1; /*!< [0..0] Read this register to clear the GEN_CALL interrupt (bit + * 11) ofI2C_RAW_INTR_STAT register. */ + uint32_t : 31; + } I2C2_CLR_GEN_CALL_REG_b; + }; + + union + { + __IOM uint32_t I2C2_ENABLE_REG; /*!< (@ 0x0000006C) I2C Enable Register */ + + struct + { + __IOM uint32_t I2C_EN : 1; /*!< [0..0] Control whether the controller is enabled.0 = Disable + * the controller (TX and RX FIFOs are held in an erased state)1 + * = Enable the controllerSoftware can disable the controller + * while it is active. However, it is important that care + * be taken to ensure that the controller is disabled properly. + * When the controller is disabled, the following occurs:* + * The TX FIFO and RX FIFO get flushed.* Status bits in the + * IC_INTR_STAT register are still active until the controller + * goes into IDLE state. */ + __IOM uint32_t I2C_ABORT : 1; /*!< [1..1] The software can abort the I2C transfer in master mode + * by setting this bit. The software can set this bit only + * when ENABLE is already set; otherwise, the controller ignores + * any write to ABORT bit. The software cannot clear the ABORT + * bit once set. In response to an ABORT, the controller issues + * a STOP and flushes the TX FIFO after completing the current + * transfer, then sets the TX_ABORT interrupt after the abort + * operation. The ABORT bit is cleared automatically after + * the abort operation. */ + __IOM uint32_t I2C_TX_CMD_BLOCK : 1; /*!< [2..2] In Master mode:1 = Block the transmission of data on + * I2C bus even if TX FIFO has data to transmit.0.= The transmission + * of data starts on I2C bus automatically as soon as the + * first data is available in the TX FIFO. */ + uint32_t : 29; + } I2C2_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t I2C2_STATUS_REG; /*!< (@ 0x00000070) I2C Status Register */ + + struct + { + __IM uint32_t I2C_ACTIVITY : 1; /*!< [0..0] I2C Activity Status. */ + __IM uint32_t TFNF : 1; /*!< [1..1] Transmit FIFO Not Full. Set when the transmit FIFO contains + * one or more empty locations, and is cleared when the FIFO + * is full.0 = Transmit FIFO is full.1 = Transmit FIFO is + * not full. */ + __IM uint32_t TFE : 1; /*!< [2..2] Transmit FIFO Completely Empty. When the transmit FIFO + * is completely empty, this bit is set. When it contains + * one or more valid entries, this bit is cleared. This bit + * field does not request an interrupt.0 = Transmit FIFO is + * not empty.1 = Transmit FIFO is empty. */ + __IM uint32_t RFNE : 1; /*!< [3..3] Receive FIFO Not Empty. This bit is set when the receive + * FIFO contains one or more entries; it is cleared when the + * receive FIFO is empty.0 = Receive FIFO is empty.1 = Receive + * FIFO is not empty. */ + __IM uint32_t RFF : 1; /*!< [4..4] Receive FIFO Completely Full. When the receive FIFO is + * completely full, this bit is set. When the receive FIFO + * contains one or more empty location, this bit is cleared.0 + * = Receive FIFO is not full.1 = Receive FIFO is full. */ + __IM uint32_t MST_ACTIVITY : 1; /*!< [5..5] Master FSM Activity Status. When the Master Finite State + * Machine (FSM) is not in the IDLE state, this bit is set.0 + * = Master FSM is in IDLE state so the Master part of the + * controller is not Active.1 = Master FSM is not in IDLE + * state so the Master part of the controller is Active. */ + __IM uint32_t SLV_ACTIVITY : 1; /*!< [6..6] Slave FSM Activity Status. When the Slave Finite State + * Machine (FSM) is not in the IDLE state, this bit is set.0 + * = Slave FSM is in IDLE state so the Slave part of the controller + * is not Active.1 = Slave FSM is not in IDLE state so the + * Slave part of the controller is Active. */ + __IM uint32_t MST_HOLD_TX_FIFO_EMPTY : 1; /*!< [7..7] The DW_apb_i2c master stalls the write transfer when + * TX FIFO is empty, and the the last byte does not have the + * Stop bit set. This bit indicates the BUS hold when the + * master holds the bus because of the TX FIFO being empty, + * and the the previous transferred command does not have + * the Stop bit set.1 = Master holds the bus due to TX FIFO + * is empty.0 = Master is not holding the bus or Bus hold + * is not due to TX FIFO is empty. */ + __IM uint32_t MST_HOLD_RX_FIFO_FULL : 1; /*!< [8..8] This bit indicates the BUS Hold in Master mode due to + * RX FIFO is Full and additional byte is received.1 = Master + * holds the bus due to RX FIFO is full.0 = Master is not + * holding the bus or Bus hold is not due to RX FIFO is full. */ + __IM uint32_t SLV_HOLD_TX_FIFO_EMPTY : 1; /*!< [9..9] This bit indicates the BUS Hold in Slave mode for the + * Read request when the TX FIFO is empty. The Bus is in hold + * until the TX FIFO has data to Transmit for the read request.1 + * = Slave holds the bus due to TX FIFO is empty.0 = Slave + * is not holding the bus or Bus hold is not due to TX FIFO + * is empty. */ + __IM uint32_t LV_HOLD_RX_FIFO_FULL : 1; /*!< [10..10] This bit indicates the BUS Hold in Slave mode due to + * RX FIFO is Full and an additional byte has been received.1 + * = Slave holds the bus due to Rx FIFO is full.0 = Slave + * is not holding the bus or Bus hold is not due to Rx FIFO + * is full. */ + uint32_t : 21; + } I2C2_STATUS_REG_b; + }; + + union + { + __IOM uint32_t I2C2_TXFLR_REG; /*!< (@ 0x00000074) I2C Transmit FIFO Level Register */ + + struct + { + __IM uint32_t TXFLR : 6; /*!< [5..0] Transmit FIFO Level. Contain the number of valid data + * entries in the transmit FIFO. Size is constrained by the + * TXFLR value. */ + uint32_t : 26; + } I2C2_TXFLR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_RXFLR_REG; /*!< (@ 0x00000078) I2C Receive FIFO Level Register */ + + struct + { + __IM uint32_t RXFLR : 6; /*!< [5..0] Receive FIFO Level. Contain the number of valid data + * entries in the receive FIFO. Size is constrained by the + * RXFLR value. */ + uint32_t : 26; + } I2C2_RXFLR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_SDA_HOLD_REG; /*!< (@ 0x0000007C) I2C SDA Hold Time Length Register */ + + struct + { + __IOM uint32_t I2C_SDA_TX_HOLD : 16; /*!< [15..0] Set the required SDA hold time in units of ic_clk period + * when transmitting. */ + __IOM uint32_t I2C_SDA_RX_HOLD : 8; /*!< [23..16] Set the required SDA hold time in units of ic_clk period + * when receiving. */ + uint32_t : 8; + } I2C2_SDA_HOLD_REG_b; + }; + + union + { + __IOM uint32_t I2C2_TX_ABRT_SOURCE_REG; /*!< (@ 0x00000080) I2C Transmit Abort Source Register */ + + struct + { + __IM uint32_t ABRT_7B_ADDR_NOACK : 1; /*!< [0..0] Master-Transmitter or Master-Receiver: Master is in 7-bit + * addressing mode and the address sent was not acknowledged + * by any slave.1 = This abort is generated because of NOACK + * for 7-bit address.0 = This abort is not generated. */ + __IM uint32_t ABRT_10ADDR1_NOACK : 1; /*!< [1..1] Master-Transmitter or Master-Receiver: Master is in 10-bit + * address mode and the first 10-bit address byte was not + * acknowledged by any slave.1 = Byte 1 of 10-bit address + * not ACKed by any slave.0 = This abort is not generated. */ + __IM uint32_t ABRT_10ADDR2_NOACK : 1; /*!< [2..2] Master-Transmitter or Master-Receiver: Master is in 10-bit + * address mode and the second address byte of the 10-bit + * address was not acknowledged by any slave.1 = Byte 2 of + * 10-bit address not ACKed by any slave.0 = This abort is + * not generated. */ + __IM uint32_t ABRT_TXDATA_NOACK : 1; /*!< [3..3] Master-Transmitter: This is a master-mode only bit. Master + * has received an acknowledgement for the address, but when + * it sent data byte(s) following the address, it did not + * receive an acknowledge from the remote slave(s).1 = Transmitted + * data not ACKed by addressed slave.0 = Transmitted data + * non-ACKed by addressed slave-scenario not present. */ + __IM uint32_t ABRT_GCALL_NOACK : 1; /*!< [4..4] Master-Transmitter: The controller in master mode sent + * a General Call and no slave on the bus acknowledged the + * General Call.1 = GCALL not ACKed by any slave.0 = GCALL + * not ACKed by any slave-scenario not present. */ + __IM uint32_t ABRT_GCALL_READ : 1; /*!< [5..5] Master-Transmitter: The controller in master mode sent + * a General Call but the user programmed the byte following + * the General Call to be a read from the bus (IC_DATA_CMD[9] + * is set to 1).1 = GCALL is followed by read from bus.0 = + * GCALL is followed by read from bus-scenario not present. */ + __IM uint32_t ABRT_HS_ACKDET : 1; /*!< [6..6] Master: Master is in High Speed mode and the High Speed + * Master code was acknowledged (wrong behavior).1 = HS Master + * code ACKed in HS Mode.0 = HS Master code ACKed in HS Mode- + * scenario not present. */ + __IM uint32_t ABRT_SBYTE_ACKDET : 1; /*!< [7..7] Master: Master has sent a START Byte and the START Byte + * was acknowledged (wrong behavior). 1 = ACK detected for + * START byte.0 = ACK detected for START byte- scenario not + * present. */ + __IM uint32_t ABRT_HS_NORSTRT : 1; /*!< [8..8] Master-Transmitter or Master-Receiver: The restart is + * disabled (IC_RESTART_EN bit (I2C_CON[5]) = 0) and the user + * is trying to use the master to transfer data in High Speed + * mode.1 = User trying to switch Master to HS mode when RESTART + * disabled.0 = User trying to switch Master to HS mode when + * RESTART disabled- scenario not present. */ + __IM uint32_t ABRT_SBYTE_NORSTRT : 1; /*!< [9..9] Master: To clear Bit 9, the source of the ABRT_SBYTE_NORSTRT + * must be fixed first; restart must be enabled (I2C_CON[5]=1), + * the SPECIAL bit must be cleared (I2C_TAR[11]), or the GC_OR_START + * bit must be cleared (I2C_TAR[10]). Once the source of the + * ABRT_SBYTE_NORSTRT is fixed, then this bit can be cleared + * in the same manner as other bits in this register. If the + * source of the ABRT_SBYTE_NORSTRT is not fixed before attempting + * to clear this bit, bit 9 clears for one cycle and then + * gets re-asserted. 1: The res */ + __IM uint32_t ABRT_10B_RD_NORSTRT : 1; /*!< [10..10] Master-Receiver: The restart is disabled (IC_RESTART_EN + * bit (I2C_CON[5]) = 0) and the master sends a read command + * in 10-bit addressing mode.1 = Master trying to read in + * 10-bit addressing mode when RESTART disabled.0 = Master + * not trying to read in 10-bit addressing mode when RESTART + * disabled. */ + __IM uint32_t ABRT_MASTER_DIS : 1; /*!< [11..11] Master-Transmitter or Master-Receiver: User tries to + * initiate a Master operation with the Master mode disabled.1 + * = User intitating master operation when MASTER disable.0 + * = User initiating master operation when MASTER disabled- + * scenario not present. */ + __IM uint32_t ARB_LOST : 1; /*!< [12..12] Master-Transmitter or Slave-Transmitter: Master has + * lost arbitration, or if I2C_TX_ABRT_SOURCE[14] is also + * set, then the slave transmitter has lost arbitration. Note: + * I2C can be both master and slave at the same time.1 = Master + * or Slave-Transmitter lost arbitration.0 = Master or Slave-Transmitter + * lost arbitration- scenario not present. */ + __IM uint32_t ABRT_SLVFLUSH_TXFIFO : 1; /*!< [13..13] Slave-Transmitter: Slave has received a read command + * and some data exists in the TX FIFO so the slave issues + * a TX_ABRT interrupt to flush old data in TX FIFO.1 = Slave + * flushes existing data in TX-FIFO upon getting read command.0 + * = Slave flushes existing data in TX-FIFO upon getting read + * command- scenario not present. */ + __IM uint32_t ABRT_SLV_ARBLOST : 1; /*!< [14..14] Slave-Transmitter: Slave lost the bus while transmitting + * data to a remote master. I2C_TX_ABRT_SOURCE[12] is set + * at the same time. Note: Even though the slave never "owns" + * the bus, something could go wrong on the bus. This is a + * fail safe check. For instance, during a data transmission + * at the low-to-high transition of SCL, if what is on the + * data bus is not what is supposed to be transmitted, then + * the controller no longer own the bus.1 = Slave lost arbitration + * to remote master.0 = Slave lost arbitra */ + __IM uint32_t ABRT_SLVRD_INTX : 1; /*!< [15..15] Slave-Transmitter: When the processor side responds + * to a slave mode request for data to be transmitted to a + * remote master and a user writes a 1 in CMD (bit 8) of 2IC_DATA_CMD + * register.1 = Slave trying to transmit to remote master + * in read mode.0 = Slave trying to transmit to remote master + * in read mode- scenario not present. */ + __IM uint32_t ABRT_USER_ABRT : 1; /*!< [16..16] Master-Transmitter: This is a master-mode-only bit. + * Master has detected the transfer abort (IC_ENABLE[1]). */ + uint32_t : 15; + } I2C2_TX_ABRT_SOURCE_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t I2C2_DMA_CR_REG; /*!< (@ 0x00000088) DMA Control Register */ + + struct + { + __IOM uint32_t RDMAE : 1; /*!< [0..0] Receive DMA Enable. This bit enables/disables the receive + * FIFO DMA channel.0 = Receive DMA disabled.1 = Receive DMA + * enabled. */ + __IOM uint32_t TDMAE : 1; /*!< [1..1] Transmit DMA Enable. This bit enables/disables the transmit + * FIFO DMA channel.0 = Transmit DMA disabled.1 = Transmit + * DMA enabled. */ + uint32_t : 30; + } I2C2_DMA_CR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_DMA_TDLR_REG; /*!< (@ 0x0000008C) DMA Transmit Data Level Register */ + + struct + { + __IOM uint32_t DMATDL : 5; /*!< [4..0] Transmit Data Level. This bit field controls the level + * at which a DMA request is made by the transmit logic. It + * is equal to the watermark level; that is, the dma_tx_req + * signal is generated when the number of valid data entries + * in the transmit FIFO is equal to or below this field value, + * and TDMAE = 1. */ + uint32_t : 27; + } I2C2_DMA_TDLR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_DMA_RDLR_REG; /*!< (@ 0x00000090) I2C Receive Data Level Register */ + + struct + { + __IOM uint32_t DMARDL : 5; /*!< [4..0] Receive Data Level. This bit field controls the level + * at which a DMA request is made by the receive logic. The + * watermark level = DMARDL+1; that is, dma_rx_req is generated + * when the number of valid data entries in the receive FIFO + * is equal to or more than this field value + 1, and RDMAE + * =1. For instance, when DMARDL is 0, then dma_rx_req is + * asserted when 1 or more data entries are present in the + * receive FIFO. */ + uint32_t : 27; + } I2C2_DMA_RDLR_REG_b; + }; + + union + { + __IOM uint32_t I2C2_SDA_SETUP_REG; /*!< (@ 0x00000094) I2C SDA Setup Register */ + + struct + { + __IOM uint32_t SDA_SETUP : 8; /*!< [7..0] SDA Setup.This register controls the amount of time delay + * (number of I2C clock periods) between the rising edge of + * SCL and SDA changing by holding SCL low when I2C block + * services a read request while operating as a slave-transmitter. + * The relevant I2C requirement is tSU:DAT (note 4) as detailed + * in the I2C Bus Specification. This register must be programmed + * with a value equal to or greater than 2.It is recommended + * that if the required delay is 1000 ns, then for an I2C + * frequency of 10 MHz, IC_SDA_SE */ + uint32_t : 24; + } I2C2_SDA_SETUP_REG_b; + }; + + union + { + __IOM uint32_t I2C2_ACK_GENERAL_CALL_REG; /*!< (@ 0x00000098) I2C ACK General Call Register */ + + struct + { + __IOM uint32_t ACK_GEN_CALL : 1; /*!< [0..0] ACK General Call. When set to 1, I2C Ctrl responds with + * a ACK (by asserting ic_data_oe) when it receives a General + * Call. When set to 0, the controller does not generate General + * Call interrupts.1 = Generate ACK for a General Call.0 = + * Generate NACK for General Call. */ + uint32_t : 31; + } I2C2_ACK_GENERAL_CALL_REG_b; + }; + + union + { + __IOM uint32_t I2C2_ENABLE_STATUS_REG; /*!< (@ 0x0000009C) I2C Enable Status Register */ + + struct + { + __IM uint32_t IC_EN : 1; /*!< [0..0] ic_en Status. This bit always reflects the value driven + * on the output port ic_en. When read as 1, the controller + * is deemed to be in an enabled state.When read as 0, the + * controller is deemed completely inactive.NOTE: The CPU + * can safely read this bit anytime. When this bit is read + * as 0, the CPU can safely read SLV_RX_DATA_LOST (bit 2) + * and SLV_DISABLED_WHILE_BUSY (bit 1).1 = I2C enabled.0 = + * I2C disabled. */ + __IM uint32_t SLV_DISABLED_WHILE_BUSY : 1; /*!< [1..1] Slave Disabled While Busy (Transmit, Receive). This bit + * indicates if a potential or active Slave operation has + * aborted due to the setting of the IC_ENABLE register from + * 1 to 0. This bit is set when the CPU writes a 0 to the + * IC_ENABLE register while:(a) I2C Ctrl is receiving the + * address byte of the Slave-Transmitter operation from a + * remote master; OR,(b) address and data bytes of the Slave-Receiver + * operation from a remote master. When read as 1, the controller + * is deemed to have forced a NACK durin */ + __IM uint32_t SLV_RX_DATA_LOST : 1; /*!< [2..2] Slave Received Data Lost. This bit indicates if a Slave-Receiver + * operation is aborted with at least one data byte received + * from an I2C transfer due to the setting of IC_ENABLE from + * 1 to 0. When read as 1, the controller is deemed to have + * actively engaged in an aborted I2C transfer (with matching + * address) and the data phase of the I2C transfer is entered, + * even though a data byte is responded with a NACK. NOTE: + * If the remote I2C master terminates the transfer with a + * STOP condition before the controller has */ + uint32_t : 29; + } I2C2_ENABLE_STATUS_REG_b; + }; + + union + { + __IOM uint32_t I2C2_IC_FS_SPKLEN_REG; /*!< (@ 0x000000A0) I2C SS and FS spike suppression limit Size */ + + struct + { + __IOM uint32_t I2C_FS_SPKLEN : 8; /*!< [7..0] This register must be set before any I2C bus transaction + * can take place to ensure stable operation. This register + * sets the duration, measured in ic_clk cycles, of the longest + * spike in the SCL or SDA lines that are filtered out by + * the spike suppression logic. This register can be written + * only when the I2C interface is disabled which corresponds + * to the IC_ENABLE register being set to 0. Write at other + * times have no effect. The minimum valid value is 1; hardware + * prevents values less than this being written, */ + uint32_t : 24; + } I2C2_IC_FS_SPKLEN_REG_b; + }; + + union + { + __IOM uint32_t I2C2_IC_HS_SPKLEN_REG; /*!< (@ 0x000000A4) I2C HS spike suppression limit Size */ + + struct + { + __IOM uint32_t I2C_HS_SPKLEN : 8; /*!< [7..0] This register must be set before any I2C bus transaction + * can take place to ensure stable operation. This register + * sets the duration, measured in ic_clk cycles, of the longest + * spike in the SCL or SDA lines that are filtered out by + * the spike suppression logic. This register can be written + * only when the I2C interface is disabled which corresponds + * to the IC_ENABLE[0] register being set to 0. Write at other + * times have no effect.The minimum valid value is 1; hardware + * prevents values less than this being wr */ + uint32_t : 24; + } I2C2_IC_HS_SPKLEN_REG_b; + }; + __IM uint32_t RESERVED1[19]; + + union + { + __IOM uint32_t I2C2_COMP_PARAM1_REG; /*!< (@ 0x000000F4) I2C2_COMP_PARAM1_REG */ + + struct + { + __IM uint32_t IC_COMP_PARAM1 : 32; /*!< [31..0] IC_COMP_PARAM1 */ + } I2C2_COMP_PARAM1_REG_b; + }; + + union + { + __IOM uint32_t I2C2_COMP_VERSION_REG; /*!< (@ 0x000000F8) I2C2_COMP_VERSION_REG */ + + struct + { + __IM uint32_t IC_COMP_VERSION : 32; /*!< [31..0] IC_COMP_VERSION */ + } I2C2_COMP_VERSION_REG_b; + }; + + union + { + __IOM uint32_t I2C2_COMP_TYPE_REG; /*!< (@ 0x000000FC) I2C2_COMP_TYPE_REG */ + + struct + { + __IM uint32_t IC_COMP_TYPE : 32; /*!< [31..0] IC_COMP_TYPE */ + } I2C2_COMP_TYPE_REG_b; + }; +} I2C2_Type; /*!< Size = 256 (0x100) */ + +/* =========================================================================================================================== */ +/* ================ KDMA ================ */ +/* =========================================================================================================================== */ + +/** + * @brief KDMA registers (KDMA) + */ + +typedef struct /*!< (@ 0x40070A00) KDMA Structure */ +{ + union + { + __IOM uint32_t KDMA_ENABLE_REG; /*!< (@ 0x00000000) Enable kDMA */ + + struct + { + __IOM uint32_t DMA_ENABLE : 1; /*!< [0..0] Write 1 : Enable DMAWrite 0 : Disable DMA */ + uint32_t : 31; + } KDMA_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t KDMA_RESET_REG; /*!< (@ 0x00000004) Software reset of kDMA */ + + struct + { + __IOM uint32_t DMA_RESET : 1; /*!< [0..0] Write 1 : Reset DMA, and automatically return to 0 */ + uint32_t : 31; + } KDMA_RESET_REG_b; + }; + + union + { + __IOM uint32_t KDMA_CFG_DESCRIPTOR_ADDR_REG; /*!< (@ 0x00000008) Base address of first task descriptor memory + * area */ + + struct + { + __IOM uint32_t CFG_DESCRIPTOR_ADDR : 32; /*!< [31..0] Base address of first task descriptor memory area */ + } KDMA_CFG_DESCRIPTOR_ADDR_REG_b; + }; + + union + { + __IOM uint32_t KDMA_CHANNEL_ENABLE_REG; /*!< (@ 0x0000000C) Enable the channel of kDMA */ + + struct + { + __IOM uint32_t CHANNEL_ENABLE : 12; /*!< [11..0] Enable DMA channel(1 : enable channel, 0 : disable channel) */ + uint32_t : 20; + } KDMA_CHANNEL_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t KDMA_IRQ_DONE_TYPE_REG; /*!< (@ 0x00000010) dma_done Interrupt type */ + + struct + { + __IOM uint32_t CHANNEL0_DONE_TYPE : 2; /*!< [1..0] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL1_DONE_TYPE : 2; /*!< [3..2] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL2_DONE_TYPE : 2; /*!< [5..4] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL3_DONE_TYPE : 2; /*!< [7..6] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL4_DONE_TYPE : 2; /*!< [9..8] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL5_DONE_TYPE : 2; /*!< [11..10] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL6_DONE_TYPE : 2; /*!< [13..12] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL7_DONE_TYPE : 2; /*!< [15..14] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL8_DONE_TYPE : 2; /*!< [17..16] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL9_DONE_TYPE : 2; /*!< [19..18] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL10_DONE_TYPE : 2; /*!< [21..20] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + __IOM uint32_t CHANNEL11_DONE_TYPE : 2; /*!< [23..22] dma_done interrupt type0 : dma_done interrupt enable + * when DMA chain is done1 : dma_done interrupt enable when + * DMA task is done2 : dma_done interrupt enable when REQ_MODE + * = 0 and arbitration period is ended3 : Reserved */ + uint32_t : 8; + } KDMA_IRQ_DONE_TYPE_REG_b; + }; + + union + { + __IOM uint32_t KDMA_SW_REQUEST_REG; /*!< (@ 0x00000014) kDMA software request */ + + struct + { + __OM uint32_t SW_REQUEST : 12; /*!< [11..0] Write 1 : send request signal, and automatically return + * to 0 */ + uint32_t : 20; + } KDMA_SW_REQUEST_REG_b; + }; + + union + { + __IOM uint32_t KDMA_IRQ_DONE_REG; /*!< (@ 0x00000018) Indicator of which channel invokes kdma_done */ + + struct + { + __IM uint32_t IRQ_DONE : 12; /*!< [11..0] Indicator of which channel invokes dma_done */ + uint32_t : 20; + } KDMA_IRQ_DONE_REG_b; + }; + + union + { + __IOM uint32_t KDMA_IRQ_DONE_CLR_REG; /*!< (@ 0x0000001C) Clear KDMA_IRQ_DONE */ + + struct + { + __OM uint32_t IRQ_DONE_CLR : 12; /*!< [11..0] Write 1 : clear KDMA_IRQ_DONE, and automatically return + * to 0 */ + uint32_t : 20; + } KDMA_IRQ_DONE_CLR_REG_b; + }; + + union + { + __IOM uint32_t KDMA_IRQ_ERR_REG; /*!< (@ 0x00000020) Indicator of which channel invokes kdma_err */ + + struct + { + __IM uint32_t IRQ_ERR : 12; /*!< [11..0] Indicator of which channel invokes dma_err */ + uint32_t : 20; + } KDMA_IRQ_ERR_REG_b; + }; + + union + { + __IOM uint32_t KDMA_IRQ_ERR_CLR_REG; /*!< (@ 0x00000024) Clear KDMA_IRQ_ERR */ + + struct + { + __OM uint32_t IRQ_ERR_CLR : 12; /*!< [11..0] Write 1 : clear KDMA_IRQ_ERR, and automatically return + * to 0 */ + uint32_t : 20; + } KDMA_IRQ_ERR_CLR_REG_b; + }; + + union + { + __IOM uint32_t KDMA_STATUS_REG; /*!< (@ 0x00000028) Current status of kDMA */ + + struct + { + __IM uint32_t PENDING_CH : 12; /*!< [11..0] Currently pending channel number */ + uint32_t : 4; + __IM uint32_t CURRENT_ACTIVE_CH : 4; /*!< [19..16] Currently active channel number */ + __IM uint32_t CURRENT_STATE : 4; /*!< [23..20] Current state on FSM */ + uint32_t : 8; + } KDMA_STATUS_REG_b; + }; + + union + { + __IOM uint32_t KDMA_STATUS_DESC_ADDR_REG; /*!< (@ 0x0000002C) Address of current task descriptor */ + + struct + { + __IM uint32_t ADDRESS : 32; /*!< [31..0] Address of current task descriptor */ + } KDMA_STATUS_DESC_ADDR_REG_b; + }; + + union + { + __IOM uint32_t KDMA_STATUS_COUNTER_REG; /*!< (@ 0x00000030) Counters of current DMA task */ + + struct + { + __IM uint32_t TRANSFER_DONE_COUNTER : 15; /*!< [14..0] The number of done transfer in current arbitration period */ + __IM uint32_t TRANSFER_LAST_FLAG : 1; /*!< [15..15] The flag to check whether the transfer is last in current + * arbitration period */ + __IM uint32_t ARB_DONE_COUNTER : 15; /*!< [30..16] The number of done arbitration period in current task */ + __IM uint32_t ARB_LAST_FLAG : 1; /*!< [31..31] The flag to check whether the arbitration is last period + * in current task */ + } KDMA_STATUS_COUNTER_REG_b; + }; + + union + { + __IOM uint32_t KDMA_STATUS_DESC_REG; /*!< (@ 0x00000034) Current task descriptor */ + + struct + { + __IM uint32_t TASK_DESCRIPTOR : 32; /*!< [31..0] Current task descriptor */ + } KDMA_STATUS_DESC_REG_b; + }; + + union + { + __IOM uint32_t KDMA_STATUS_DESC_ADDR_PRE_REG; /*!< (@ 0x00000038) Address of previous task descriptor */ + + struct + { + __IM uint32_t ADDRESS : 32; /*!< [31..0] Address of previous task descriptor */ + } KDMA_STATUS_DESC_ADDR_PRE_REG_b; + }; + + union + { + __IOM uint32_t KDMA_AHB_HPROT_3_TO_0_REG; /*!< (@ 0x0000003C) HPROT signal of AHB bus (Channel 0~3) */ + + struct + { + __IOM uint32_t CH0_DST_HPROT : 4; /*!< [3..0] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH0_SRC_HPROT : 4; /*!< [7..4] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH1_DST_HPROT : 4; /*!< [11..8] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH1_SRC_HPROT : 4; /*!< [15..12] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH2_DST_HPROT : 4; /*!< [19..16] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH2_SRC_HPROT : 4; /*!< [23..20] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH3_DST_HPROT : 4; /*!< [27..24] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH3_SRC_HPROT : 4; /*!< [31..28] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + } KDMA_AHB_HPROT_3_TO_0_REG_b; + }; + + union + { + __IOM uint32_t KDMA_AHB_HPROT_7_TO_4_REG; /*!< (@ 0x00000040) HPROT signal of AHB bus (Channel 4~7) */ + + struct + { + __IOM uint32_t CH4_DST_HPROT : 4; /*!< [3..0] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH4_SRC_HPROT : 4; /*!< [7..4] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH5_DST_HPROT : 4; /*!< [11..8] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH5_SRC_HPROT : 4; /*!< [15..12] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH6_DST_HPROT : 4; /*!< [19..16] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH6_SRC_HPROT : 4; /*!< [23..20] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH7_DST_HPROT : 4; /*!< [27..24] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH7_SRC_HPROT : 4; /*!< [31..28] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + } KDMA_AHB_HPROT_7_TO_4_REG_b; + }; + + union + { + __IOM uint32_t KDMA_AHB_HPROT_11_TO_8_REG; /*!< (@ 0x00000044) HPROT signal of AHB bus (Channel 8~11) */ + + struct + { + __IOM uint32_t CH8_DST_HPROT : 4; /*!< [3..0] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH8_SRC_HPROT : 4; /*!< [7..4] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH9_DST_HPROT : 4; /*!< [11..8] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH9_SRC_HPROT : 4; /*!< [15..12] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH10_DST_HPROT : 4; /*!< [19..16] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH10_SRC_HPROT : 4; /*!< [23..20] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH11_DST_HPROT : 4; /*!< [27..24] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + __IOM uint32_t CH11_SRC_HPROT : 4; /*!< [31..28] HPROT signal of AHB bus[3] : Modifiable (1: Cacheable, + * 0: Non-cacheable)[2] : Bufferable (1: Bufferable, 0: Non-bufferable)[1] + * : Privileged (1: Privileged, 0: User access)[0] : Data/Opcode + * (1: Data access, 0: Opcode fetch) */ + } KDMA_AHB_HPROT_11_TO_8_REG_b; + }; + + union + { + __IOM uint32_t KDMA_LLI_COUNTER_REG; /*!< (@ 0x00000048) kDMA software request */ + + struct + { + __IM uint32_t LLI_COUNTER : 16; /*!< [15..0] Total LLI count for the last transfer done, reset when + * the next transfer is started */ + __IM uint32_t LAST_DONE_CHANNEL : 4; /*!< [19..16] Last transfer done channel number, reset when the next + * transfer is started */ + uint32_t : 12; + } KDMA_LLI_COUNTER_REG_b; + }; +} KDMA_Type; /*!< Size = 76 (0x4c) */ + +/* =========================================================================================================================== */ +/* ================ MEMCTRL ================ */ +/* =========================================================================================================================== */ + +/** + * @brief MEMCTRL registers (MEMCTRL) + */ + +typedef struct /*!< (@ 0x400B0800) MEMCTRL Structure */ +{ + union + { + __IOM uint32_t MEMCTRL_STALL_REG; /*!< (@ 0x00000000) Maximum Stall cycles Control Register */ + + struct + { + __IOM uint32_t AHB_CPUC_MAX_STALL : 4; /*!< [3..0] Maximum allowed number of stall cycles for the CPUC AHB + * interface. If exceeded, the interface will get high priority. + * Valid for a single access so the next access (of a burst) + * might end up in the queue for the same number of wait cycles.0: + * don't use, not feasible and can block other interfaces1: + * max 1 stall cycle15: max 15 stall cycles */ + __IOM uint32_t AHB_CPUS_MAX_STALL : 4; /*!< [7..4] Maximum allowed number of stall cycles for the CPUS AHB + * interface. If exceeded, the interface will get high priority. + * Valid for a single access so the next access (of a burst) + * might end up in the queue for the same number of wait cycles.0: + * don't use, not feasible and can block other interfaces1: + * max 1 stall cycle15: max 15 stall cycles */ + __IOM uint32_t AHB_DMA_MAX_STALL : 4; /*!< [11..8] Maximum allowed number of stall cycles for the DMA AHB + * interface. If exceeded, the interface will get high priority. + * Valid for a single access so the next access (of a burst) + * might end up in the queue for the same number of wait cycles.0: + * don't use, not feasible and can block other interfaces1: + * max 1 stall cycle15: max 15 stall cycles */ + __IOM uint32_t WIFI_MAC_MAX_STALL : 4; /*!< [15..12] Maximum allowed number of stall cycles for the Wi-Fi + * MAC AHB interface. If exceeded, the interface will get + * high priority. Valid for a single access so the next access + * (of a burst) might end up in the queue for the same number + * of wait cycles.0: don't use, not feasible and can block + * other interfaces1: max 1 stall cycle15: max 15 stall cycles */ + __IOM uint32_t WIFI_HSU_MAX_STALL : 4; /*!< [19..16] Maximum allowed number of stall cycles for the Wi-Fi + * HSU AHB interface. If exceeded, the interface will get + * high priority. Valid for a single access so the next access + * (of a burst) might end up in the queue for the same number + * of wait cycles.0: don't use, not feasible and can block + * other interfaces1: max 1 stall cycle15: max 15 stall cycles */ + __IOM uint32_t CIS_MAX_STALL : 4; /*!< [23..20] Maximum allowed number of stall cycles for the SDIO + * CIS interface. If exceeded, the interface will get high + * priority. Valid for a single access so the next access + * (of a burst) might end up in the queue for the same number + * of wait cycles.0: don't use, not feasible and can block + * other interfaces1: max 1 stall cycle15: max 15 stall cycles */ + uint32_t : 8; + } MEMCTRL_STALL_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_STATUS_REG; /*!< (@ 0x00000004) RAM cells Status Register */ + + struct + { + __IOM uint32_t RAM0_OFF_BUT_ACCESS : 1; /*!< [0..0] Reading a '1' indicates RAM0 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM1_OFF_BUT_ACCESS : 1; /*!< [1..1] Reading a '1' indicates RAM1 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM2_OFF_BUT_ACCESS : 1; /*!< [2..2] Reading a '1' indicates RAM2 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM3_OFF_BUT_ACCESS : 1; /*!< [3..3] Reading a '1' indicates RAM3 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM4_OFF_BUT_ACCESS : 1; /*!< [4..4] Reading a '1' indicates RAM4 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM5_OFF_BUT_ACCESS : 1; /*!< [5..5] Reading a '1' indicates RAM5 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM6_OFF_BUT_ACCESS : 1; /*!< [6..6] Reading a '1' indicates RAM6 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM7_OFF_BUT_ACCESS : 1; /*!< [7..7] Reading a '1' indicates RAM7 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM8_OFF_BUT_ACCESS : 1; /*!< [8..8] Reading a '1' indicates RAM8 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM9_OFF_BUT_ACCESS : 1; /*!< [9..9] Reading a '1' indicates RAM9 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM10_OFF_BUT_ACCESS : 1; /*!< [10..10] Reading a '1' indicates RAM10 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM11_OFF_BUT_ACCESS : 1; /*!< [11..11] Reading a '1' indicates RAM11 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM12_OFF_BUT_ACCESS : 1; /*!< [12..12] Reading a '1' indicates RAM12 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM13_OFF_BUT_ACCESS : 1; /*!< [13..13] Reading a '1' indicates RAM13 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM14_OFF_BUT_ACCESS : 1; /*!< [14..14] Reading a '1' indicates RAM14 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM15_OFF_BUT_ACCESS : 1; /*!< [15..15] Reading a '1' indicates RAM15 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM16_OFF_BUT_ACCESS : 1; /*!< [16..16] Reading a '1' indicates RAM16 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM17_OFF_BUT_ACCESS : 1; /*!< [17..17] Reading a '1' indicates RAM17 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM18_OFF_BUT_ACCESS : 1; /*!< [18..18] Reading a '1' indicates RAM18 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM19_OFF_BUT_ACCESS : 1; /*!< [19..19] Reading a '1' indicates RAM19 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM20_OFF_BUT_ACCESS : 1; /*!< [20..20] Reading a '1' indicates RAM20 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM21_OFF_BUT_ACCESS : 1; /*!< [21..21] Reading a '1' indicates RAM21 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM22_OFF_BUT_ACCESS : 1; /*!< [22..22] Reading a '1' indicates RAM22 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM23_OFF_BUT_ACCESS : 1; /*!< [23..23] Reading a '1' indicates RAM23 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + uint32_t : 8; + } MEMCTRL_STATUS_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_PRIO_ARB_REG; /*!< (@ 0x00000008) Priority Control Register for RAM cells from + * 0 to 23 */ + + struct + { + __IOM uint32_t PRIO_ARB_CPUC_RAM : 2; /*!< [1..0] Priority of RAM0~RAM23 for the CPUC AHB interface.00: + * low priority01: mid priority (default)1x: highest */ + __IOM uint32_t PRIO_ARB_CPUS_RAM : 2; /*!< [3..2] Priority of RAM0~RAM23 for the CPUS AHB interface.00: + * low priority01: mid priority (default)1x: highest */ + __IOM uint32_t PRIO_ARB_DMA_RAM : 2; /*!< [5..4] Priority of RAM0~RAM23 for the DMA AHB interface.00: + * low priority01: mid priority (default)1x: highest */ + __IOM uint32_t PRIO_ARB_WIFI_MAC_RAM : 2; /*!< [7..6] Priority of RAM0~RAM23 for the Wi-Fi MAC AHB interface.00: + * low priority01: mid priority (default)1x: highest */ + __IOM uint32_t PRIO_ARB_WIFI_HSU_RAM : 2; /*!< [9..8] Priority of RAM0~RAM23 for the Wi-Fi HSU AHB interface.00: + * low priority01: mid priority (default)1x: highest */ + __IOM uint32_t PRIO_ARB_CIS_RAM : 2; /*!< [11..10] Priority of RAM0~RAM23 for the SDIO CIS interface.00: + * low priority01: mid priority (default)1x: highest */ + uint32_t : 20; + } MEMCTRL_PRIO_ARB_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_STATIC_CLK_OFF_REG; /*!< (@ 0x0000000C) Memory Static Clock Off register */ + + struct + { + __IOM uint32_t SRAM0 : 1; /*!< [0..0] Static clock off - SRAM0 */ + __IOM uint32_t SRAM1 : 1; /*!< [1..1] Static clock off - SRAM1 */ + __IOM uint32_t SRAM2 : 1; /*!< [2..2] Static clock off - SRAM2 */ + __IOM uint32_t SRAM3 : 1; /*!< [3..3] Static clock off - SRAM3 */ + __IOM uint32_t SRAM4 : 1; /*!< [4..4] Static clock off - SRAM4 */ + __IOM uint32_t SRAM5 : 1; /*!< [5..5] Static clock off - SRAM5 */ + __IOM uint32_t SRAM6 : 1; /*!< [6..6] Static clock off - SRAM6 */ + __IOM uint32_t SRAM7 : 1; /*!< [7..7] Static clock off - SRAM7 */ + __IOM uint32_t SRAM8 : 1; /*!< [8..8] Static clock off - SRAM8 */ + __IOM uint32_t SRAM9 : 1; /*!< [9..9] Static clock off - SRAM9 */ + __IOM uint32_t SRAM10 : 1; /*!< [10..10] Static clock off - SRAM10 */ + __IOM uint32_t SRAM11 : 1; /*!< [11..11] Static clock off - SRAM11 */ + __IOM uint32_t SRAM12 : 1; /*!< [12..12] Static clock off - SRAM12 */ + __IOM uint32_t SRAM13 : 1; /*!< [13..13] Static clock off - SRAM13 */ + __IOM uint32_t SRAM14 : 1; /*!< [14..14] Static clock off - SRAM14 */ + __IOM uint32_t SRAM15 : 1; /*!< [15..15] Static clock off - SRAM15 */ + __IOM uint32_t SRAM16 : 1; /*!< [16..16] Static clock off - SRAM16 */ + __IOM uint32_t SRAM17 : 1; /*!< [17..17] Static clock off - SRAM17 */ + __IOM uint32_t SRAM18 : 1; /*!< [18..18] Static clock off - SRAM18 */ + __IOM uint32_t SRAM19 : 1; /*!< [19..19] Static clock off - SRAM19 */ + __IOM uint32_t SRAM20 : 1; /*!< [20..20] Static clock off - SRAM20 */ + __IOM uint32_t SRAM21 : 1; /*!< [21..21] Static clock off - SRAM21 */ + __IOM uint32_t SRAM22 : 1; /*!< [22..22] Static clock off - SRAM22 */ + __IOM uint32_t SRAM23 : 1; /*!< [23..23] Static clock off - SRAM23 */ + uint32_t : 8; + } MEMCTRL_STATIC_CLK_OFF_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_DYNAMIC_CLK_ON_REG; /*!< (@ 0x00000010) Memory Dynamic Clock On register */ + + struct + { + __IOM uint32_t AHB2MEM : 1; /*!< [0..0] Dynamic clock on - AHB2MEM */ + __IOM uint32_t ARBITER : 1; /*!< [1..1] Dynamic clock on - Arbiters */ + uint32_t : 1; + __IOM uint32_t MMI2MEM : 1; /*!< [3..3] Dynamic clock on - MMI2MEM */ + uint32_t : 1; + __IOM uint32_t MEM_UNIT : 1; /*!< [5..5] Dynamic clock on - Memory Units */ + uint32_t : 26; + } MEMCTRL_DYNAMIC_CLK_ON_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_MST_CLK_EN_REG; /*!< (@ 0x00000014) Memory Master Clock En register */ + + struct + { + __IOM uint32_t MST_CPUC_CLK_EN : 1; /*!< [0..0] Clock Enable for memctrl's master - CPUCIf this value + * is 0, memctrl's master to memory interface conversion block's + * clock is off. */ + __IOM uint32_t MST_CPUS_CLK_EN : 1; /*!< [1..1] Clock Enable for memctrl's master - CPUSIf this value + * is 0, memctrl's master to memory interface conversion block's + * clock is off. */ + __IOM uint32_t MST_DMA_CLK_EN : 1; /*!< [2..2] Clock Enable for memctrl's master - DMAIf this value + * is 0, memctrl's master to memory interface conversion block's + * clock is off. */ + __IOM uint32_t MST_WIFI_MAC_CLK_EN : 1; /*!< [3..3] Clock Enable for memctrl's master - Wi-Fi MACIf this + * value is 0, memctrl's master to memory interface conversion + * block's clock is off. */ + __IOM uint32_t MST_WIFI_HSU_CLK_EN : 1; /*!< [4..4] Clock Enable for memctrl's master - Wi-Fi HSUIf this + * value is 0, memctrl's master to memory interface conversion + * block's clock is off. */ + __IOM uint32_t MST_CIS_CLK_EN : 1; /*!< [5..5] Clock Enable for memctrl's master - SDIO CISIf this value + * is 0, memctrl's master to memory interface conversion block's + * clock is off. */ + uint32_t : 26; + } MEMCTRL_MST_CLK_EN_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_SYS_ARB_REG; /*!< (@ 0x00000018) APB_SYS ICM Priority level */ + + struct + { + __IOM uint32_t APB_AHB_DMA_PRIO : 1; /*!< [0..0] priority AHB_DMA layer system bus0x0 : Highest priority0x1 + * : Second prority */ + __IOM uint32_t APB_AHB_CPUS_PRIO : 1; /*!< [1..1] priority AHB_CPUS layer system bus0x0 : Highest priority0x1 + * : Second prority */ + uint32_t : 30; + } MEMCTRL_SYS_ARB_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_AUD_ARB_REG; /*!< (@ 0x0000001C) APB_AUDIO ICM Priority level */ + + struct + { + __IOM uint32_t APB_AHB_DMA_PRIO : 1; /*!< [0..0] priority AHB_DMA layer system bus0x0 : Highest priority0x1 + * : Second prority */ + __IOM uint32_t APB_AHB_CPUS_PRIO : 1; /*!< [1..1] priority AHB_CPUS layer system bus0x0 : Highest priority0x1 + * : Second prority */ + uint32_t : 30; + } MEMCTRL_AUD_ARB_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_CC312_ARB_REG; /*!< (@ 0x00000020) APB_CC312 ICM Priority level */ + + struct + { + __IOM uint32_t APB_AHB_DMA_PRIO : 1; /*!< [0..0] priority AHB_DMA layer system bus0x0 : Highest priority0x1 + * : Second prority */ + __IOM uint32_t APB_AHB_CPUS_PRIO : 1; /*!< [1..1] priority AHB_CPUS layer system bus0x0 : Highest priority0x1 + * : Second prority */ + uint32_t : 30; + } MEMCTRL_CC312_ARB_REG_b; + }; + + union + { + __IOM uint32_t MEMCTRL_CIS_BASE_ADDR_REG; /*!< (@ 0x00000024) MEMCTRL_CIS_BASE_ADDR_REG */ + + struct + { + __IOM uint32_t MEM_CIS_BASE_ADDR : 23; /*!< [22..0] Base address of SDIO CIS interface.Full_32bit_address + * = { MEM_CIS_BASE_ADDR[22:0], cis_addr[6:0], 2'b00 };So + * Full_32bit_address [31:9] = MEM_CIS_BASE_ADDR[22:0];ex1) + * When MEM_CIS_BASE_ADDR[22:0] = 0x10057E (reset value)Then + * Full_32bit_address base address by MEM_CIS_BASE_ADDR is + * 0x200A_FC00.Full_32bit_address = 0x200A_FC00 When cis_addr[6:0] + * = 0x00.Full_32bit_address = 0x200A_FDFC When cis_addr[6:0] + * = 0x7F.So, Full_32bit_address range is 0x200AFC00 ~ 0x200AFDFF.ex2 */ + uint32_t : 9; + } MEMCTRL_CIS_BASE_ADDR_REG_b; + }; +} MEMCTRL_Type; /*!< Size = 40 (0x28) */ + +/* =========================================================================================================================== */ +/* ================ OQSPIF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief OQSPIF registers (OQSPIF) + */ + +typedef struct /*!< (@ 0x29000000) OQSPIF Structure */ +{ + union + { + __IOM uint32_t OQSPIF_CTRLBUS_REG; /*!< (@ 0x00000000) SPI Bus control register for the Manual mode */ + + struct + { + __OM uint32_t OSPIC_SET_SINGLE : 1; /*!< [0..0] Write 1 to set the bus mode in Single SPI mode, when + * the controller is in Manual mode. */ + __OM uint32_t OSPIC_SET_DUAL : 1; /*!< [1..1] Write 1 to set the bus mode in Dual mode, when the controller + * is in Manual mode. */ + __OM uint32_t OSPIC_SET_QUAD : 1; /*!< [2..2] Write 1 to set the bus mode in Quad mode, when the controller + * is in Manual mode. */ + __OM uint32_t OSPIC_SET_OCTAL : 1; /*!< [3..3] Write 1 to set the bus mode in Octal mode, when the controller + * is in Manual mode. */ + __OM uint32_t OSPIC_EN_CS : 1; /*!< [4..4] Write 1 to enable the chip select (active low), when + * the controller is in Manual mode. */ + __OM uint32_t OSPIC_DIS_CS : 1; /*!< [5..5] Write 1 to disable the chip select (active low), when + * the controller is in Manual mode. */ + uint32_t : 26; + } OQSPIF_CTRLBUS_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTRLMODE_REG; /*!< (@ 0x00000004) Mode Control register */ + + struct + { + __IOM uint32_t OSPIC_AUTO_MD : 1; /*!< [0..0] Mode of operation.0: Manual mode is selected.1: Auto + * mode is selected.While erasing, the OSPIC_AUTO_MD goes + * in Read-only mode (see OSPIC_ERASE_EN). */ + __IOM uint32_t OSPIC_CLK_MD : 1; /*!< [1..1] Mode of the generated OSPI_SCK clock.0: Use Mode 0 for + * the OSPI_CLK. The OSPI_SCK is low when OSPI_CS is high.1: + * Use Mode 3 for the OSPI_CLK. The OSPI_SCK is high when + * OSPI_CS is high. */ + __IOM uint32_t OSPIC_IO2_OEN : 1; /*!< [2..2] Force the output enable of the OSPI_IO2. Set this bit + * to 1 only in SPI or Dual SPI mode to control the /WP signal. + * When the Quad or Octal SPI is enabled in the flash device, + * set this bit to zero.0: The OSPI_IO2 pad direction is decided + * by the controller.1: The OSPI_IO2 pad is output. The output + * value is defined by the OSPIC_IO2_DAT. */ + __IOM uint32_t OSPIC_IO3_OEN : 1; /*!< [3..3] Force the output enable of the OSPI_IO3. Set this bit + * to 1 only in SPI or Dual SPI mode to control the /HOLD + * signal. When the Quad or Octal SPI is enabled in the flash + * device, set this bit to zero.0: The OSPI_IO3 pad direction + * is decided by the controller.1: The OSPI_IO3 pad is output. + * The output value is defined by the OSPIC_IO3_DAT. */ + __IOM uint32_t OSPIC_IO2_DAT : 1; /*!< [4..4] The value of OSPI_IO2 pad if OSPI_IO2_OEN is 1. */ + __IOM uint32_t OSPIC_IO3_DAT : 1; /*!< [5..5] The value of OSPI_IO3 pad if OSPI_IO3_OEN is 1. */ + __IOM uint32_t OSPIC_HRDY_MD : 1; /*!< [6..6] This configuration bit is useful when the frequency of + * the OSPI clock is lower than that of the AMBA bus, to avoid + * locking the AMBA bus for an extended period.0: Add wait + * states through hready signal when an access is performed + * on the OSPIC_CTRLBUS_REG, OSPIC_WRITEDATA, OSPIC_READDATA + * and OSPIC_DUMMYDATA registers. It is not needed to check + * the OSPIC_BUSY of the OSPIC_STATUS_REG.1: The controller + * does not add wait states through the hready signal when + * is performed access on the OSPIC_CTRLBUS_REG, */ + __IOM uint32_t OSPIC_RXD_NEG : 1; /*!< [7..7] Define the clock edge that is used for the capturing + * of the received data, when the read pipe is not active + * (OSPIC_RPIPE_EN = 0).0: Sampling of the received data with + * the positive edge of the OSPI_SCK.1: Sampling of the received + * data with the negative edge of the OSPI_SCK.The internal + * OSPI_SCK clock that is used by the controller for the capturing + * of the received data has a skew in respect of the OSPI_SCK + * that is received by the external memory device.To improve + * the timing requirements of the */ + __IOM uint32_t OSPIC_RPIPE_EN : 1; /*!< [8..8] Control the use of the data read pipe.0: The read pipe + * is disabled. The sampling clock is defined according to + * the OSPIC_RXD_NEG setting.1: The read pipe is enabled. + * The delay of the sampling clock is defined according to + * the OSPICI_PCLK_MD setting (recommended). */ + __IOM uint32_t OSPIC_PCLK_MD : 3; /*!< [11..9] Read pipe clock delay relative to the falling edge of + * OSPI_SCK.See OSPI Timing for timing parameters and recommended + * 0-7 values. */ + __IOM uint32_t OSPIC_BUF_LIM_EN : 1; /*!< [12..12] This bit has meaning only for the read in Auto mode. + * Defines the behavior of the controller when the internal + * buffer is full and there are more data to be retrieved + * for the current burst.0: The access in the flash device + * is not terminated when the internal buffer has no empty + * space. In this case the OSPI_SCK clock is blocked until + * to free space in the internal buffer.1: The access in the + * flash device is terminated when the internal buffer has + * no empty space. A new access in the flash device is in */ + __IOM uint32_t OSPIC_USE_32BA : 1; /*!< [13..13] Controls the length of the address that the external + * memory device uses.0: The external memory device uses 24 + * bits address.1: The external memory device uses 32 bits + * address.The controller uses this bit in order to decide + * the number of the address bytes that has to transfer to + * the external device during Auto mode. */ + __IOM uint32_t OSPIC_CMD_X2_EN : 1; /*!< [14..14] Define the number of bytes that consist the instruction + * code in the command sequences that produced by the OSPIC + * during Auto mode.0: The instruction code is one byte only.1: + * The instruction code is two bytes. The second byte of the + * instruction code is the inverse of the first byte.The command + * sequence that is produced by the OSPIC_BURSTBRK_REG is + * not affected by this setting. */ + __IOM uint32_t OSPIC_DMY_MD : 1; /*!< [15..15] Define the clock cycle where the bus turns in Hi-Z + * during the transmission of dummy bytes. This is applicable + * in both Manual and Auto mode.0: The bus becomes Hi-Z on + * the last clock.1: The bus becomes Hi-Z on the last two + * clocks. */ + __IOM uint32_t OSPIC_MAN_DIRCHG_MD : 1; /*!< [16..16] Selection of the direction change method in Manual + * mode.0: The bus direction goes to input after each access.1: + * The bus direction goes to input only after a dummy access. */ + __IOM uint32_t OSPIC_RD_ERR_EN : 1; /*!< [17..17] Controls the generation of AHB bus error response when + * a read is performed in the address space where the flash + * device is mapped and Auto mode is not enabled.0: The controller + * ignores the access. There is no error response due to the + * read access.1: The controller responds with an AHB error + * response. */ + __IOM uint32_t OSPIC_INC_LIM_EN : 1; /*!< [18..18] This bit has meaning only for the read in Auto mode + * and only when the read access in the AHB bus is an incremental + * burst of unspecified length.0: The length of the burst + * is considered as unspecified. The access in the flash device + * is implemented as is defined by the OSPIC BUF_LIM_EN bit.1: + * The length of the burst is considered as equal to 8 bytes. + * The access in the flash device is implemented by the controller + * as one or more different bursts, until to be served the + * access in the AHB bus. Each bur */ + uint32_t : 8; + __IOM uint32_t OSPIC_IO_UH_OEN : 1; /*!< [27..27] Forces the output enable for the upper half of the + * OSPI bus (OSPI_IO4-7). Set this bit to 1 only in SPI, Dual + * or Quad SPI mode to control the upper half of the OSPI + * bus. When the Octal SPI is enabled in the flash device, + * set this bit to zero.0: The OSPI_IO4-7 pad direction is + * decided by the controller.1: The OSPI_IO4-7 pad are outputs. + * The output values are defined by the corresponding OSPIC_IO_UH_DAT + * bits. */ + __IOM uint32_t OSPIC_IO_UH_DAT : 4; /*!< [31..28] The value of OSPI_IO4-7 pads if OSPI_IO_UH_OEN is 1. */ + } OQSPIF_CTRLMODE_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_RECVDATA_REG; /*!< (@ 0x00000008) Received data for the Manual mode */ + + struct + { + __IM uint32_t OSPIC_RECVDATA : 32; /*!< [31..0] This register contains the received data when the OSPIC_READDATA_REG + * register is used in Manual mode, to retrieve data from + * the external memory device and OSPIC_HRDY_MD=1 && OSPIC_BUSY=0. */ + } OQSPIF_RECVDATA_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_BURSTCMDA_REG; /*!< (@ 0x0000000C) The way of reading in Auto mode (command register + * A) */ + + struct + { + __IOM uint32_t OSPIC_INST : 8; /*!< [7..0] Instruction value for Incremental Burst or Single read + * access. This value is the selected instruction at the cases + * of incremental burst or single read access. Also this value + * is used when a wrapping burst is not supported (OSPIC_WRAP_MD) */ + __IOM uint32_t OSPIC_INST_WB : 8; /*!< [15..8] Instruction value for Wrapping Burst. This value is + * the selected instruction when OSPIC_WRAP_MD is equal to + * 1 and the access is a wrapping burst of length and size + * described by the bit fields OSPIC_WRAP_LEN and OSPIC_WRAP_SIZE + * respectively. */ + __IOM uint32_t OSPIC_EXT_BYTE : 8; /*!< [23..16] The value of an extra byte which is transferred after + * address (only if OSPIC_EXT_BYTE_EN= 1). Usually it is the + * Mode Bits in Dual/Quad/Octal SPI I/O instructions. */ + __IOM uint32_t OSPIC_INST_TX_MD : 2; /*!< [25..24] It describes the mode of the SPI bus during the Instruction + * phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Octal */ + __IOM uint32_t OSPIC_ADR_TX_MD : 2; /*!< [27..26] It describes the mode of the SPI bus during the address + * phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Octal */ + __IOM uint32_t OSPIC_EXT_TX_MD : 2; /*!< [29..28] It describes the mode of the SPI bus during the Extra + * bytes phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Octal */ + __IOM uint32_t OSPIC_DMY_TX_MD : 2; /*!< [31..30] It describes the mode of the SPI bus during the Dummy + * bytes phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Octal */ + } OQSPIF_BURSTCMDA_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_BURSTCMDB_REG; /*!< (@ 0x00000010) The way of reading in Auto mode (command register + * B) */ + + struct + { + __IOM uint32_t OSPIC_DAT_RX_MD : 2; /*!< [1..0] It describes the mode of the SPI bus during the data + * phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Octal */ + __IOM uint32_t OSPIC_EXT_BYTE_EN : 1; /*!< [2..2] Extra byte enable0: Do not send the OSPIC_EXT_BYTE1: + * Send the OSPIC_EXT_BYTE */ + __IOM uint32_t OSPIC_EXT_HF_DS : 1; /*!< [3..3] Extra half disable output.0: If OSPIC_EXT_BYTE_EN=1, + * then transmit the complete OSPIC_EXT_BYTE.1: If OSPIC_EXT_BYTE_EN=1, + * then the output is disabled (Hi-Z) during the transmission + * of bits [3:0] of OSPIC_EXT_BYTE.This setting has no meaning + * if the extra byte is transferred in Octal mode. In this + * case keep this bit to zero value. */ + __IOM uint32_t OSPIC_DMY_NUM : 5; /*!< [8..4] Number of dummy bytes (minus 1). Can be set 1-32 dummy + * bytes (o-31 values). The dummy bytes are appied only when + * OSPIC_DMY_EN=1. */ + __IOM uint32_t OSPIC_DMY_EN : 1; /*!< [9..9] Dummy bytes enable0: Do not send the dummy bytes1: Send + * the dummy bytes. The number of the dummy bytes is defined + * by the OSPIC_DMY_NUM. */ + __IOM uint32_t OSPIC_INST_MD : 1; /*!< [10..10] Instruction mode0: Transmit instruction at any burst + * access.1: Transmit instruction only in the first access + * after the selection of Auto mode. */ + __IOM uint32_t OSPIC_WRAP_MD : 1; /*!< [11..11] Wrap mode0: The OSPIC_INST is the selected instruction + * at any access.1: The OSPIC_INST_WB is the selected instruction + * at any wrapping burst access of length and size described + * by the registers OSPIC_WRAP_LEN and OSPIC_WRAP_SIZE respectively. + * In all other cases the OSPIC_INST is the selected instruction. + * Use this feature only when the serial FLASH memory supports + * a special instruction for wrapping burst access. */ + __IOM uint32_t OSPIC_WRAP_LEN : 2; /*!< [13..12] It describes the selected length of a wrapping burst + * (OSPIC_WRAP_MD).0x0: 4-beat wrapping burst0x1: 8-beat wrapping + * burst0x2: 16-beat wrapping burst0x3: Reserved */ + __IOM uint32_t OSPIC_WRAP_SIZE : 2; /*!< [15..14] It describes the selected data size of a wrapping burst + * (OSPIC_WRAP_MD).0x0: Byte access (8-bit)0x1: Half word + * access (16-bit)0x2: Word access (32-bit)0x3: Reserved */ + __IOM uint32_t OSPIC_CS_HIGH_MIN : 3; /*!< [18..16] Between the transmissions of two different instructions + * to the flash memory, the SPI bus stays in idle state (OSPI_CS + * high) for at least this number of OSPI_SCK clock cycles. + * See the OSPIC_ERS_CS_HI register for some exceptions. */ + uint32_t : 13; + } OQSPIF_BURSTCMDB_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_STATUS_REG; /*!< (@ 0x00000014) The status register of the OSPI controller */ + + struct + { + __IM uint32_t OSPIC_BUSY : 1; /*!< [0..0] The status of the SPI Bus.0: The SPI Bus is idle1: The + * SPI Bus is active. Read data, write data or dummy data + * activity is in progress.Has meaning only in Manual mode + * and only when OSPIC_HRDY_MD = 1. */ + uint32_t : 31; + } OQSPIF_STATUS_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_WRITEDATA_REG; /*!< (@ 0x00000018) Write data to SPI Bus for the Manual mode */ + + struct + { + __OM uint32_t OSPIC_WRITEDATA : 32; /*!< [31..0] Writing to this register is generating a data transfer + * from the controller to the external memory device. The + * data written in this register, is then transferred to the + * memory using the selected mode of the SPI bus (Single SPI, + * Dual SPI, Quad SPI or Octal SPI). The data size of the + * access to this register can be 32-bit/16-bit/8-bit and + * is equal to the number of the transferred bits.This register + * has meaning only when the controller is in Manual mode. */ + } OQSPIF_WRITEDATA_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_READDATA_REG; /*!< (@ 0x0000001C) Read data from SPI Bus for the Manual mode */ + + struct + { + __IM uint32_t OSPIC_READDATA : 32; /*!< [31..0] A read access at this register generates a data transfer + * from the external memory device to the OSPIC controller. + * The data is transferred using the selected mode of the + * SPI bus (Single SPI, Dual SPI, Quad SPI or Octal SPI). + * The data size of the access to this register can be 32-bit/16-bit/8-bit + * and is equal to the number of the transferred bits.This + * register has meaning only when the controller is in Manual + * mode. */ + } OQSPIF_READDATA_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_DUMMYDATA_REG; /*!< (@ 0x00000020) Send dummy clocks to SPI Bus for the Manual mode */ + + struct + { + __OM uint32_t OSPIC_DUMMYDATA : 32; /*!< [31..0] Writing to this register generates a number of clock + * pulses to the SPI bus. During the last clock of this activity + * in the SPI bus, the OSPI_IOx data pads are in Hi-Z state + * (see also the OSPIC_DMY_MD). The data size of the access + * to this register can be 32-bit/16-bit/8-bit. The number + * of generated pulses is equal to: (size of AHB bus access)/(size + * of SPI bus). The size of SPI bus is equal to 1, 2, 4 or + * 8 for Single, Dual, Quad or Octal SPI mode respectively.This + * register has meaning only when the cont */ + } OQSPIF_DUMMYDATA_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_ERASECTRL_REG; /*!< (@ 0x00000024) OSPI Erase control register */ + + struct + { + uint32_t : 4; + __IOM uint32_t OSPIC_ERS_ADDR : 20; /*!< [23..4] Defines the address of the block/sector that is requested + * to be erased.If OSPIC_USE_32BA = 0 (24 bits addressing), + * bits OSPIC_ERASECTRL_REG[23-12] determine the block/sector + * address bits [23-12]. The OSPIC_ERASECTRL_REG[11-4] are + * ignored by the controller.If OSPIC_USE_32BA = 1 (32 bits + * addressing) bits OSPIC_ERASECTRL_REG[23-4] determine the + * block/sectors address bits [31:12] */ + __IOM uint32_t OSPIC_ERASE_EN : 1; /*!< [24..24] During Manual mode (OSPIC_AUTO_MD = 0). This bit is + * in Read-only mode.During Auto mode (OSPIC_AUTO_MD = 1). + * To request the erasing of the block/sector (OSPIC_ERS_ADDR, + * 12'b0) write 1 to this bit. This bit is cleared automatically + * with the end of the erasing. Until the end of erasing the + * OSPIC_ERASE_EN remains in Read-only mode. During the same + * time interval the controller remains in Auto mode (OSPIC_AUTO_MD + * goes in Read-only mode). */ + __IM uint32_t OSPIC_ERS_STATE : 3; /*!< [27..25] It shows the progress of sector/block erasing (read-only).0x0: + * No Erase.0x1: Pending erase request0x2: Erase procedure + * is running0x3: Suspended Erase procedure0x4: Finishing + * the Erase procedure0x5..0x7: Reserved */ + __IOM uint32_t OSPIC_ERS_RES_DIS : 1; /*!< [28..28] This configuration bit has meaning when an erase is + * suspended. Normally the erase is resumed when the flash + * stays idle (without read accesses) for a predefined number + * of clock cycles (see OSPIC_ERASECMDB_REG [OSPIC_ERSRES_HLD]). + * By setting this bit the execution of the erase resume process + * can be postponed.0: A suspended erase is resumed based + * on the setting in the OSPIC_ERSRES_HLD.1: The erase is + * not resumed even after the expiration of the OSPIC_ERSRES_HLD. + * The erase can be resumed again only w */ + uint32_t : 3; + } OQSPIF_ERASECTRL_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_ERASECMDA_REG; /*!< (@ 0x00000028) The way of erasing in Auto mode (command register + * A) */ + + struct + { + __IOM uint32_t OSPIC_ERS_INST : 8; /*!< [7..0] The code value of the erase instruction. */ + __IOM uint32_t OSPIC_WEN_INST : 8; /*!< [15..8] The code value of the write enable instruction. */ + __IOM uint32_t OSPIC_SUS_INST : 8; /*!< [23..16] The code value of the erase suspend instruction. */ + __IOM uint32_t OSPIC_RES_INST : 8; /*!< [31..24] The code value of the erase resume instruction */ + } OQSPIF_ERASECMDA_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_ERASECMDB_REG; /*!< (@ 0x0000002C) The way of erasing in Auto mode (command register + * B) */ + + struct + { + __IOM uint32_t OSPIC_ERS_TX_MD : 2; /*!< [1..0] The mode of the OSPI Bus during the instruction phase + * of the erase instruction.0x0: Single0x1: Dual0x2: Quad0x3: + * Octal */ + __IOM uint32_t OSPIC_WEN_TX_MD : 2; /*!< [3..2] The mode of the OSPI Bus during the transmission of the + * write enable instruction.0x0: Single0x1: Dual0x2: Quad0x3: + * Octal */ + __IOM uint32_t OSPIC_SUS_TX_MD : 2; /*!< [5..4] The mode of the OSPI Bus during the transmission of the + * suspend instruction.0x0: Single0x1: Dual0x2: Quad0x3: Octal */ + __IOM uint32_t OSPIC_RES_TX_MD : 2; /*!< [7..6] The mode of the OSPI Bus during the transmission of the + * resume instruction.0x0: Single0x1: Dual0x2: Quad0x3: Octal */ + __IOM uint32_t OSPIC_EAD_TX_MD : 2; /*!< [9..8] The mode of the OSPI Bus during the address phase of + * the erase instruction.0x0: Single0x1: Dual0x2: Quad0x3: + * Octal */ + __IOM uint32_t OSPIC_ERS_CS_HI : 5; /*!< [14..10] After the execution of instructions: write enable, + * erase, erase suspend and erase resume, the OSPI_CS remains + * high for at least this number of OSPI bus clock cycles. */ + uint32_t : 1; + __IOM uint32_t OSPIC_ERSRES_HLD : 4; /*!< [19..16] The controller must stay without flash memory reading + * requests for this number of AMBA hclk clock cycles, before + * to perform the command of erase or erase resume.15 - 0 */ + uint32_t : 4; + __IOM uint32_t OSPIC_RESSUS_DLY : 8; /*!< [31..24] Defines a timer that counts the minimum allowed delay + * between an erase suspend command and the previous erase + * resume command (or the initial erase command).0: Do not + * wait. The controller starts immediately to suspend the + * erase procedure.1..255: The controller waits for at least + * this number of 222 kHz clock cycles before the suspension + * of erasing. Time starts counting after the end of the previous + * erase resume command (or the initial erase command). */ + } OQSPIF_ERASECMDB_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_ERASECMDC_REG; /*!< (@ 0x00000030) The way of erasing in Auto mode (command register + * C) */ + + struct + { + __IOM uint32_t OSPIC_SUSSTS_DLY : 6; /*!< [5..0] Defines a timer that counts the minimum allowed delay + * between an erase suspend command and the next read status + * command.0: Do not wait. The controller starts immediately + * to read the status of the flash device.1..63: The controller + * waits for at least this number of 222 kHz clock cycles + * before to read the status of the flash device. Time starts + * counting when the erase resume command is applied. */ + uint32_t : 26; + } OQSPIF_ERASECMDC_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_BURSTBRK_REG; /*!< (@ 0x00000034) Read break sequence in Auto mode */ + + struct + { + __IOM uint32_t OSPIC_BRK_WRD : 16; /*!< [15..0] This is the value of a special command (read burst break + * sequence) that is applied by the controller to the external + * memory device, to force the memory device to abandon the + * continuous Read mode. */ + __IOM uint32_t OSPIC_BRK_SZ : 4; /*!< [19..16] The size of Burst Break Sequence0: One byte (Send OSPIC_BRK_WRD[15:8] + * 1: Two bytes (Send OSPIC_BRK_WRD[15:0])2-15: Three up to + * 16 bytes are transferred. All the bytes that are transferred, + * have the value of the OSPIC_BRK_WRD[15:8], except of the + * last byte that is the OSPIC_BRK_WRD[7:0]. */ + __IOM uint32_t OSPIC_BRK_TX_MD : 2; /*!< [21..20] The mode of the OSPI Bus during the transmission of + * the burst break sequence.0x0: Single0x1: Dual0x2: Quad0x3: + * Octal */ + __IOM uint32_t OSPIC_SEC_HF_DS : 1; /*!< [22..22] Disables output during the transmission of the second + * half (OSPIC_BRK_WRD[3:0]). Setting this bit is only useful + * if OSPIC_BRK_EN =1 and OSPIC_BRK_SZ >= 1. It is not applicable + * when the sequence is transferred in Octal mode (OSPIC_BRK_TX_MD=3).0: + * The controller drives the OSPI bus during the transmission + * of the OSPIC_BRK_WRD[3:0].1: The controller leaves the + * OSPI bus in Hi-Z during the transmission of the OSPIC_BRK_WORD[3:0]. */ + __IOM uint32_t OSPIC_BRK_EN : 1; /*!< [23..23] Controls the application of a special command (read + * burst break sequence) that is used to force the device + * to abandon the continuous Read mode.0: The special command + * is not applied1: The special command is appliedThis special + * command is applied by the controller to the external device + * under the following conditions:- The controller is in Auto + * mode.- The OSPIC_INST_MD = 1.- The previous command that + * is applied in the external device was read.-The controller + * wants to apply to th */ + uint32_t : 8; + } OQSPIF_BURSTBRK_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_STATUSCMD_REG; /*!< (@ 0x00000038) The way of reading the status of external device + * in Auto mode */ + + struct + { + __IOM uint32_t OSPIC_RSTAT_INST : 8; /*!< [7..0] The code value of the read status instruction. It is + * transmitted during the instruction phase of the read status + * instruction. */ + __IOM uint32_t OSPIC_RSTAT_TX_MD : 2; /*!< [9..8] The mode of the OSPI Bus during the instruction phase + * of the read status instruction.0x0: Single0x1: Dual0x2: + * Quad0x3: Octal */ + __IOM uint32_t OSPIC_RSTAT_RX_MD : 2; /*!< [11..10] The mode of the OSPI Bus during the receive status + * phase of the read status instruction0x0: Single0x1: Dual0x2: + * Quad0x3: Octal */ + __IOM uint32_t OSPIC_BUSY_POS : 3; /*!< [14..12] It describes who from the bits of status represents + * the Busy bit (7 - 0). */ + __IOM uint32_t OSPIC_BUSY_VAL : 1; /*!< [15..15] Defines the value of the Busy bit which means that + * the flash is busy.0: The flash is busy when the Busy bit + * is equal to 0.1: The flash is busy when the Busy bit is + * equal to 1. */ + __IOM uint32_t OSPIC_RESSTS_DLY : 6; /*!< [21..16] Defines a timer that counts the minimum required delay + * between the reading of the status register and of the previous + * erase or erase resume instruction.0: Do not wait. The controller + * starts reading the Flash memory status register immediately.1..63: + * The controller waits for at least this number of OSPI_CLK + * cycles and afterwards it starts to reading the Flash memory + * status register. The timer starts to count after the end + * of the previous erase or erase resume command.The actual + * timer that is u */ + __IOM uint32_t OSPIC_STSDLY_SEL : 1; /*!< [22..22] Defines the timer which is used to count the delay + * that it has to wait before to read the FLASH Status Register, + * after an erase or an erase resume command.0: The delay + * is controlled by the OSPIC_RESSTS_DLY which counts on the + * OSPI_CLK clock.1: The delay is controlled by the OSPIC_RESSUS_DLY + * which counts on the 222 kHz clock. */ + __IOM uint32_t OSPIC_RSTAT_DMY_EN : 1; /*!< [23..23] Enables the transmission of dummy bytes, immediately + * after the instruction code of the read status command.0: + * Do not send the dummy bytes1: Send the dummy bytes. The + * number of the dummy bytes is defined by the OSPIC_RSTAT_DMY_NUM. */ + __IOM uint32_t OSPIC_RSTAT_DMY_NUM : 4; /*!< [27..24] Number of dummy bytes (minus 1). Can be set 1-6 dummy + * bytes (values 0 up to 15). The dummy bytes are applied + * only when OSPIC_RSTAT_DMY_EN=1. */ + __IOM uint32_t OSPIC_RSTAT_DMY_TX_MD : 2; /*!< [29..28] It describes the mode of the OSPI bus during the dummy + * bytes phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Octal */ + __IOM uint32_t OSPIC_RSTAT_DMY_ZERO : 1; /*!< [30..30] Defines the value of that is transferred on the OSPI + * bus during the phase of the dummy bytes.0: The controller + * keeps the data on the bus unchanged until the bus direction + * is changed in Input mode.1: Forces the dummy bytes to get + * the zero value (only for the cycles that are not in Input + * mode). Only the IO pins that are related with the Transfer + * mode of the dummy bytes (OSPIC_RSTAT_DMY_TX_MD) get zero + * value. */ + uint32_t : 1; + } OQSPIF_STATUSCMD_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CHCKERASE_REG; /*!< (@ 0x0000003C) Check erase progress in Auto mode */ + + struct + { + __OM uint32_t OSPIC_CHCKERASE : 32; /*!< [31..0] Writing any value to this register during erasing, forces + * the controller to read the flash memory status register. + * Depending on the value of the Busy bit, it updates the + * OSPIC_ERASE_EN. */ + } OQSPIF_CHCKERASE_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_GP_REG; /*!< (@ 0x00000040) OSPI General Purpose control register */ + + struct + { + uint32_t : 1; + __IOM uint32_t OSPIC_PADS_DRV : 2; /*!< [2..1] OQSPI pads drive current0: 2 mA1: 4 mA2: 8 mA3: 14 mA */ + __IOM uint32_t OSPIC_PADS_SLEW : 2; /*!< [4..3] QSPI pads slew rate control. Indicative values under + * certain conditions:0: Rise=1.7 V/ns, Fall=1.9 V/ns (weak)1: + * Rise=2.0 V/ns, Fall=2.3 V/ns2: Rise=2.3 V/ns, Fall=2.6 + * V/ns3: Rise=2.4 V/ns, Fall=2.7 V/ns (strong)Conditions: + * FLASH pin capacitance 6 pF, Vcc=1.8V, T=25C and Idrive=16mA. */ + uint32_t : 27; + } OQSPIF_GP_REG_b; + }; + __IM uint32_t RESERVED[47]; + + union + { + __IOM uint32_t OQSPIF_CTR_CTRL_REG; /*!< (@ 0x00000100) Control register for the decryption engine of + * the OSPIC */ + + struct + { + __IOM uint32_t OSPIC_CTR_EN : 1; /*!< [0..0] Controls the AES-CTR decryption feature of the OSPIC, + * which enables the decryption (on-the-fly) of the data that + * is retrieved from the flash memory device.0: The AES-CTR + * decryption is disabled.1: The controller decrypts the content + * of the flash memory device that is placed in the address + * space that is defined by the OSPIC_CTR_SADDR_REG and OSPIC_CTR_EADDR_REG + * registers. The data that is placed outside the previous + * space, is not decrypted by the OSPIC. The decryption is + * performed by using the AES- */ + uint32_t : 31; + } OQSPIF_CTR_CTRL_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_SADDR_REG; /*!< (@ 0x00000104) Start address of the encrypted content in the + * OSPI flash */ + + struct + { + uint32_t : 10; + __IOM uint32_t OSPIC_CTR_SADDR : 22; /*!< [31..10] Defines the bits [31:10] of the start address in the + * flash memory, where an encrypted image is placed. The bits + * [9:0] are considered always as zero. This has meaning only + * when the decryption is active. See also the register OSPIC_CTR_CTRL_REG[O + * PIC_CTR_EN]. */ + } OQSPIF_CTR_SADDR_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_EADDR_REG; /*!< (@ 0x00000108) End address of the encrypted content in the OSPI + * flash */ + + struct + { + uint32_t : 10; + __IOM uint32_t OSPIC_CTR_EADDR : 22; /*!< [31..10] Defines the bits [31:10] of the end address in the + * flash memory, where an encrypted image is placed. The bits + * [9:0] are considered always as 0x3ff. This has meaning + * only when the decryption is active. See also the register + * OSPIC_CTR_CTRL_REG[OSPIC_CTR_EN]. */ + } OQSPIF_CTR_EADDR_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_NONCE_0_3_REG; /*!< (@ 0x0000010C) Nonce bytes 0 to 3 for the AES-CTR algorithm */ + + struct + { + __IOM uint32_t OSPIC_CTR_NONCE_0_3 : 32; /*!< [31..0] Defines the 8 bytes of the nonce value (N0 - N7) that + * is used by the AES-CTR algorithm to construct the counter + * block (CTRB). The total size of the counter block is 128 + * bits or 16 bytes :CTRB0 CTRB1 CTRB2 CTRB3...CTRB14 CTRB15.The + * first 8 bytes (CTRB0 - CTRB7) of the counter block consisted + * by the nonce value.The next 8 bytes of the counter block + * (CTRB8-CTRB15), are produced automatically by the hardware + * based on the address offset inside the encrypted image, + * from where are retrieved the requ */ + } OQSPIF_CTR_NONCE_0_3_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_NONCE_4_7_REG; /*!< (@ 0x00000110) Nonce bytes 4 to 7 for the AES-CTR algorithm */ + + struct + { + __IOM uint32_t OSPIC_CTR_NONCE_4_7 : 32; /*!< [31..0] See the description in the OSPIC_NONCE_0_3. */ + } OQSPIF_CTR_NONCE_4_7_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_KEY_0_3_REG; /*!< (@ 0x00000114) Key bytes 0 to 3 for the AES-CTR algorithm */ + + struct + { + __OM uint32_t OSPIC_CTR_KEY_0_3 : 32; /*!< [31..0] Defines the key that is used by the AES-CTR algorithm, + * when the on-the-fly decryption is enabled ( OSPIC_CTR_CTRL_REG[OSPIC_CTR_ + * N] = 1 ). The size of the decryption key is 256 bits or + * 32 bytes :K0 K1 K2 K3...K30 K31.The mapping of the bytes + * to the corresponding OSPIC_CTR_KEY_X_Y_REG registers is + * the following :{K0, K1, K2, K3} = OSPIC_CTR_KEY_0_3_REG[31:0]{K4, + * K5, K6, K7} = OSPIC_CTR_KEY_4_7_REG[31:0]{K8, K9, K10, + * K11} = OSPIC_CTR_KEY_8_11_REG[31:0]{K12, K13, K14, K15} + * = OSPIC_CT */ + } OQSPIF_CTR_KEY_0_3_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_KEY_4_7_REG; /*!< (@ 0x00000118) Key bytes 4 to 7 for the AES-CTR algorithm */ + + struct + { + __OM uint32_t OSPIC_CTR_KEY_4_7 : 32; /*!< [31..0] See the description in the OSPIC_CTR_KEY_0_3. */ + } OQSPIF_CTR_KEY_4_7_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_KEY_8_11_REG; /*!< (@ 0x0000011C) Key bytes 8 to 11 for the AES-CTR algorithm */ + + struct + { + __OM uint32_t OSPIC_CTR_KEY_8_11 : 32; /*!< [31..0] See the description in the OSPIC_CTR_KEY_0_3. */ + } OQSPIF_CTR_KEY_8_11_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_KEY_12_15_REG; /*!< (@ 0x00000120) Key bytes 12 to 15 for the AES-CTR algorithm */ + + struct + { + __OM uint32_t OSPIC_CTR_KEY_12_15 : 32; /*!< [31..0] See the description in the OSPIC_CTR_KEY_0_3. */ + } OQSPIF_CTR_KEY_12_15_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_KEY_16_19_REG; /*!< (@ 0x00000124) Key bytes 16 to 19 for the AES-CTR algorithm */ + + struct + { + __OM uint32_t OSPIC_CTR_KEY_16_19 : 32; /*!< [31..0] See the description in the OSPIC_CTR_KEY_0_3. */ + } OQSPIF_CTR_KEY_16_19_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_KEY_20_23_REG; /*!< (@ 0x00000128) Key bytes 20 to 23 for the AES-CTR algorithm */ + + struct + { + __OM uint32_t OSPIC_CTR_KEY_20_23 : 32; /*!< [31..0] See the description in the OSPIC_CTR_KEY_0_3. */ + } OQSPIF_CTR_KEY_20_23_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_KEY_24_27_REG; /*!< (@ 0x0000012C) Key bytes 24 to 27 for the AES-CTR algorithm */ + + struct + { + __OM uint32_t OSPIC_CTR_KEY_24_27 : 32; /*!< [31..0] See the description in the OSPIC_CTR_KEY_0_3. */ + } OQSPIF_CTR_KEY_24_27_REG_b; + }; + + union + { + __IOM uint32_t OQSPIF_CTR_KEY_28_31_REG; /*!< (@ 0x00000130) Key bytes 28 to 31 for the AES-CTR algorithm */ + + struct + { + __OM uint32_t OSPIC_CTR_KEY_28_31 : 32; /*!< [31..0] See the description in the OSPIC_CTR_KEY_0_3. */ + } OQSPIF_CTR_KEY_28_31_REG_b; + }; +} OQSPIF_Type; /*!< Size = 308 (0x134) */ + +/* =========================================================================================================================== */ +/* ================ OTPC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief OTPC registers (OTPC) + */ + +typedef struct /*!< (@ 0x400F3000) OTPC Structure */ +{ + union + { + __IOM uint32_t OTPC_MODE_REG; /*!< (@ 0x00000000) Mode register */ + + struct + { + __IOM uint32_t OTPC_MODE_MODE : 3; /*!< [2..0] Defines the mode of operation of the OTPC controller. + * The encoding of the modes is as follows:0x0: DSTBY. The + * OTP memory is in deep standby mode (power supply ON and + * internal LDO OFF).0x1: STBY. The OTP memory is powered + * (power supply ON and internal LDO ON, but is not selected).0x2: + * READ. The OTP memory is in the normal read mode.0x3: PROG. + * The OTP memory is in programming mode.0x4: PVFY. The OTP + * memory is in programming verification mode (margin read + * after programming).0x5: RINI */ + uint32_t : 1; + __IOM uint32_t OTPC_MODE_USE_TST_ROW : 1; /*!< [4..4] Selects the memory area of the OTP cell that will be + * used.0 - Uses the main memory area of the OTP cell1 - Uses + * the test row of the OTP cellThe value of this configuration + * field can be modified only when the controller is in an + * inactive mode (DSTBY or STBY). The selection will take + * effect at the next programming or reading mode that will + * be enabled. */ + uint32_t : 1; + __IOM uint32_t OTPC_MODE_PRG_SEL : 2; /*!< [7..6] Defines the part of the OTP cell that is programmed by + * the controller during the PROG mode, for each program request + * that is applied.0x0 : Both normal and redundancy arrays + * are programmed. This is the normal way of programming.0x1 + * : Only the normal array is programmed.0x2 : Only the redundancy + * array is programmed.0x3 : ReservedThe value of this configuration + * field can be modified only when the controller is in an + * inactive mode (DSTBY or STBY). The setting will take effect + * when will be */ + uint32_t : 24; + } OTPC_MODE_REG_b; + }; + + union + { + __IOM uint32_t OTPC_STAT_REG; /*!< (@ 0x00000004) Status register */ + + struct + { + __IM uint32_t OTPC_STAT_PRDY : 1; /*!< [0..0] Indicates the state of the programming process.0: The + * controller is busy. A programming is in progress.1: The + * logic which performs programming is idle. */ + __IM uint32_t OTPC_STAT_PBUF_EMPTY : 1; /*!< [1..1] Indicates the status of the programming buffer (PBUF).0 + * : The PBUF contains the address and the data of a programming + * request. The OTPC_PADDR_REG and the OTPC_PWORD_REG should + * not be written as long as this status bit is zero.1 : The + * PBUF is empty and a new programming request can be registered + * in the PBUF by using the OTPC_PADDR_REG and the OTPC_PWORD_REG + * registers.This status bit gets the value zero every time + * where a programming is triggered by the OTPC_PADDR_REG + * (only if the PROG mode is */ + __IM uint32_t OTPC_STAT_MRDY : 1; /*!< [2..2] Indicates the progress of the transition from a mode + * of operation to a new mode of operation.0 : There is a + * transition in progress in a new mode of operation . Wait + * until the transition to be completed.1 : The transition + * to the new mode of operation has been completed. The function + * that has been enabled by the new mode can be used. A new + * mode can be applied.This status bit gets the value zero + * every time where the OTPC_MODE_REG[MODE] is changing. Do + * not try to use or change any function of the */ + uint32_t : 29; + } OTPC_STAT_REG_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t OTPC_TIM1_REG; /*!< (@ 0x00000010) Various timing parameters of the OTP cell. */ + + struct + { + __IOM uint32_t OTPC_TIM1_CC_T_1US : 8; /*!< [7..0] The number of hclk_c clock periods (minus one) that give + * a time interval equal to 1us. This setting affects all + * the timing parameters that refer to microseconds, due to + * that defines the correspondence of a microsecond to a number + * of hclk_c clock cycles. */ + __IOM uint32_t OTPC_TIM1_CC_T_20NS : 3; /*!< [10..8] The number of hclk_c clock periods (minus one) that + * give a time interval that is at least higher than 20 ns. */ + uint32_t : 1; + __IOM uint32_t OTPC_TIM1_CC_T_RD : 4; /*!< [15..12] The number of hclk_c clock periods (minus one) that + * give a time interval at least higher than 100ns. This timing + * parameter refers to the access time of the OTP memory. */ + __IOM uint32_t OTPC_TIM1_US_T_PL : 4; /*!< [19..16] The number of microseconds (minus one) that are required + * until to be enabled the LDO of the OTP. It must be at least + * 10us. */ + __IOM uint32_t OTPC_TIM1_US_T_CS : 4; /*!< [23..20] The number of microseconds (minus one) that are required + * after the selection of the OTP memory, until to be ready + * for any kind of read. It must be at least 10us. */ + __IOM uint32_t OTPC_TIM1_US_T_CSP : 7; /*!< [30..24] The number of microseconds (minus one) that are required + * after the selection of the OTP memory, until to be ready + * for programming. It must be :- at least 10us- no more than + * 100us */ + uint32_t : 1; + } OTPC_TIM1_REG_b; + }; + + union + { + __IOM uint32_t OTPC_TIM2_REG; /*!< (@ 0x00000014) Various timing parameters of the OTP cell. */ + + struct + { + __IOM uint32_t OTPC_TIM2_US_T_PW : 5; /*!< [4..0] The number of microseconds (minus one) that lasts the + * programming of each bit. It must be :- at least 10us- no + * more than 20us */ + __IOM uint32_t OTPC_TIM2_US_T_PWI : 3; /*!< [7..5] The number of microseconds (minus one) between two consecutive + * programming pulses. It must be :- at least 1us- no more + * than 5us */ + __IOM uint32_t OTPC_TIM2_US_T_PPR : 7; /*!< [14..8] The number of microseconds (minus one) for recovery + * after a programming sequence. It must be :- at least 5us- + * no more than 100us */ + uint32_t : 1; + __IOM uint32_t OTPC_TIM2_US_T_PPS : 5; /*!< [20..16] The number of microseconds (minus one) that are required + * after the enabling of the programming in the OTP memory + * and before to be applied the first programming pulse. It + * must be :- at least 10us- no more than 20us */ + __IOM uint32_t OTPC_TIM2_US_T_VDS : 3; /*!< [23..21] The number of microseconds (minus one) that are required + * after the enabling of the power supply of the OTP memory + * and before to become ready for the enabling of the internal + * LDO. It must be at least 1us. */ + __IOM uint32_t OTPC_TIM2_US_T_PPH : 5; /*!< [28..24] The number of microseconds (minus one) that are required + * after the last programming pulse and before to be disabled + * the programming mode in the OTP memory. It must be:- at + * least 5us- no more than 20us */ + __IOM uint32_t OTPC_TIM2_US_T_SAS : 2; /*!< [30..29] The number of microseconds (minus one) that are required + * after the exit from the deep sleep standby mode and before + * to become ready to enter in an active mode (reading or + * programming). It must be at least 2us. */ + __IOM uint32_t OTPC_TIM2_US_ADD_CC_EN : 1; /*!< [31..31] Adds an additional hclk_c clock cycle at all the time + * intervals that count in microseconds.0 : The extra hclk_c + * clock cycle is not applied1 : The extra hclk_c clock cycle + * is applied */ + } OTPC_TIM2_REG_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t OTPC_TEST_REG; /*!< (@ 0x00000020) Test register for the ECC logic */ + + struct + { + __IOM uint32_t OTPC_TEST_MODE : 2; /*!< [1..0] Enables the test modes of the OTP cell. The value of + * this configuration field can be modified only when the + * controller is in an inactive mode (DSTBY or STBY).0: Normal + * operation.1: Need to Set together with OTPC_TEST_ECC_MAN. + * The ECC logic of the OTP cell is disabled. During programming + * the ECC bits should be provided by the user with the help + * of the OTPC_TEST_ECC_IN register. During reading the ECC + * correction is disabled and the raw data are retrieved from + * the OTP cell.2: The test mode for t */ + __IOM uint32_t OTPC_TEST_ECC_EN_DE : 1; /*!< [2..2] Selection of the ECC function that is tested when the + * ECC test mode is enabled (OTPC_TEST_MODE=2). This register + * has no meaning when the ECC test mode is not enabled.0: + * The ECC decoding function is selected. The OTPC_PWORD_REG + * holds the 32 bits input data of the ECC logic and the OTPC_TEST_ECC_IN + * the 6 bits of the ECC parity bits. The output data of the + * ECC logic can be retrieved by performing a normal read + * from an arbitrary address of the OTP cell. The retrieved + * data will be corrected by the ECC log */ + uint32_t : 5; + __IOM uint32_t OTPC_TEST_ECC_IN : 6; /*!< [13..8] This register holds the extra 6 bits for the ECC that + * should be provided to the OTP cell in the following cases:- + * The ECC logic is disabled (OTPC_TEST_MODE=1) and programming + * is applied in the OTP cell. The content of the OTPC_TEST_ECC_IN + * will be programmed in the OTP cell in the place of the + * ECC parity bits, together with the data of the OTPC_PWORD_REG. + * The OTPC_TEST_ECC_IN should be filled with the corresponding + * data before to be configured the address in the OTPC_PADDR_REG.- + * The ECC test mode */ + uint32_t : 2; + __IM uint32_t OTPC_TEST_ECC_OUT : 6; /*!< [21..16] The 6 bits output that represent the ECC syndrome or + * the ECC parity bits. The register is updated after any + * read that is performed from the OTP cell. The parity bits + * are retrieved only in the following cases:- The ECC is + * disabled (OTPC_TEST_MODE=1) and a reading is performed + * from the OTP cell. The register will capture the raw data + * of the ECC parity bits that contained in the OTP cell array.- + * The ECC test mode is enabled and the encoding mode is tested + * (OTPC_TEST_MODE=2 and OTPC_TEST_ECC_EN_DE = */ + uint32_t : 2; + __IM uint32_t OTPC_TEST_ECC_ERR : 1; /*!< [24..24] Error indication from the ECC logic of the OTP cell. + * The register is updated after any read that is performed + * from the OTP cell.0: There is no error in the data processed + * by the ECC logic.1: A single bit error has been detected + * in the data processed by the ECC logic. */ + uint32_t : 6; + __IOM uint32_t OTPC_TEST_ECC_MAN : 1; /*!< [31..31] Enable ECC Manual Mode0 : ECC Auto Mode1 : ECC Manual + * Mode by OTP_TEST_MODE[0] */ + } OTPC_TEST_REG_b; + }; + + union + { + __IOM uint32_t OTPC_TEST_PWORD_REG; /*!< (@ 0x00000024) OTPC_TEST_PWORD_REG */ + + struct + { + __IOM uint32_t OTPC_TEST_PWORD : 32; /*!< [31..0] OTPC_TEST_PWORD */ + } OTPC_TEST_PWORD_REG_b; + }; +} OTPC_Type; /*!< Size = 40 (0x28) */ + +/* =========================================================================================================================== */ +/* ================ PSK ================ */ +/* =========================================================================================================================== */ + +/** + * @brief PSK registers (PSK) + */ + +typedef struct /*!< (@ 0x40031000) PSK Structure */ +{ + union + { + __IOM uint32_t PSK_SHA1_CTRL_REG; /*!< (@ 0x00000000) CTRL_REG */ + + struct + { + __IOM uint32_t PSK_SHA1_Enable : 1; /*!< [0..0] Enable */ + __IOM uint32_t PSK_SHA1_Start : 1; /*!< [1..1] Start */ + uint32_t : 14; + __IOM uint32_t PSK_SHA1_Iteration : 16; /*!< [31..16] Iteration */ + } PSK_SHA1_CTRL_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV1_0_REG; /*!< (@ 0x00000004) IHV_1[31:0] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV1_0 : 32; /*!< [31..0] PSK_SHA1_IHV1_0 */ + } PSK_SHA1_IHV1_0_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV1_1_REG; /*!< (@ 0x00000008) IHV_1[63:32] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV1_1 : 32; /*!< [31..0] PSK_SHA1_IHV1_1 */ + } PSK_SHA1_IHV1_1_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV1_2_REG; /*!< (@ 0x0000000C) IHV_1[95:64] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV1_2 : 32; /*!< [31..0] PSK_SHA1_IHV1_2 */ + } PSK_SHA1_IHV1_2_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV1_3_REG; /*!< (@ 0x00000010) IHV_1[127:96] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV1_3 : 32; /*!< [31..0] PSK_SHA1_IHV1_3 */ + } PSK_SHA1_IHV1_3_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV1_4_REG; /*!< (@ 0x00000014) IHV_1[159:128] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV1_4 : 32; /*!< [31..0] PSK_SHA1_IHV1_4 */ + } PSK_SHA1_IHV1_4_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV2_0_REG; /*!< (@ 0x00000018) IHV_2[31:0] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV2_0 : 32; /*!< [31..0] PSK_SHA1_IHV2_0 */ + } PSK_SHA1_IHV2_0_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV2_1_REG; /*!< (@ 0x0000001C) IHV_2[63:32] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV2_1 : 32; /*!< [31..0] PSK_SHA1_IHV2_1 */ + } PSK_SHA1_IHV2_1_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV2_2_REG; /*!< (@ 0x00000020) IHV_2[95:64] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV2_2 : 32; /*!< [31..0] PSK_SHA1_IHV2_2 */ + } PSK_SHA1_IHV2_2_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV2_3_REG; /*!< (@ 0x00000024) IHV_2[127:96] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV2_3 : 32; /*!< [31..0] PSK_SHA1_IHV2_3 */ + } PSK_SHA1_IHV2_3_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_IHV2_4_REG; /*!< (@ 0x00000028) IHV_2[159:128] */ + + struct + { + __IOM uint32_t PSK_SHA1_IHV2_4 : 32; /*!< [31..0] PSK_SHA1_IHV2_4 */ + } PSK_SHA1_IHV2_4_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DATA_0_REG; /*!< (@ 0x0000002C) data[31:0] */ + + struct + { + __IOM uint32_t PSK_SHA1_DATA_0 : 32; /*!< [31..0] PSK_SHA1_DATA_0 */ + } PSK_SHA1_DATA_0_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DATA_1_REG; /*!< (@ 0x00000030) data[63:32] */ + + struct + { + __IOM uint32_t PSK_SHA1_DATA_1 : 32; /*!< [31..0] PSK_SHA1_DATA_1 */ + } PSK_SHA1_DATA_1_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DATA_2_REG; /*!< (@ 0x00000034) data[95:64] */ + + struct + { + __IOM uint32_t PSK_SHA1_DATA_2 : 32; /*!< [31..0] PSK_SHA1_DATA_2 */ + } PSK_SHA1_DATA_2_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DATA_3_REG; /*!< (@ 0x00000038) data[127:96] */ + + struct + { + __IOM uint32_t PSK_SHA1_DATA_3 : 32; /*!< [31..0] PSK_SHA1_DATA_3 */ + } PSK_SHA1_DATA_3_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DATA_4_REG; /*!< (@ 0x0000003C) data[159:128] */ + + struct + { + __IOM uint32_t PSK_SHA1_DATA_4 : 32; /*!< [31..0] PSK_SHA1_DATA_4 */ + } PSK_SHA1_DATA_4_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DIGEST_0_REG; /*!< (@ 0x00000040) digest[31:0] */ + + struct + { + __IOM uint32_t PSK_SHA1_DIGEST_0 : 32; /*!< [31..0] PSK_SHA1_DIGEST_0 */ + } PSK_SHA1_DIGEST_0_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DIGEST_1_REG; /*!< (@ 0x00000044) digest[63:32] */ + + struct + { + __IOM uint32_t PSK_SHA1_DIGEST_1 : 32; /*!< [31..0] PSK_SHA1_DIGEST_1 */ + } PSK_SHA1_DIGEST_1_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DIGEST_2_REG; /*!< (@ 0x00000048) digest[95:64] */ + + struct + { + __IOM uint32_t PSK_SHA1_DIGEST_2 : 32; /*!< [31..0] PSK_SHA1_DIGEST_2 */ + } PSK_SHA1_DIGEST_2_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DIGEST_3_REG; /*!< (@ 0x0000004C) digest[127:96] */ + + struct + { + __IOM uint32_t PSK_SHA1_DIGEST_3 : 32; /*!< [31..0] PSK_SHA1_DIGEST_3 */ + } PSK_SHA1_DIGEST_3_REG_b; + }; + + union + { + __IOM uint32_t PSK_SHA1_DIGEST_4_REG; /*!< (@ 0x00000050) digest[159:128] */ + + struct + { + __IOM uint32_t PSK_SHA1_DIGEST_4 : 32; /*!< [31..0] PSK_SHA1_DIGEST_4 */ + } PSK_SHA1_DIGEST_4_REG_b; + }; +} PSK_Type; /*!< Size = 84 (0x54) */ + +/* =========================================================================================================================== */ +/* ================ QSPIC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief QSPIC registers (QSPIC) + */ + +typedef struct /*!< (@ 0x22000000) QSPIC Structure */ +{ + union + { + __IOM uint32_t QSPIC_CTRLBUS_REG; /*!< (@ 0x00000000) SPI Bus control register for Manual mode */ + + struct + { + __OM uint32_t QSPIC_SET_SINGLE : 1; /*!< [0..0] Write 1 to set the bus mode in Single SPI mode when the + * controller is in Manual mode. */ + __OM uint32_t QSPIC_SET_DUAL : 1; /*!< [1..1] Write 1 to set the bus mode in Dual mode when the controller + * is in Manual mode. */ + __OM uint32_t QSPIC_SET_QUAD : 1; /*!< [2..2] Write 1 to set the bus mode in Quad mode when the controller + * is in Manual mode. */ + __OM uint32_t QSPIC_EN_CS : 1; /*!< [3..3] Write 1 to enable the chip select (active low) when the + * controller is in Manual mode. */ + __OM uint32_t QSPIC_DIS_CS : 1; /*!< [4..4] Write 1 to disable the chip select (active low) when + * the controller is in Manual mode. */ + uint32_t : 27; + } QSPIC_CTRLBUS_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_CTRLMODE_REG; /*!< (@ 0x00000004) Mode Control Register */ + + struct + { + __IOM uint32_t QSPIC_AUTO_MD : 1; /*!< [0..0] Mode of operation.0: Manual mode is selected.1: Auto + * Mmde is selected.During an erasing, the QSPIC_AUTO_MD goes + * in read-only mode (see QSPIC_ERASE_EN). */ + __IOM uint32_t QSPIC_CLK_MD : 1; /*!< [1..1] Mode of the generated QSPI_SCK clock.0: Use Mode 0 for + * the QSPI_CLK. The QSPI_SCK is low when QSPI_CS is high.1: + * Use Mode 3 for the QSPI_CLK. The QSPI_SCK is high when + * QSPI_CS is high.See also the QSPIC_CS_MD register and the + * QSPIC_CLK_FREE_EN register. */ + __IOM uint32_t QSPIC_IO2_OEN : 1; /*!< [2..2] QSPI_IO2 output enable. Use this only in SPI or Dual + * SPI mode to control /WP signal. When the Auto Mode is selected + * (QSPIC_AUTO_MD = 1) and the QUAD SPI is used, set this + * bit to zero.0: The QSPI_IO2 pad is input.1: The QSPI_IO2 + * pad is output. */ + __IOM uint32_t QSPIC_IO3_OEN : 1; /*!< [3..3] QSPI_IO3 output enable. Use this only in SPI or Dual + * SPI mode to control/hold signal. When the Auto Mode is + * selected (QSPIC_AUTO_MD = 1) and the QUAD SPI is used, + * set this bit to zero.0: The QSPI_IO3 pad is input.1: The + * QSPI_IO3 pad is output. */ + __IOM uint32_t QSPIC_IO2_DAT : 1; /*!< [4..4] The value of QSPI_IO2 pad if QSPI_IO2_OEN is 1. */ + __IOM uint32_t QSPIC_IO3_DAT : 1; /*!< [5..5] The value of QSPI_IO3 pad if QSPI_IO3_OEN is 1. */ + __IOM uint32_t QSPIC_HRDY_MD : 1; /*!< [6..6] This configuration bit is useful when the frequency of + * the QSPI clock is much lower than the clock of the AMBA + * bus in order not to lock the AMBA bus for a long time.0: + * Adds wait states via hready signal when an access is performed + * on QSPIC_WRITEDATA, QSPIC_READDATA and QSPIC_DUMMYDATA + * registers. It is not necessary to check the QSPIC_BUSY + * of the QSPIC_STATUS_REG.1: The controller does not add + * wait states via the hready signal when the access is performed + * on QSPIC_WRITEDATA, QSPIC_READDATA and QSP */ + __IOM uint32_t QSPIC_RXD_NEG : 1; /*!< [7..7] Define the clock edge that is used for the capturing + * of the received data when the read pipe is not active (QSPIC_RPIPE_EN + * = 0).0: Sampling of the received data with the positive + * edge of the QSPI_SCK.1: Sampling of the received data with + * the negative edge of the QSPI_SCK.The internal QSPI_SCK + * clock that is used by the controller for the capturing + * of the received data has a skew in respect of the QSPI_SCK + * that is received by the external memory device. To improve + * the timing requirements of the */ + __IOM uint32_t QSPIC_RPIPE_EN : 1; /*!< [8..8] Control the use of the data read pipe.0: The read pipe + * is disabled, the sampling clock is defined according to + * the QSPIC_RXD_NEG setting.1: The read pipe is enabled. + * The delay of the sampling clock is defined according to + * the QSPI_PCLK_MD setting (Recommended). */ + __IOM uint32_t QSPIC_PCLK_MD : 3; /*!< [11..9] Control the read pipe clock delay relative to the falling + * edge of QSPI_SCK. Refer to QSPI Timing for timing parameters. */ + __IOM uint32_t QSPIC_FORCENSEQ_EN : 1; /*!< [12..12] Control the way in which a burst request from the AMBA + * bus is addressed by the QSPI controller.0: The controller + * translates a burst access on the AMBA bus as a burst access + * on the QSPI bus. That results to the minimum number of + * command/address phases.1: The controller splits a burst + * access on the AMBA bus into a number of single accesses + * on the QSPI bus. That results to a separate command for + * each beat of the burst. For example, a 4-beat word incremental + * AMBA read access is split into four differ */ + __IOM uint32_t QSPIC_USE_32BA : 1; /*!< [13..13] Control the length of the address that the external + * memory device uses.0: The external memory device uses 24 + * bits address.1: The external memory device uses 32 bits + * address.The controller uses this bit to decide the number + * of the address bytes that has to transfer to the external + * device during Auto mode. */ + __IOM uint32_t QSPIC_SRAM_EN : 1; /*!< [14..14] Define the type of the external device that is connected + * on the QSPIC controller.0: The external memory device is + * a serial Flash.1: The external memory device is a serial + * SRAM.When the external device is a serial SRAM, the erase + * suspend/ resume functionality of the controller is disabled. + * In this case the writing of the QSPIC_ERASECTRL_REG[QSPIC_ERASE_EN] + * bit has no effect. Also, the memory space where the external + * device is mapped is considered as writable. */ + __IOM uint32_t QSPIC_CS_MD : 1; /*!< [15..15] Control the clock edge with which is produced the QSPI_CS + * signal.0: The QSPI_CS is produced with the rising edge + * of the QSPI_SCK. The QSPI_SCK is always inactive while + * the QSPI_CS is high.1: The QSPI_CS is produced with the + * falling edge of the QSPI_SCK. The behavior of the QSPI_SCK + * while the QSPI_CS is high is controlled by the QSPIC_CLK_FREE_EN. */ + __IOM uint32_t QSPIC_CLK_FREE_EN : 1; /*!< [16..16] Control the behavior of the QSPI_SCK when the QSPI_CS + * is high and QSPIC_CS_MD = 1.0: Produces one QSPI_SCK clock + * pulse after each 0 to 1 transition in the QSPI_CS.1: The + * QSPI_SCK clock remains always active, while the QSPI_CS + * is inactive.This setting has meaning only when the QSPIC_CS_MD + * = 1. */ + uint32_t : 15; + } QSPIC_CTRLMODE_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_RECVDATA_REG; /*!< (@ 0x00000008) Received data for Manual mode */ + + struct + { + __IM uint32_t QSPIC_RECVDATA : 32; /*!< [31..0] This register contains the received data when the QSPIC_READDATA_REG + * register is used in Manual mode, to retrieve data from + * the external memory device and QSPIC_HRDY_MD = 1 and QSPIC_BUSY + * = 0. */ + } QSPIC_RECVDATA_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_BURSTCMDA_REG; /*!< (@ 0x0000000C) The way of reading in Auto mode (command register + * A) */ + + struct + { + __IOM uint32_t QSPIC_INST : 8; /*!< [7..0] Instruction Value for Incremental Burst or Single read + * access. This value is the selected instruction at the cases + * of incremental burst or single read access. Also this value + * is used when a wrapping burst is not supported (QSPIC_WRAP_MD) */ + __IOM uint32_t QSPIC_INST_WB : 8; /*!< [15..8] Instruction Value for Wrapping Burst. This value is + * the selected instruction when QSPIC_WRAP_MD is equal to + * 1 and the access is a wrapping burst of length and size + * described by the bit fields QSPIC_WRAP_LEN and QSPIC_WRAP_SIZE + * respectively. */ + __IOM uint32_t QSPIC_EXT_BYTE : 8; /*!< [23..16] The value of an extra byte which is transferred after + * address (only if QSPIC_EXT_BYTE_EN = 1). Usually this is + * the Mode Bits in Dual/Quad SPI I/O instructions. */ + __IOM uint32_t QSPIC_INST_TX_MD : 2; /*!< [25..24] It describes the mode of the SPI bus during the instruction + * phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Reserved */ + __IOM uint32_t QSPIC_ADR_TX_MD : 2; /*!< [27..26] It describes the mode of the SPI bus during the address + * phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Reserved */ + __IOM uint32_t QSPIC_EXT_TX_MD : 2; /*!< [29..28] It describes the mode of the SPI bus during the Extra + * Byte phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Reserved */ + __IOM uint32_t QSPIC_DMY_TX_MD : 2; /*!< [31..30] It describes the mode of the SPI bus during the Dummy + * bytes phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Reserved */ + } QSPIC_BURSTCMDA_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_BURSTCMDB_REG; /*!< (@ 0x00000010) The way of reading in Auto mode (command register + * B) */ + + struct + { + __IOM uint32_t QSPIC_DAT_RX_MD : 2; /*!< [1..0] It describes the mode of the SPI bus during the data + * phase.0x0: Single SPI0x1: Dual0x2: Quad0x3: Reserved */ + __IOM uint32_t QSPIC_EXT_BYTE_EN : 1; /*!< [2..2] Extra Byte Enable0: Do not Send QSPIC_EXT_BYTE1: Send + * QSPIC_EXT_BYTE */ + __IOM uint32_t QSPIC_EXT_HF_DS : 1; /*!< [3..3] Extra Half Disable Output.0: If QSPIC_EXT_BYTE_EN = 1, + * then transmit the complete QSPIC_EXT_BYTE.1: If QSPIC_EXT_BYTE_EN + * = 1, then disable (Hi-Z) output during the transmission + * of bits [3:0] of QSPIC_EXT_BYTE. */ + __IOM uint32_t QSPIC_DMY_NUM : 2; /*!< [5..4] Number of Dummy Bytes0x0: Zero Dummy Bytes (Do not Send + * Dummy Bytes)0x1: Send 1 Dummy Byte0x2: Send 2 Dummy Bytes0x3: + * Send 4 Dummy BytesWhen QSPIC_DMY_FORCE is enabled, the + * QSPIC_DMY_NUM is overruled. In this case the number of + * dummy bytes is defined by QSPIC_DMY_FORCE and is equal + * to 3, independent of the value of QSPIC_DMY_NUM. */ + __IOM uint32_t QSPIC_INST_MD : 1; /*!< [6..6] Instruction mode0: Transmit instruction at any burst + * access.1: Transmit instruction only in the first access + * after the selection of Auto mode. */ + __IOM uint32_t QSPIC_WRAP_MD : 1; /*!< [7..7] Wrap mode0: The QSPIC_INST is the selected instruction + * at any access.1: The QSPIC_INST_WB is the selected instruction + * at any wrapping burst access of length and size described + * by the registers QSPIC_WRAP_LEN and QSPIC_WRAP_SIZE respectively. + * In all other cases the QSPIC_INST is the selected instruction. + * Use this feature only when the serial Flash memory supports + * a special instruction for wrapping burst access. */ + __IOM uint32_t QSPIC_WRAP_LEN : 2; /*!< [9..8] It describes the selected length of a wrapping burst + * (QSPIC_WRAP_MD).0x0: 4 beat wrapping burst0x1: 8 beat wrapping + * burst0x2: 16 beat wrapping burst0x3: Reserved */ + __IOM uint32_t QSPIC_WRAP_SIZE : 2; /*!< [11..10] It describes the selected data size of a wrapping burst + * (QSPIC_WRAP_MD).0x0: Byte access (8-bits)0x1: Half word + * access (16 bits)0x2: Word access (32-bits)0x3: Reserved */ + __IOM uint32_t QSPIC_CS_HIGH_MIN : 3; /*!< [14..12] Between the transmission of two different instructions + * to the flash memory, the QSPI Bus stays in idle state (QSPI_CS + * high) for at least this number of QSPI_SCK clock cycles. + * See the QSPIC_ERS_CS_HI and the QSPIC_WR_CS_HIGH_MIN registers + * for some exceptions. */ + __IOM uint32_t QSPIC_DMY_FORCE : 1; /*!< [15..15] By setting this bit, the number of dummy bytes is forced + * to be equal to 3. In this case the QSPIC_DMY_NUM field + * is overruled and has no function.0: The number of dummy + * bytes is controlled by the QSPIC_DMY_NUM field.1: Three + * dummy bytes are used. The QSPIC_DMY_NUM is overruled. */ + uint32_t : 16; + } QSPIC_BURSTCMDB_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_STATUS_REG; /*!< (@ 0x00000014) The status register of the QSPI controller */ + + struct + { + __IM uint32_t QSPIC_BUSY : 1; /*!< [0..0] The status of the SPI Bus.0: The SPI Bus is idle1: The + * SPI Bus is active. Read data, write data or dummy data + * activity is in progress.This register has meaning only + * in Manual mode and only when QSPIC_HRDY_MD = 1. */ + uint32_t : 31; + } QSPIC_STATUS_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_WRITEDATA_REG; /*!< (@ 0x00000018) Write data to SPI Bus for Manual mode */ + + struct + { + __OM uint32_t QSPIC_WRITEDATA : 32; /*!< [31..0] Writing to this register generates a data transfer from + * the controller to the external memory device. The data + * written in this register is then transferred to the memory + * using the selected mode of the SPI Bus (SPI, Dual SPI, + * Quad SPI). The data size of the access to this register + * can be 32-bits/16-bits/8-bits and is equal to the number + * of the transferred bits.This register has meaning only + * when the controller is in Manual mode. */ + } QSPIC_WRITEDATA_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_READDATA_REG; /*!< (@ 0x0000001C) Read data from SPI Bus for Manual mode */ + + struct + { + __IM uint32_t QSPIC_READDATA : 32; /*!< [31..0] A read access at this register generates a data transfer + * from the external memory device to the QSPIC controller. + * The data is transferred using the selected mode of the + * SPI Bus (SPI, Dual SPI, Quad SPI). The data size of the + * access to this register can be 32-bits/16-bits/8-bits and + * is equal to the number of the transferred bits.This register + * has meaning only when the controller is in Manual mode. */ + } QSPIC_READDATA_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_DUMMYDATA_REG; /*!< (@ 0x00000020) Send dummy clocks to SPI Bus for Manual mode */ + + struct + { + __OM uint32_t QSPIC_DUMMYDATA : 32; /*!< [31..0] Writing to this register generates a number of clock + * pulses to the SPI Bus. During the last clock of this activity + * in the SPI Bus, the QSPI_IOx data pads are in Hi-Z state. + * The data size of the access to this register can be 32-bits/16-bits/8-bit + * . The number of generated pulses is equal to: (size of + * AHB bus access)/(size of SPI bus). The size of SPI Bus + * is equal to 1, 2, or 4 for Single, Dual, or Quad SPI mode + * respectively.This register has meaning only when the controller + * is in Manual mode. */ + } QSPIC_DUMMYDATA_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_ERASECTRL_REG; /*!< (@ 0x00000024) Erase control register */ + + struct + { + uint32_t : 4; + __IOM uint32_t QSPIC_ERS_ADDR : 20; /*!< [23..4] Defines the address of the block/sector that is requested + * to be erased.If QSPIC_USE_32BA = 0 (24 bits addressing), + * bits QSPIC_ERASECTRL_REG[23-12] determine the block/sector + * address bits [23-12].QSPIC_ERASECTRL_REG[11-4] are ignored + * by the controller.If QSPIC_USE_32BA = 1 (32 bits addressing) + * bits QSPIC_ERASECTRL_REG[23-4] determine the block/sectors + * address bits [31:12] */ + __IOM uint32_t QSPIC_ERASE_EN : 1; /*!< [24..24] This bit has meaning only when the external device + * is a serial Flash (QSPIC_SRAM_EN = 0).During Manual mode + * (QSPIC_AUTO_MD = 0): This bit is in read-only mode.During + * Auto mode (QSPIC_AUTO_MD = 1): To request the erasing of + * the block/sector (QSPIC_ERS_ADDR, 12'b0), write 1 to this + * bit. This bit is cleared automatically with the end of + * erasing. Until the end of erasing the QSPIC_ERASE_EN remains + * in read-only mode. During the same period of time, the + * controller remains in Auto mode (QSPIC_AUTO_MD go */ + __IM uint32_t QSPIC_ERS_STATE : 3; /*!< [27..25] It shows the progress of sector/block erasing (read-only)0x0: + * No Erase0x1: Pending erase request0x2: Erase procedure + * is running0x3: Suspended Erase procedure0x4: Finishing + * the Erase procedure0x5...0x7: Reserved */ + uint32_t : 4; + } QSPIC_ERASECTRL_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_ERASECMDA_REG; /*!< (@ 0x00000028) The way of erasing in Auto mode (command register + * A) */ + + struct + { + __IOM uint32_t QSPIC_ERS_INST : 8; /*!< [7..0] The code value of the erase instruction. */ + __IOM uint32_t QSPIC_WEN_INST : 8; /*!< [15..8] The code value of the write enable instruction. */ + __IOM uint32_t QSPIC_SUS_INST : 8; /*!< [23..16] The code value of the erase suspend instruction. */ + __IOM uint32_t QSPIC_RES_INST : 8; /*!< [31..24] The code value of the erase resume instruction. */ + } QSPIC_ERASECMDA_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_ERASECMDB_REG; /*!< (@ 0x0000002C) The way of erasing in Auto mode (command register + * B) */ + + struct + { + __IOM uint32_t QSPIC_ERS_TX_MD : 2; /*!< [1..0] The mode of the SPI Bus during the instruction phase + * of the erase instruction0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_WEN_TX_MD : 2; /*!< [3..2] The mode of the SPI Bus during the transmission of the + * write enable instruction.0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_SUS_TX_MD : 2; /*!< [5..4] The mode of the SPI Bus during the transmission of the + * suspend instruction.0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_RES_TX_MD : 2; /*!< [7..6] The mode of the SPI Bus during the transmission of the + * resume instruction.0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_EAD_TX_MD : 2; /*!< [9..8] The mode of the SPI Bus during the address phase of the + * erase instruction.0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_ERS_CS_HI : 5; /*!< [14..10] After the execution of instructions: write enable, + * erase, erase suspend and erase resume, the QSPI_CS remains + * high for at least this number of QSPI_SCK clock cycles. */ + uint32_t : 1; + __IOM uint32_t QSPIC_ERSRES_HLD : 4; /*!< [19..16] The controller must stay without Flash memory reading + * requests for this number of AMBA hclk clock cycles, before + * to perform the command of erase or erase resume. Allowable + * range: 0xF - 0x0 */ + uint32_t : 4; + __IOM uint32_t QSPIC_RESSUS_DLY : 6; /*!< [29..24] Defines a timer that counts the minimum allowed delay + * between an erase suspend command and the previous erase + * resume command (or the initial erase command).0x00: Do + * not wait. The controller starts immediately to suspend + * the erase procedure.0x01..0x3F: The controller waits for + * at least this number of 288 kHz clock cycles before the + * suspension of erasing. Time starts counting after the end + * of the previous erase resume command (or the initial erase + * command). */ + uint32_t : 2; + } QSPIC_ERASECMDB_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_BURSTBRK_REG; /*!< (@ 0x00000030) Read break sequence in Auto mode */ + + struct + { + __IOM uint32_t QSPIC_BRK_WRD : 16; /*!< [15..0] This is the value of a special command (read break sequence) + * that is applied by the controller to the external memory + * device, to force the memory device to abandon the continuous + * read mode. */ + __IOM uint32_t QSPIC_BRK_EN : 1; /*!< [16..16] Controls the application of a special command (read + * break sequence) that is used to force the device to abandon + * the continuous read mode.0: The special command is not + * applied1: The special command is appliedThis special command + * is applied by the controller to the external device under + * the following conditions:- the controller is in Auto mode- + * the QSPIC_INST_MD = 1- the previous command that has been + * applied in the external device was read- the controller + * want to apply to the e */ + __IOM uint32_t QSPIC_BRK_SZ : 1; /*!< [17..17] The size of the read break sequence.0: One byte (Send + * QSPIC_BRK_WRD[15:8])1: Two bytes (Send QSPIC_BRK_WRD[15:0]) */ + __IOM uint32_t QSPIC_BRK_TX_MD : 2; /*!< [19..18] The mode of the SPI Bus during the transmission of + * the read break sequence.0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_SEC_HF_DS : 1; /*!< [20..20] Disable output during the transmission of the second + * half (QSPIC_BRK_WRD[3:0]). Setting this bit is only useful + * if QSPIC_BRK_EN = 1 and QSPIC_BRK_SZ = 1.0: The controller + * drives the SPI Bus during the transmission of the QSPIC_BRK_WRD[3:0].1: + * The controller leaves the SPI Bus in Hi-Z during the transmission + * of the QSPIC_BRK_WORD[3:0]. */ + uint32_t : 11; + } QSPIC_BURSTBRK_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_STATUSCMD_REG; /*!< (@ 0x00000034) The way of reading the status of external device + * in Auto mode */ + + struct + { + __IOM uint32_t QSPIC_RSTAT_INST : 8; /*!< [7..0] The code value of the read status instruction.It is transmitted + * during the instruction phase of the read status instruction. */ + __IOM uint32_t QSPIC_RSTAT_TX_MD : 2; /*!< [9..8] The mode of the SPI Bus during the instruction phase + * of the read status instruction.0x0: Single SPI0x1: Dual0x2: + * Quad0x3: Reserved */ + __IOM uint32_t QSPIC_RSTAT_RX_MD : 2; /*!< [11..10] The mode of the SPI Bus during the reception phase + * of the read status instruction, where the value of status + * register is retrieved.0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_BUSY_POS : 3; /*!< [14..12] Defines the bit of the Flash status register which + * represents the Busy bit (0x7 - 0x0). */ + __IOM uint32_t QSPIC_BUSY_VAL : 1; /*!< [15..15] Defines the value of the Busy bit which means that + * the Flash is busy.0: The Flash is busy when the Busy bit + * is equal to 0.1: The Flash is busy when the Busy bit is + * equal to 1. */ + __IOM uint32_t QSPIC_RESSTS_DLY : 6; /*!< [21..16] Defines the timer that counts the minimum required + * delay between the reading of the status register and of + * the previous erase or erase resume instruction.0x00: Do + * not wait. The controller starts to reading the Flash memory + * status register immediately.0x01...0x3F: The controller + * waits for at least this number of QSPI_CLK cycles and afterwards + * it starts to reading the Flash memory status register. + * The timer starts to count after the end of the previous + * erase or erase resume command.The actual t */ + __IOM uint32_t QSPIC_STSDLY_SEL : 1; /*!< [22..22] Defines the timer which is used to count the delay + * that it has to wait before to read the Flash Status Register, + * after an erase or an erase resume command.0: The delay + * is controlled by the QSPIC_RESSTS_DLY which counts on the + * QSPI clock.1: The delay is controlled by the QSPIC_RESSUS_DLY + * which counts on the 288 kHz clock. */ + uint32_t : 9; + } QSPIC_STATUSCMD_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_CHCKERASE_REG; /*!< (@ 0x00000038) Check erase progress in Auto mode */ + + struct + { + __OM uint32_t QSPIC_CHCKERASE : 32; /*!< [31..0] Writing any value to this register during erasing, forces + * the controller to read the Flash memory status register. + * Depending on the value of the Busy bit, it updates the + * QSPIC_ERASE_EN.This register has meaning only when the + * controller is in Auto mode and there is an erase in progress + * (QSPIC_ERASE_EN = 1). It has no meaning when the external + * device is a serial SRAM. */ + } QSPIC_CHCKERASE_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_GP_REG; /*!< (@ 0x0000003C) General Purpose control register */ + + struct + { + __IOM uint32_t QSPIC_SELECT : 1; /*!< [0..0] QSPIC enable0: not active1: active */ + __IOM uint32_t QSPIC_PADS_DRV : 2; /*!< [2..1] QSPIC pads drive current0: 2 mA1: 4 mA2: 8 mA3: 14 mA */ + __IOM uint32_t QSPIC_PADS_SLEW : 2; /*!< [4..3] QSPIC pads slew rate control00: fast slew rate11: slow + * slew rate */ + uint32_t : 27; + } QSPIC_GP_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_AWRITECMD_REG; /*!< (@ 0x00000040) The way of writing in Auto mode when the external + * device is a serial SRAM */ + + struct + { + __IOM uint32_t QSPIC_WR_INST : 8; /*!< [7..0] This is the value of the instruction that is used to + * be programmed the external SRAM device. */ + __IOM uint32_t QSPIC_WR_INST_TX_MD : 2; /*!< [9..8] The mode of the SPI Bus during the instruction phase + * of the write command.0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_WR_ADR_TX_MD : 2; /*!< [11..10] The mode of the SPI Bus during the address phase of + * the write command.0x0: Single SPI0x1: Dual0x2: Quad0x3: + * Reserved */ + __IOM uint32_t QSPIC_WR_DAT_TX_MD : 2; /*!< [13..12] The mode of the SPI Bus during the data phase of the + * write command.0x0: Single SPI0x1: Dual0x2: Quad0x3: Reserved */ + __IOM uint32_t QSPIC_WR_CS_HIGH_MIN : 5; /*!< [18..14] After the execution of the write command, the QSPI_CS + * remains high for at least this number of QSPI_SCK clock + * cycles. */ + uint32_t : 13; + } QSPIC_AWRITECMD_REG_b; + }; + + union + { + __IOM uint32_t QSPIC_MEMBLEN_REG; /*!< (@ 0x00000044) External memory burst length configuration */ + + struct + { + __IOM uint32_t QSPIC_MEMBLEN : 3; /*!< [2..0] In this register, the expected behavior of the external + * memory device regarding the length of a burst operation + * is defined:0x0: The external memory device is capable to + * implement incremental burst of unspecified length.0x1: + * The external memory device implements a wrapping burst + * of length 4 bytes.0x2: The external memory device implements + * a wrapping burst of length 8 bytes.0x3: The external memory + * device implements a wrapping burst of length 16 bytes.0x4: + * The external memory device imp */ + __IOM uint32_t QSPIC_T_CEM_EN : 1; /*!< [3..3] This bit enables the controlling of the maximum time + * tCEM for which the QSPI_CS remains active. It has meaning + * only when Auto mode is active (QSPIC_AUTO_MD = 1) and the + * external device is a serial SRAM (QSPIC_SRAM_EN = 1). In + * the case where the external device is a serial Flash (QSPIC_SRAM_EN + * = 0) or the controller is in Manual mode (QSPIC_AUTO_MD + * = 0), this field has no any effect.This feature is useful + * when the external serial device is a dynamic RAM that requires + * refresh. If the refresh is applied */ + __IOM uint32_t QSPIC_T_CEM_CC : 10; /*!< [13..4] Defines the maximum allowed time tCEM for which the + * QSPIC_CS can stay active (QSPI_CS = 0). It has meaning + * only when QSPIC_T_CEM_EN is equal to 1. See also the description + * of the QSPIC_T_CEM_EN for more details.The tCEM is expressed + * in number of QSPI clock cycles and can be calculated as + * follows:tCEM/(qspi_clock_period)If the result of the above + * equation is higher than 0x3FF, use the value 0x3FF. */ + uint32_t : 18; + } QSPIC_MEMBLEN_REG_b; + }; +} QSPIC_Type; /*!< Size = 72 (0x48) */ + +/* =========================================================================================================================== */ +/* ================ RETMEMCTRL ================ */ +/* =========================================================================================================================== */ + +/** + * @brief RETMEMCTRL registers (RETMEMCTRL) + */ + +typedef struct /*!< (@ 0x400B0900) RETMEMCTRL Structure */ +{ + union + { + __IOM uint32_t RETMEMCTRL_STALL_REG; /*!< (@ 0x00000000) Maximum Stall cycles Control Register */ + + struct + { + __IOM uint32_t AHB_CPUC_MAX_STALL : 4; /*!< [3..0] Maximum allowed number of stall cycles for the CPUC AHB + * interface. If exceeded, the interface will get high priority. + * Valid for a single access so the next access (of a burst) + * might end up in the queue for the same number of wait cycles.0: + * don't use, not feasible and can block other interfaces1: + * max 1 stall cycle15: max 15 stall cycles */ + __IOM uint32_t AHB_CPUS_MAX_STALL : 4; /*!< [7..4] Maximum allowed number of stall cycles for the CPUS AHB + * interface. If exceeded, the interface will get high priority. + * Valid for a single access so the next access (of a burst) + * might end up in the queue for the same number of wait cycles.0: + * don't use, not feasible and can block other interfaces1: + * max 1 stall cycle15: max 15 stall cycles */ + __IOM uint32_t AHB_DMA_MAX_STALL : 4; /*!< [11..8] Maximum allowed number of stall cycles for the DMA AHB + * interface. If exceeded, the interface will get high priority. + * Valid for a single access so the next access (of a burst) + * might end up in the queue for the same number of wait cycles.0: + * don't use, not feasible and can block other interfaces1: + * max 1 stall cycle15: max 15 stall cycles */ + uint32_t : 20; + } RETMEMCTRL_STALL_REG_b; + }; + + union + { + __IOM uint32_t RETMEMCTRL_STATUS_REG; /*!< (@ 0x00000004) RAM cells Status Register */ + + struct + { + __IOM uint32_t RAM0_OFF_BUT_ACCESS : 1; /*!< [0..0] Reading a '1' indicates RAM0 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + __IOM uint32_t RAM1_OFF_BUT_ACCESS : 1; /*!< [1..1] Reading a '1' indicates RAM1 was off but still access + * was performed.Writing a '1' will clear the status back + * to '0'. */ + uint32_t : 30; + } RETMEMCTRL_STATUS_REG_b; + }; + + union + { + __IOM uint32_t RETMEMCTRL_PRIO_ARB_REG; /*!< (@ 0x00000008) Priority Control Register for RAM cells from + * 0 to 23 */ + + struct + { + __IOM uint32_t PRIO_ARB_CPUC_RAM : 2; /*!< [1..0] Priority of RAM0~RAM23 for the CPUC AHB interface.00: + * low priority01: mid priority (default)1x: highest */ + __IOM uint32_t PRIO_ARB_CPUS_RAM : 2; /*!< [3..2] Priority of RAM0~RAM23 for the CPUS AHB interface.00: + * low priority01: mid priority (default)1x: highest */ + __IOM uint32_t PRIO_ARB_DMA_RAM : 2; /*!< [5..4] Priority of RAM0~RAM23 for the DMA AHB interface.00: + * low priority01: mid priority (default)1x: highest */ + uint32_t : 26; + } RETMEMCTRL_PRIO_ARB_REG_b; + }; + + union + { + __IOM uint32_t RETMEMCTRL_STATIC_CLK_OFF_REG; /*!< (@ 0x0000000C) Memory Static Clock Off register */ + + struct + { + __IOM uint32_t SRAM0 : 1; /*!< [0..0] Static clock off - SRAM0 */ + __IOM uint32_t SRAM1 : 1; /*!< [1..1] Static clock off - SRAM1 */ + __IOM uint32_t SRAM2 : 1; /*!< [2..2] Static clock off - SRAM2 */ + uint32_t : 29; + } RETMEMCTRL_STATIC_CLK_OFF_REG_b; + }; + + union + { + __IOM uint32_t RETMEMCTRL_DYNAMIC_CLK_ON_REG; /*!< (@ 0x00000010) Memory Dynamic Clock On register */ + + struct + { + __IOM uint32_t AHB2MEM : 1; /*!< [0..0] Dynamic clock on - AHB2MEM */ + __IOM uint32_t ARBITER : 1; /*!< [1..1] Dynamic clock on - Arbiters */ + uint32_t : 1; + __IOM uint32_t MMI2MEM : 1; /*!< [3..3] Dynamic clock on - MMI2MEM */ + uint32_t : 1; + __IOM uint32_t MEM_UNIT : 1; /*!< [5..5] Dynamic clock on - Memory Units */ + uint32_t : 26; + } RETMEMCTRL_DYNAMIC_CLK_ON_REG_b; + }; + + union + { + __IOM uint32_t RETMEMCTRL_MST_CLK_EN_REG; /*!< (@ 0x00000014) Memory Master Clock En register */ + + struct + { + __IOM uint32_t MST_CPUC_CLK_EN : 1; /*!< [0..0] Clock Enable for memctrl's master - CPUCIf this value + * is 0, memctrl's master to memory interface conversion block's + * clock is off. */ + __IOM uint32_t MST_CPUS_CLK_EN : 1; /*!< [1..1] Clock Enable for memctrl's master - CPUSIf this value + * is 0, memctrl's master to memory interface conversion block's + * clock is off. */ + __IOM uint32_t MST_DMA_CLK_EN : 1; /*!< [2..2] Clock Enable for memctrl's master - DMAIf this value + * is 0, memctrl's master to memory interface conversion block's + * clock is off. */ + __IOM uint32_t MST_M33_MTB_CLK_EN : 1; /*!< [3..3] Clock Enable for memctrl's master - M33 MTBIf this value + * is 0, memctrl's master to memory interface conversion block's + * clock is off. */ + uint32_t : 28; + } RETMEMCTRL_MST_CLK_EN_REG_b; + }; +} RETMEMCTRL_Type; /*!< Size = 24 (0x18) */ + +/* =========================================================================================================================== */ +/* ================ RFMON ================ */ +/* =========================================================================================================================== */ + +/** + * @brief RFMON registers (RFMON) + */ + +typedef struct /*!< (@ 0x40070600) RFMON Structure */ +{ + union + { + __IOM uint32_t RFMON_CTRL_REG; /*!< (@ 0x00000000) RFMON_CTRL_REG */ + + struct + { + __IOM uint32_t RFMON_PACK_EN : 1; /*!< [0..0] RFMON_PACK_EN */ + __IOM uint32_t RFMON_CIRC_EN : 1; /*!< [1..1] RFMON_CIRC_EN */ + __IOM uint32_t RFMON_BREQ_FORCE : 1; /*!< [2..2] RFMON_BREQ_FORCE */ + __IOM uint32_t RFMON_READ_FORCE : 1; /*!< [3..3] RFMON_READ_FORCE */ + uint32_t : 28; + } RFMON_CTRL_REG_b; + }; + + union + { + __IOM uint32_t RFMON_ADDR_REG; /*!< (@ 0x00000004) RFMON_ADDR_REG */ + + struct + { + uint32_t : 2; + __IOM uint32_t RFMON_ADDR : 30; /*!< [31..2] RFMON_ADDR */ + } RFMON_ADDR_REG_b; + }; + + union + { + __IOM uint32_t RFMON_LEN_REG; /*!< (@ 0x00000008) RFMON_LEN_REG */ + + struct + { + __IOM uint32_t RFMON_LEN : 17; /*!< [16..0] RFMON_LEN */ + uint32_t : 15; + } RFMON_LEN_REG_b; + }; + + union + { + __IOM uint32_t RFMON_STAT_REG; /*!< (@ 0x0000000C) RFMON_STAT_REG */ + + struct + { + __IM uint32_t RFMON_ACTIVE : 1; /*!< [0..0] RFMON_ACTIVE */ + __IOM uint32_t RFMON_OFLOW_STK : 1; /*!< [1..1] RFMON_OFLOW_STK */ + uint32_t : 30; + } RFMON_STAT_REG_b; + }; + + union + { + __IOM uint32_t RFMON_CRV_ADDR_REG; /*!< (@ 0x00000010) RFMON_CRV_ADDR_REG */ + + struct + { + uint32_t : 2; + __IM uint32_t RFMON_CRV_ADDR : 30; /*!< [31..2] RFMON_CRV_ADDR */ + } RFMON_CRV_ADDR_REG_b; + }; + + union + { + __IOM uint32_t RFMON_CRV_LEN_REG; /*!< (@ 0x00000014) RFMON_CRV_LEN_REG */ + + struct + { + __IM uint32_t RFMON_CRV_LEN : 17; /*!< [16..0] RFMON_CRV_LEN */ + uint32_t : 15; + } RFMON_CRV_LEN_REG_b; + }; +} RFMON_Type; /*!< Size = 24 (0x18) */ + +/* =========================================================================================================================== */ +/* ================ RTC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief RTC registers (RTC) + */ + +typedef struct /*!< (@ 0x40038000) RTC Structure */ +{ + union + { + __IOM uint32_t RTC_REQ_REG; /*!< (@ 0x00000000) RTC Request register */ + + struct + { + __OM uint32_t RTC_REQ_CLR : 1; /*!< [0..0] Clear Request of the RTC Interface, active high with + * auto clear function */ + __OM uint32_t RTC_REQ_CLR_MR : 1; /*!< [1..1] Clear Request of the mirroring FRC, active high with + * auto clear function */ + __OM uint32_t RTC_REQ_CLR_IRQ : 1; /*!< [2..2] Clear Request of the RTC IRQ Status, active high with + * auto clear function */ + __OM uint32_t RTC_REQ_LOAD_MR : 1; /*!< [3..3] Load Request of the FRC to mirroring, active high with + * auto clear function by loading done interrupt */ + uint32_t : 28; + } RTC_REQ_REG_b; + }; + + union + { + __IOM uint32_t RTC_MIRROR_REG; /*!< (@ 0x00000004) RTC Enable Mirror register */ + + struct + { + __IOM uint32_t RTC_OP_EN : 1; /*!< [0..0] Operation Enable of the RTC Interface */ + __IOM uint32_t RTC_MR_EN : 1; /*!< [1..1] Monitoring Enable of the RTC Free-Running-Counter(FRC) */ + uint32_t : 30; + } RTC_MIRROR_REG_b; + }; + + union + { + __IOM uint32_t RTC_IF_REG; /*!< (@ 0x00000008) RTC Interface register */ + + struct + { + __IOM uint32_t RTC_IF_0_DL : 4; /*!< [3..0] First logic zero duration length for RTC interface signals + * (wr_en or rd_en)0 : 1 cycle1 : 2 cycles...F : 16 cycles */ + __IOM uint32_t RTC_IF_1_DL : 4; /*!< [7..4] First logic high duration length for RTC interface signals + * (wr_en or rd_en)0 : 1 cycle1 : 2 cycles...F : 16 cycles */ + __IOM uint32_t RTC_IF_2_DL : 4; /*!< [11..8] Second logic zero duration length for RTC interface + * signals (wr_en or rd_en)0 : 1 cycle1 : 2 cycles...F : 16 + * cycles */ + uint32_t : 4; + __IOM uint32_t RTC_IF_0_DL_EN : 1; /*!< [16..16] Operation Enable of the first logic zero duration */ + __IOM uint32_t RTC_IF_1_DL_EN : 1; /*!< [17..17] Operation Enable of the first logic high duration */ + __IOM uint32_t RTC_IF_2_DL_EN : 1; /*!< [18..18] Operation Enable of the second logic zero duration */ + uint32_t : 5; + __IOM uint32_t RTC_IF_TYPE : 1; /*!< [24..24] Operation Type of the RTC Interface Clock (wr_en or + * rd_en)0 : falling edge of the bus clock (HCLK)1 : rising + * edge of the bus clock (HCLK) */ + uint32_t : 7; + } RTC_IF_REG_b; + }; + + union + { + __IOM uint32_t RTC_IRQ_EN_REG; /*!< (@ 0x0000000C) RTC Interrupt enable register */ + + struct + { + __IOM uint32_t RTC_IRQ_EN : 2; /*!< [1..0] Mask Enable of the RTC Interface's interrupt outputbit[1] + * : Access Done of the Edge Enablebit[0] : Loading Done of + * the Free-Running-Counter to mirroring */ + uint32_t : 30; + } RTC_IRQ_EN_REG_b; + }; + + union + { + __IOM uint32_t RTC_CLK_INV_REG; /*!< (@ 0x00000010) RTC Clock inverse register */ + + struct + { + __IOM uint32_t RTC_CLK_INV : 1; /*!< [0..0] RTC clock (32.768 KHz) inversion0 : bypass1 : inversion */ + uint32_t : 31; + } RTC_CLK_INV_REG_b; + }; + + union + { + __IOM uint32_t RTC_CLK_GR_CYC_REG; /*!< (@ 0x00000014) RTC Clock cycle register */ + + struct + { + __IOM uint32_t RTC_CLK_GR_CYC : 4; /*!< [3..0] Glitch Removal Cycles of RTC Clock (32.768 KHz)Delay + * cells or D-F/Fs type ? */ + uint32_t : 28; + } RTC_CLK_GR_CYC_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t RTC_EDGE_REG; /*!< (@ 0x0000001C) RTC Edge mode register */ + + struct + { + __IOM uint32_t RTC_EDGE_EN : 2; /*!< [1..0] Edge Enable to access RTC Core Registers in manual modebit[1] + * : Rising edge enablebit[0] : Falling edge enable */ + uint32_t : 6; + __IOM uint32_t RTC_EDGE_AUTO_N : 1; /*!< [8..8] Automatic edge enable to access RTC Core Registers(active + * low)0 : automatic1 : manual (for debug) */ + uint32_t : 23; + } RTC_EDGE_REG_b; + }; + + union + { + __IOM uint32_t RTC_IRQ_STATUS_REG; /*!< (@ 0x00000020) RTC Interrupt Status register */ + + struct + { + __IM uint32_t RTC_IRQ_STATUS : 2; /*!< [1..0] Interrupt Status of the RTC Interfacebit[1] : Access + * Done of the Edge Enablebit[0] : Loading Done of the Free-Running-Counter + * to mirroring */ + uint32_t : 30; + } RTC_IRQ_STATUS_REG_b; + }; + + union + { + __IOM uint32_t RTC_MR_SEL_8040_REG; /*!< (@ 0x00000024) RTC Selection Mirror register */ + + struct + { + __IM uint32_t RTC_MR_SEL_8040 : 1; /*!< [0..0] Mirroring Register of the RTC SEL_8040 signal */ + uint32_t : 31; + } RTC_MR_SEL_8040_REG_b; + }; + + union + { + __IOM uint32_t RTC_MR_FRC0_REG; /*!< (@ 0x00000028) RTC FreeRun Counter0 Mirror register */ + + struct + { + __IM uint32_t RTC_MR_FRC0 : 32; /*!< [31..0] Mirroring Registers of the RTC Free-Running-Counter[31:0] */ + } RTC_MR_FRC0_REG_b; + }; + + union + { + __IOM uint32_t RTC_MR_FRC1_REG; /*!< (@ 0x0000002C) RTC FreeRun Counter1 Mirror register */ + + struct + { + __IM uint32_t RTC_MR_FRC1 : 4; /*!< [3..0] Mirroring Registers of the RTC Free-Running-Counter[35:32] */ + uint32_t : 28; + } RTC_MR_FRC1_REG_b; + }; + + union + { + __IOM uint32_t RTC_FRC_STATUS_REG; /*!< (@ 0x00000030) RTC FRC Status register */ + + struct + { + __IM uint32_t RTC_FRC_STATUS : 3; /*!< [2..0] Free-Running-Counter Status of the RTC Interfacebit[2] + * : FRC valid data 0 : valid 1 : not validbit[1:0] : retry + * number of the current FRC read access 0 : direct 1 : 1 + * retry 2 : 2 retry (happen to glitch or not) 3 : 3 retry + * (happen to glitch or not) */ + uint32_t : 29; + } RTC_FRC_STATUS_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t BCFM_REQ_CLR_IRQ_REG; /*!< (@ 0x00000040) BCFM_REQ_CLR_IRQ_REG */ + + struct + { + __OM uint32_t BCFM_REQ_START : 1; /*!< [0..0] Start Request to measure the bus clock frequency, active + * high with auto clear function by operation done interrupt */ + __OM uint32_t BCFM_REQ_CLR_IRQ : 1; /*!< [1..1] Clear Request of the BCFM IRQ Status and BCFM Core, active + * high with auto clear function */ + uint32_t : 30; + } BCFM_REQ_CLR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t BCFM_OP_EN_REG; /*!< (@ 0x00000044) BCFM_OP_EN_REG */ + + struct + { + __IOM uint32_t BCFM_OP_EN : 1; /*!< [0..0] Operation Enable of the bus clock frequency measurement */ + uint32_t : 31; + } BCFM_OP_EN_REG_b; + }; + + union + { + __IOM uint32_t BCFM_TOT_CYC_REG; /*!< (@ 0x00000048) BCFM_TOT_CYC_REG */ + + struct + { + __IOM uint32_t BCFM_TOT_CYC : 16; /*!< [15..0] Total cycles of Xtal 32.768 KHz to measure the bus clock + * frequency0 : 1 cycle1 : 2 cycles...n : n+1 cycles */ + uint32_t : 16; + } BCFM_TOT_CYC_REG_b; + }; + + union + { + __IOM uint32_t BCFM_IRQ_EN_REG; /*!< (@ 0x0000004C) BCFM_IRQ_EN_REG */ + + struct + { + __IOM uint32_t BCFM_IRQ_EN : 1; /*!< [0..0] Mask Enable of the BCFM's interrupt output[0] : BCFM + * : Operation Done */ + uint32_t : 31; + } BCFM_IRQ_EN_REG_b; + }; + + union + { + __IOM uint32_t BCFM_IRQ_STATUS_REG; /*!< (@ 0x00000050) BCFM_IRQ_STATUS_REG */ + + struct + { + __IM uint32_t BCFM_IRQ_STATUS : 1; /*!< [0..0] Interrupt Status of the BCFM1 : BCFM Operation Done */ + uint32_t : 31; + } BCFM_IRQ_STATUS_REG_b; + }; + + union + { + __IOM uint32_t BCFM_OP_STATUS_REG; /*!< (@ 0x00000054) BCFM_OP_STATUS_REG */ + + struct + { + __IM uint32_t BCFM_OP_STATUS : 2; /*!< [1..0] Operation Status of the BCFM0 : Idle1 : Waiting2 : Running3 + * : End */ + uint32_t : 30; + } BCFM_OP_STATUS_REG_b; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IOM uint32_t RTC_EXP_CLR_IRQ_REG; /*!< (@ 0x00000060) RTC Exp Interrupt clear register */ + + struct + { + __OM uint32_t RTC_EXP_START : 1; /*!< [0..0] Start Request to operate RTC EXP IRQ, active high with + * auto clear function by operation done interrupt */ + __OM uint32_t RTC_EXP_CLR_IRQ : 1; /*!< [1..1] Clear Request of the RTC EXP IRQ Status, active high + * with auto clear function */ + uint32_t : 30; + } RTC_EXP_CLR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t RTC_EXP_IRQ_EN_REG; /*!< (@ 0x00000064) RTC Exp Interrupt enable register */ + + struct + { + __IOM uint32_t RTC_EXP_IRQ_EN : 3; /*!< [2..0] Enable of Interrupt Operation for the RTC Expiration + * Timerbit[2] : At the time of setting RTC_EXP_START, the + * interrupt occurs when the RTC mirror FRC is bigger than + * the threshold value.bit[1] : Interrupt occurs when RTC + * mirror FRC is turn aroundbit[0] : Interrupt occurs when + * RTC mirror FRC is equal to threshold value. */ + uint32_t : 29; + } RTC_EXP_IRQ_EN_REG_b; + }; + + union + { + __IOM uint32_t RTC_EXP_TH0_REG; /*!< (@ 0x00000068) RTC Exp Theshold0 register */ + + struct + { + __IOM uint32_t RTC_EXP_TH0 : 32; /*!< [31..0] Threshold value [31:0] to trigger the interrupt for + * the Expiration Timer */ + } RTC_EXP_TH0_REG_b; + }; + + union + { + __IOM uint32_t RTC_EXP_TH1_REG; /*!< (@ 0x0000006C) RTC Exp Theshold1 register */ + + struct + { + __IOM uint32_t RTC_EXP_TH1 : 4; /*!< [3..0] Threshold value [35:32] to trigger the interrupt for + * the Expiration Timer */ + uint32_t : 28; + } RTC_EXP_TH1_REG_b; + }; + + union + { + __IOM uint32_t RTC_EXP_OP_STS_REG; /*!< (@ 0x00000070) RTC Exp OP Status register */ + + struct + { + __IM uint32_t RTC_EXP_IRQ_STATUS : 3; /*!< [2..0] RTC_EXP_IRQ_STATUS */ + uint32_t : 5; + __IM uint32_t RTC_EXP_OP_STATUS : 1; /*!< [8..8] Operation Status of the RTC Expiration Timer0 : idle1 + * : running when RTC mirror FRC is equal to threshold value. */ + uint32_t : 23; + } RTC_EXP_OP_STS_REG_b; + }; + __IM uint32_t RESERVED3[3]; + + union + { + __IOM uint32_t RTC_ACC_REQ_REG; /*!< (@ 0x00000080) RTC Access Request clear register */ + + struct + { + __OM uint32_t RTC_ACC_REQ_START : 1; /*!< [0..0] Start Request of the AHB Master to access the RTC Core + * manually, active high with auto clear function by operation + * done */ + __OM uint32_t RTC_ACC_REQ_CLR : 1; /*!< [1..1] Clear Request of the AHB Master to access the RTC Core, + * active high with auto clear function */ + uint32_t : 30; + } RTC_ACC_REQ_REG_b; + }; + + union + { + __IOM uint32_t RTC_ACC_AUTO_EN_REG; /*!< (@ 0x00000084) RTC Access Auto mode register */ + + struct + { + __IOM uint32_t RTC_ACC_AUTO_EN : 1; /*!< [0..0] Automatic Operation Enable of the AHB Master by CPU WatchDog */ + uint32_t : 31; + } RTC_ACC_AUTO_EN_REG_b; + }; + + union + { + __IOM uint32_t RTC_ACC_OP_TYPE_REG; /*!< (@ 0x00000088) RTC Access OP type register */ + + struct + { + __IOM uint32_t RTC_ACC_OP_TYPE : 3; /*!< [2..0] Operation Enable Type to access the RTC Corebit[2] : + * read enable to hold previouly values (wired and)bit[1] + * : read enable to hold previouly values (wired or)bit[0] + * : write enable to save wanted values */ + uint32_t : 29; + } RTC_ACC_OP_TYPE_REG_b; + }; + __IM uint32_t RESERVED4; + + union + { + __IOM uint32_t RTC_ACC_ADDR_REG; /*!< (@ 0x00000090) RTC Access Address register */ + + struct + { + __IOM uint32_t RTC_ACC_ADDR : 7; /*!< [6..0] Address to access the RTC Core */ + uint32_t : 25; + } RTC_ACC_ADDR_REG_b; + }; + + union + { + __IOM uint32_t RTC_ACC_WDATA_REG; /*!< (@ 0x00000094) RTC Access Write Data register */ + + struct + { + __IOM uint32_t RTC_ACC_WDATA : 32; /*!< [31..0] Write Data to access the RTC Core */ + } RTC_ACC_WDATA_REG_b; + }; + __IM uint32_t RESERVED5[2]; + + union + { + __IOM uint32_t RTC_ACC_BUSY_REG; /*!< (@ 0x000000A0) RTC Access Busy register */ + + struct + { + __IM uint32_t RTC_ACC_BUSY : 1; /*!< [0..0] Operation Status of the AHB Bus Master0 : Idle1 : Busy */ + uint32_t : 31; + } RTC_ACC_BUSY_REG_b; + }; + __IM uint32_t RESERVED6[23]; + + union + { + __IOM uint32_t WAKEUP_CNT_0_REG; /*!< (@ 0x00000100) Wakeup Counter0 register */ + + struct + { + __IOM uint32_t WAKEUP_CNT_0 : 32; /*!< [31..0] count_value [31:0] :down count : using mask_en */ + } WAKEUP_CNT_0_REG_b; + }; + + union + { + __IOM uint32_t WAKEUP_CNT_1_REG; /*!< (@ 0x00000104) Wakeup Counter1 register */ + + struct + { + __IOM uint32_t WAKEUP_CNT_1 : 4; /*!< [3..0] count_value [35:32] :down count : using mask_en */ + uint32_t : 28; + } WAKEUP_CNT_1_REG_b; + }; + + union + { + __IOM uint32_t GPIO_WAKEUP0_REG; /*!< (@ 0x00000108) DWAKEUP0 register */ + + struct + { + __IOM uint32_t GPIO_WAKEUP_EDGE_INVERSION_SEL : 11; /*!< [10..0] edge sel : inversion of selected signal by [26:16] of + * DWAKEUP1_REG 0 : high active 1 : low active */ + uint32_t : 21; + } GPIO_WAKEUP0_REG_b; + }; + + union + { + __IOM uint32_t GPIO_WAKEUP1_REG; /*!< (@ 0x0000010C) DWAKEUP1 register */ + + struct + { + __IM uint32_t GPIO_WAKEUP_SRC : 11; /*!< [10..0] GPIO wake up source [10:0] */ + uint32_t : 5; + __IOM uint32_t GPIO_WAKEUP_EN_SEL : 11; /*!< [26..16] wakeup enable of selected signal : matching same bit + * number[16] : GPIO_P0_00[17] : GPIO_P0_08[18] : GPIO_P0_09[19] + * : GPIO_P0_10[20] : GPIO_P0_11[21] : GPIO_P0_12[22] : GPIO_P0_13[23] + * : GPIO_P1_10[24] : GPIO_P1_11[25] : GPIO_P1_12[26] : GPIO_P1_13 */ + uint32_t : 5; + } GPIO_WAKEUP1_REG_b; + }; + + union + { + __IOM uint32_t ENABLE_CTRL_REG; /*!< (@ 0x00000110) Enable_control register */ + + struct + { + __IOM uint32_t SLEEP3_EN : 1; /*!< [0..0] Power down enable : this bit becomes SLEEP3 mode enable + * bit. */ + __IOM uint32_t WATCHDOG_OUT_INT_EN : 1; /*!< [1..1] WatchDog Enable :It should be set to enable after setting + * WDOG_COUNTER_BIT_POS_REG register (0x015C). */ + __IOM uint32_t BROWN_OUT_LOW_INT_EN : 1; /*!< [2..2] Brown out detector interrupt enable when falling edge */ + __IOM uint32_t BROWN_OUT_HIGH_INT_EN : 1; /*!< [3..3] Brown out detector interrupt enable when rising edge */ + __IOM uint32_t REAL_CNT_LOAD : 1; /*!< [4..4] CLOCK ENABLE for adc sensor and pulse cnt functions */ + __IOM uint32_t DIG_LDO_DELAY : 2; /*!< [6..5] DIG LDO turn on time delay logic00 : 2 clocks behind + * dcdc_ana01 : 4 clocks delay10 : 8 clocks delay11 : 10 clocks + * delay */ + uint32_t : 1; + __IOM uint32_t SLEEP4_EN : 1; /*!< [8..8] SLEEP4 mode enable bit, cleared by HW automatically */ + __IOM uint32_t SLEEP5_EN : 1; /*!< [9..9] SLEEP5 mode enable bit, cleared by HW automatically */ + __IOM uint32_t BLACK_OUT_LOW_INT_EN : 1; /*!< [10..10] Black out detector interrupt enable when falling edge */ + __IOM uint32_t BLACK_OUT_HIGH_INT_EN : 1; /*!< [11..11] Black out detector interrupt enable when rising edge */ + uint32_t : 20; + } ENABLE_CTRL_REG_b; + }; + + union + { + __IOM uint32_t CLK_XTAL32K_REG; /*!< (@ 0x00000114) XTAL32Khz Control register */ + + struct + { + __IOM uint32_t PDB_OSC_EN : 1; /*!< [0..0] PDB_OSC32kHz Oscillator Power on/off (active high) (default:1) */ + __IOM uint32_t XTAL_BAT_EN : 1; /*!< [1..1] EN_XTAL_BAT32kHz Crystal Power on/off (active high) (default:1) */ + __IOM uint32_t XTAL_CLK_SEL : 2; /*!< [3..2] CLK_SEL[1:0]Select clock source (default 32kHz OSC.)0 + * : 32kHz OSC. 1 : 32kHz Crystal 2 : for Test */ + __IOM uint32_t XR_BAT_EN : 1; /*!< [4..4] EN_XR_BATExternal resistor enable 0 : Internal resistor + * used, (default)1 : External resistor used (It is possible + * to input 10MHz Ext RTC) */ + __IOM uint32_t XTAL_LDO_CTRL : 3; /*!< [7..5] XTAL_LDO_CTRL BIT */ + __IOM uint32_t XTAL_LDO_I_CTRL : 2; /*!< [9..8] XTAL_LDO_I_CTRL BIT */ + __IOM uint32_t VBAT_BIAS_I_CTRL : 1; /*!< [10..10] VBAT_BIAS_I_CTRL BIT */ + uint32_t : 21; + } CLK_XTAL32K_REG_b; + }; + + union + { + __IOM uint32_t RTM_CONTROL_REG; /*!< (@ 0x00000118) RTM Control register */ + + struct + { + __IOM uint32_t RTM_CTRL_PDB_ISO : 1; /*!< [0..0] PDB_ISO - default 1 1 : Isolation cell disable, Access + * to RTM,0 : Isolation cell enable, Not access to RTM */ + __IOM uint32_t RTM_INFO : 1; /*!< [1..1] RTM_INFORM */ + __IOM uint32_t RTM_CTRL_PDP_ISO_SHARED_IO : 1; /*!< [2..2] PDB_ISO_shared_io - default 01: isolation cell disable + * access to GPIO4~7Note : [24] when SEN_VDD, bit[2] should + * be set as well */ + __IOM uint32_t RTM_CTRL_PWR_DN_INFO : 4; /*!< [6..3] power down information */ + uint32_t : 1; + __IOM uint32_t RTM_CTRL_RET_SLR : 3; /*!< [10..8] RET_SLR[2:0] Retention Sleep Enable : shutdown mode + * - contents are lost. */ + __IOM uint32_t RTM_CTRL_RET_RET : 3; /*!< [13..11] RET_RET[2:0] Retention memory retention signal enable */ + uint32_t : 2; + __IOM uint32_t RTM_CTRL_IO_RETEN_CTRL : 5; /*!< [20..16] IO retention control bit[20] : reton_vbat : P0_00 ~ + * P0_03[19] : reton_fdio : P1_00 ~ P1_09[18] : reton_dio2 + * : P1_10 ~ P1_15, SWCLK,SWDIO[17] : reton_dio1_2 : P0_08 + * ~ P0_13[16] : reton_dio1_1 : P0_04 ~ P0_07l */ + uint32_t : 11; + } RTM_CONTROL_REG_b; + }; + + union + { + __IOM uint32_t DCDC_CNTL_OFF_REG; /*!< (@ 0x0000011C) DCDC Control Off register */ + + struct + { + __IOM uint32_t DCDC_PWR_OFF : 1; /*!< [0..0] DCDC1.2 power off, when set '1', DCDC1.2 Off */ + __IOM uint32_t DCDC_AUTO_PWR_ON_EN : 1; /*!< [1..1] Auto Power On Enable ( activate function of the SW POR + * Reset) */ + uint32_t : 30; + } DCDC_CNTL_OFF_REG_b; + }; + + union + { + __IOM uint32_t LDO_ENABLE_REG; /*!< (@ 0x00000120) LDO Enable register */ + + struct + { + __IOM uint32_t LDO_EN_PDB_XTAL_NOISE_REDU : 1; /*!< [0..0] PDB_XTAL_NOISE_REDU : XTAL noise reduction (active high) + * (default = 0) :It should be turn on before RF_CS on. make + * turn on with RF_LDO_ON concurrently.It is reset to 0 when + * sleep mode.(This field is nois reduction filter enable. + * XTAL40M is turned on when DCDC on state.) */ + __IOM uint32_t EN_FDIO_PULLDN : 1; /*!< [1..1] pull down switch for FDIO_LDO */ + __IOM uint32_t LDO_EN_LDO_PLL1 : 1; /*!< [2..2] LDO_PLL1,It is reset 0 when sleep mode */ + __IOM uint32_t LDO_EN_OTP_PWRPRDY : 1; /*!< [3..3] OTP_PWRPRDY - otp power ready */ + __IOM uint32_t LDO_EN_PDB_IP3_OTP : 1; /*!< [4..4] PDB_IP3_OTP : OTP power switch default 1 */ + __IOM uint32_t LDO_EN_PDB_ULDO : 1; /*!< [5..5] It turns on uLDO once OTP is not ready or uLDO manual + * control is not activated.0: uLDO is turned offonce OTP + * is not ready and uLDO manual control is not activated.1: + * uLDO is turned on once OTP is not ready or uLDO manual + * control is not activated. */ + __IOM uint32_t LDO_EN_DCDC_CNTL_XTAL : 1; /*!< [6..6] It turns on the LDO for the 40MHz crystal.0: Off, 1: + * On */ + __IOM uint32_t LDO_EN_DIG_LDO_CNTL : 1; /*!< [7..7] DIG_LDO_CNTL */ + __IOM uint32_t LDO_EN_PDB_RF_LDO : 1; /*!< [8..8] PDB_RF_LDO (default = 0)It is substiute signal of the + * PDB_DCDC_ANA in Tin.It is reset 0 when sleep mode. */ + __IOM uint32_t LDO_EN_PDB_IP1_LDO : 1; /*!< [9..9] PDB_IP1_LDO : when sleep mode, reset to 0 (IQADC/DAC + * power cont) */ + __IOM uint32_t LDO_EN_FLASH_DIO_MANUAL_MODE : 1; /*!< [10..10] Flash_DIO LDO manual mode enable bit 0:auto mode, 1:manual + * mode */ + __IOM uint32_t LDO_EN_FLASH_DIO_MANUAL_VAL : 1; /*!< [11..11] Flash_DIO LDO manual mode valueif set bit[10] to 1, + * transfer a value of the bit[11] */ + __IOM uint32_t LDO_EN_RESET_12V_HOLD_EN : 1; /*!< [12..12] RESET_12V hold enable :if set to 1, hold reset signal + * to 1 in the BB */ + __IOM uint32_t LDO_EN_BOOST_PWR_OFF : 1; /*!< [13..13] Change the function of this bit : default 00 : xtal40Mhz + * supplies to dcore1 : OSC10Mhz supplies to dcore */ + __IOM uint32_t LDO_EN_DCDC_CTRL_OFF : 1; /*!< [14..14] It forcibly turns off the DCDC_ANA. It should be activated + * to operatate in normal mode.0: DCDC_ANA is controlled by + * hardware.1: DCDC_ANA is forcibly turend off. */ + __IOM uint32_t FLASH_LDO_AUTO_OFF : 1; /*!< [15..15] Flash LDO off when next wakeup, HW does not turn on + * the Flash LDO enable at the next wakeup.0: on1: off */ + __IOM uint32_t EN_ST_PAD_DCDC_BYP : 1; /*!< [16..16] bypass control of soft start (pa_dcdc) */ + __IOM uint32_t EN_DCDC_PA : 1; /*!< [17..17] enable of dcdc_pa */ + __IOM uint32_t CTRL_ST_PA_DCDC : 5; /*!< [22..18] soft start duration time for dcdc_pa */ + __IOM uint32_t EN_LP_DIG_LDO : 1; /*!< [23..23] enable for LP_DIG_LDO (Active high) */ + __IOM uint32_t CFG_LPDIGLDO_I : 2; /*!< [25..24] current control for LP_DIG_LDO (50/75/100/125nA) */ + __IOM uint32_t CFG_LPDIG_LDO_V : 4; /*!< [29..26] Reference V (to LPDIG), 0.8 ~ 1.16V (0.025V step (default + * : 1.1V) */ + uint32_t : 2; + } LDO_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t CNT_TESTI_REG; /*!< (@ 0x00000124) Counter Testi register */ + + struct + { + __IOM uint32_t IP3_PWR_ON_REG : 1; /*!< [0..0] IP3_PWR_ON=PD_SEN power control signaldefualt : 1 (power + * on) */ + __IOM uint32_t BR_TESTI_REG : 1; /*!< [1..1] BR/BL Int test enable bit.1 : BR/BL On signal can be + * get via P0_08 */ + uint32_t : 3; + __IM uint32_t I_SIGNAL : 1; /*!< [5..5] read only : I_SIGNAL of pulse Cnt input for testing */ + __IM uint32_t EXT_INT_BL : 1; /*!< [6..6] read only : BL Int */ + __IM uint32_t EXT_INT_BR : 1; /*!< [7..7] read only : BR Int */ + __IOM uint32_t AUXADC12_CS : 3; /*!< [10..8] AuxADC12_CS [2:0] */ + __IOM uint32_t EN_DPLL_CLK_BYPASS : 1; /*!< [11..11] AuxADC12_CS [2:0] */ + uint32_t : 4; + __IOM uint32_t EN_RTC_GPO_SW_VBAT : 1; /*!< [16..16] GPIO GPO(SEN_OUT) function enable (Active high) */ + __IOM uint32_t EN_XTAL40M_LDO_MON : 1; /*!< [17..17] monitor path enable for XTAL40M_LDO (Active high) */ + __IOM uint32_t EN_DFT_NBIAS : 1; /*!< [18..18] nbias manual enable for DRA test mode */ + __IOM uint32_t DFT_SEL_ANA_BGR : 2; /*!< [20..19] DFT_SEL_ANA_BGR */ + __IOM uint32_t EN_NBIAS_TRIM : 1; /*!< [21..21] trimming enable for nBIAS (Active high) */ + __IOM uint32_t EN_DFT_VDDD_RET : 1; /*!< [22..22] DfT path enable for vref of uLDO (Active high) */ + __IOM uint32_t EN_DFT_VREF : 1; /*!< [23..23] DfT path enable for vref of nBIAS (Active high) */ + __IOM uint32_t TRIM_NBIAS_I : 4; /*!< [27..24] current trim control for nBIAS */ + __IOM uint32_t EN_LP_DIG_LDO_MON : 1; /*!< [28..28] monitor path enable for LP_DIG_LDO (Active high) */ + __IOM uint32_t EN_LDO_ADCSEN_MON : 1; /*!< [29..29] monitor path enable for adcsen_LDO (Active high) */ + __IOM uint32_t EN_LDO_DPLL_MON : 1; /*!< [30..30] monitor path enable for DPLL480M_LDO (Active high) */ + __IM uint32_t DFT_NBIAS_TRIM : 1; /*!< [31..31] Comp output for trim */ + } CNT_TESTI_REG_b; + }; + + union + { + __IOM uint32_t WAKEUP_SRC_CLR_SIG_REG; /*!< (@ 0x00000128) Wakeup source clear signal register */ + + struct + { + __IOM uint32_t GPIO_WAKE_UP_DETECT : 1; /*!< [0..0] GPIO Wake Up signal detect : refer to GPIO_WAKEUP1_REG */ + __IOM uint32_t FRC_COMPARE_DETECT : 1; /*!< [1..1] FRC compare detect */ + __IOM uint32_t POR_INDICATOR : 1; /*!< [2..2] POR indicator */ + __IOM uint32_t WATCHDOG_DETECT : 1; /*!< [3..3] WatchDog detect */ + __IOM uint32_t ADC_DETECT : 1; /*!< [4..4] sensor(ADC) detect */ + __IOM uint32_t PULSE_CNT_DETECT : 1; /*!< [5..5] Pulse CNT detect */ + __IOM uint32_t TIMER_IRQ_DETECT : 1; /*!< [6..6] timers irq detected in sleep4/5.Oring : timers irq/wdog_nmi_sync/mac_ti + * er_irq */ + uint32_t : 1; + __IM uint32_t ADC_WAKEUP_STATUS : 4; /*!< [11..8] ADC Sensor WakeUp status [11] : Sensor WakeUp 3 [10] + * : Sensor WakeUp 2 [ 9] : Sensor WakeUp 1 [ 8] : Sensor + * WakeUp 0 */ + uint32_t : 20; + } WAKEUP_SRC_CLR_SIG_REG_b; + }; + + union + { + __IOM uint32_t RCX32K_REG; /*!< (@ 0x0000012C) RCX32K trim register */ + + struct + { + __IOM uint32_t TRIM_RCX32K_ROSC : 14; /*!< [13..0] rcx32k trimming (resistor),12bit */ + __IOM uint32_t CFG_TEST_HI : 2; /*!< [15..14] trimmng control */ + __IOM uint32_t TRIM_RCX32K_COSC : 2; /*!< [17..16] rcx32k trimming (capacitor), 2bit */ + uint32_t : 14; + } RCX32K_REG_b; + }; + + union + { + __IOM uint32_t LDO_ENABLE2_REG; /*!< (@ 0x00000130) uLDO Enable register */ + + struct + { + __IOM uint32_t RTC_XTAL40M_EN : 1; /*!< [0..0] XTAL40M IP enable signal */ + __IOM uint32_t ULDO_MAN_CONT : 1; /*!< [1..1] uLDO manual control enable signal0 : off1 : manual control + * en, when 1, UDLO_MAN_CONT_VALUE signal goes to PDB_uLDO */ + __IOM uint32_t ULDO_MAN_CONT_VALUE : 1; /*!< [2..2] when UDLO_MAN_CONT =1 , this bit goes to en_pdb_uldo_3V3. */ + __IOM uint32_t EN_TST_GPIO0 : 1; /*!< [3..3] GPIO to GPADC connection control ma tp P0_050 : open1 + * : short */ + __IOM uint32_t EN_TST_GPIO1 : 1; /*!< [4..4] GPIO to GPADC connection control ma tp P0_060 : open1 + * : short */ + __IOM uint32_t EN_TST_GPIO2 : 1; /*!< [5..5] GPIO to GPADC connection control ma tp P0_070 : open1 + * : short */ + __IOM uint32_t EN_TST_GPIO3 : 1; /*!< [6..6] GPIO to GPADC connection control ma tp P0_040 : open1 + * : short */ + __IOM uint32_t EN_TST_INT : 1; /*!< [7..7] test enable bit for internal test logic */ + uint32_t : 24; + } LDO_ENABLE2_REG_b; + }; + + union + { + __IOM uint32_t CNT_BASE_TESTI_REG; /*!< (@ 0x00000134) Counter Value read register */ + + struct + { + __IM uint32_t TIN_CNT_BASE : 5; /*!< [4..0] Counter reset value = h14 for testing */ + __IM uint32_t TIN_CNT_TEST1 : 5; /*!< [9..5] Counter read value for testing 1 */ + __IM uint32_t TIN_CNT_TEST2 : 5; /*!< [14..10] Counter read value for testing2 */ + uint32_t : 17; + } CNT_BASE_TESTI_REG_b; + }; + + union + { + __IOM uint32_t FRC_CNT_0_REG; /*!< (@ 0x00000138) FRC Counter0 register */ + + struct + { + __IM uint32_t FRC_CNT_0 : 32; /*!< [31..0] RTC Free runing count read value[31:0] : down count + * : use mask_en */ + } FRC_CNT_0_REG_b; + }; + + union + { + __IOM uint32_t FRC_CNT_1_REG; /*!< (@ 0x0000013C) FRC Counter1 register */ + + struct + { + __IM uint32_t FRC_CNT_1 : 4; /*!< [3..0] RTC Free runing count read value[35:32] : down count + * : use mask_en */ + uint32_t : 28; + } FRC_CNT_1_REG_b; + }; + + union + { + __IOM uint32_t READ_STATUS_REG; /*!< (@ 0x00000140) Read Status register */ + + struct + { + __IM uint32_t WAKE_UP_SOURCE__RD_STATUS : 1; /*!< [0..0] wake up source */ + __IM uint32_t X12_CLK_RD_STATUS : 1; /*!< [1..1] X12_Clk */ + uint32_t : 1; + __IM uint32_t XTAL_RDY_BAT_RD_STATUS : 1; /*!< [3..3] XTAL_RDY_BAT */ + __IM uint32_t WTEMPEQCOMPWKCNT_RD_STATUS : 1; /*!< [4..4] wTempEqCompWkCnt */ + __IM uint32_t OTP_RDY_RD_STATUS : 1; /*!< [5..5] wTempEqCompBit7Cnt */ + __IM uint32_t RESET_POSITION_RD_STATUS : 1; /*!< [6..6] wTempEqCompBit6Cnt */ + __IM uint32_t WWATCHDOGCLK_RD_STATUS : 1; /*!< [7..7] wWatchDogClk */ + __IM uint32_t XTAL40M_RDY_VBAT_RD_STATUS : 1; /*!< [8..8] XTAL40M_RDY_VBAT */ + __IM uint32_t RF_LDO_RDY_VBAT_RD_STATUS : 1; /*!< [9..9] RF_LDO_RDY_VBAT */ + __IM uint32_t DIG_LDO_RDY_VBAT_RD_STATUS : 1; /*!< [10..10] DIG_LDO_RDY_VBAT */ + __IM uint32_t F_LDO_RDY_RD_STATUS : 1; /*!< [11..11] F_LDO_RDY */ + __IM uint32_t DCDC_RDY_VBAT_RD_STATUS : 1; /*!< [12..12] DCDC_RDY_VBAT */ + __IM uint32_t IP1_LDO_RDY_VBAT_RD_STATUS : 1; /*!< [13..13] IP1_LDO_RDY_VBAT */ + __IM uint32_t LP_DIG_LDO_OK_RD_STATUS : 1; /*!< [14..14] LP_DIG_LDO_FLAG signal */ + __IM uint32_t DCDC_PA_OK_RD_STATUS : 1; /*!< [15..15] Flag_dcdc_pa_ok signal */ + uint32_t : 16; + } READ_STATUS_REG_b; + }; + + union + { + __IOM uint32_t ULDO_CONT_REG; /*!< (@ 0x00000144) uLDO Control register */ + + struct + { + __IOM uint32_t RTC_CLK_INVERSION : 1; /*!< [0..0] RTC clock inversion : 0 : bypass 1 : inversion */ + __IOM uint32_t PDB_TEST_BUF : 1; /*!< [1..1] PDB_TEST_BUF : IP2 test buffer enable */ + uint32_t : 2; + __IOM uint32_t RTC_ULDO_VCTRL : 4; /*!< [7..4] It determines the voltage level of the uLDO. the default + * value is '1' and 1.14V.0:1.16V, 1:1.14V, 2:1.12V, 3:1.1V, + * 4:107V, 5:1.04V, 6:1.02V, 7:1.00V,8:0.97V, 9:0.95V, 10:0.93V, + * 11:0.90V, 12:0.88V, 13:0.86V, 14:0.93V, 15:0.80V */ + __IOM uint32_t RTC_ULDO_HICTRL : 2; /*!< [9..8] It turns on the 6uA bleeding current in the uLDO. The + * bleeding current setting is automatically changed to ULDO_HICTRL_SLP + * during sleep mode.0: Turn off the bleeding current1~3: + * Turn on the bleeding current */ + __IOM uint32_t RTC_ULDO_LICTRL : 2; /*!< [11..10] RTC_uLDO_LICTRL default : 2'b01 */ + __IOM uint32_t RTC_XTAL32K_ICTRL : 2; /*!< [13..12] RTC_XTAL32K_ICTRL default : 2'b01 */ + __IOM uint32_t RTC_OSC32K_ICTRL : 2; /*!< [15..14] RTC_OSC32K_ICTRL default : 2'b00 */ + __IOM uint32_t RTC_XTAL32K_GM : 2; /*!< [17..16] RTC_XTAL32K_GM default : 2'b11 */ + __IM uint32_t FLAG_DVDD_POR : 1; /*!< [18..18] DVDD POR OK Flag */ + __IM uint32_t FLAG_LDODCDC_POR : 1; /*!< [19..19] LDO DCDC POR OK Flag */ + __IM uint32_t FLAG_RCORE_POR : 1; /*!< [20..20] Rcore POR OK Flag */ + __IM uint32_t FLAG_SEN_DVDD_POR : 1; /*!< [21..21] SEN DVDD Por OK flag */ + __IM uint32_t FLAG_ADCSEN_LDO : 1; /*!< [22..22] ADCSEN LDO OK flag */ + __IM uint32_t FLAG_DPLL_LDO : 1; /*!< [23..23] DPLL LDO OK flag */ + __IOM uint32_t DCDC_ST_CTRL_4_0 : 5; /*!< [28..24] DCDC_ST_CTRL[4:0] default */ + __IOM uint32_t DCDC_ST_BYP : 1; /*!< [29..29] DCDC_ST_BYP bit */ + uint32_t : 2; + } ULDO_CONT_REG_b; + }; + __IM uint32_t RESERVED7; + + union + { + __IOM uint32_t BOR_CIRCUIT_REG; /*!< (@ 0x0000014C) BOR circuit */ + + struct + { + __IOM uint32_t BL_OUT_CTRL : 4; /*!< [3..0] Black out control : When CTRL is 0, V_HtoL(AVR) : 1.232 + * V_LtoH(AVR) : 1.405 Hysteresis(AVR) : 0.173When CTRL is + * 1, V_HtoL(AVR) : 1.412 V_LtoH(AVR) : 1.516 Hysteresis(AVR) + * : 0.104When CTRL is 2, V_HtoL(AVR) : 1.523 V_LtoH(AVR) + * : 1.619 Hysteresis(AVR) : 0.096 (BlackOut Default)When + * CTRL is 3, V_HtoL(AVR) : 1.618 V_LtoH(AVR) : 1.715 Hysteresis(AVR) + * : 0.097When CTRL is 4, V_HtoL(AVR) : 1.733 V_LtoH(AVR) + * : 1.827 Hysteresis(AVR) : 0.095When CTRL is 5, V_HtoL(AVR) + * : 1.826 V_LtoH(AV */ + __IOM uint32_t BR_OUT_CTRL : 4; /*!< [7..4] Brown out control */ + __IOM uint32_t BL_OUT_EN : 1; /*!< [8..8] Black out enable */ + __IOM uint32_t BR_OUT_EN : 1; /*!< [9..9] Brown out enable */ + __IOM uint32_t RF_LO_CAL_ENABLE : 1; /*!< [10..10] RF LO calibration enable for 5G */ + __IOM uint32_t BL_HYS_CTRL : 1; /*!< [11..11] Black out Hysterisys Control */ + __IOM uint32_t BR_HYS_CTRL : 1; /*!< [12..12] Brown out Hysterisys Control */ + __IM uint32_t BL_STATUS_READ : 1; /*!< [13..13] Black out status read */ + __IM uint32_t BR_STATUS_READ : 1; /*!< [14..14] Brown out status read */ + uint32_t : 17; + } BOR_CIRCUIT_REG_b; + }; + + union + { + __IOM uint32_t TEST_ULDO_SLP_CTRL_REG; /*!< (@ 0x00000150) Test Control register */ + + struct + { + __IOM uint32_t TEST_SEL_8040 : 3; /*!< [2..0] sel_8040 : debug port ? signal out */ + __IOM uint32_t TEST_SENSOR_OUTPUT_MUX_1 : 1; /*!< [3..3] sensor output port mux : 0 : SS_EN auto mode, sensor + * out 1 : SS_EN manual mode, A_FLASH_EN reg_60[7] for SS_EN + * output */ + __IOM uint32_t TEST_SENSOR_OUTPUT_MUX_0 : 1; /*!< [4..4] sensor output port mux : 1 : sensor out 0 : RTC_CNT_OUT + * (boost DCDC control) */ + __IOM uint32_t TEST_DW_WAKE_UP_RST_CTRL : 1; /*!< [5..5] dw_wake_up sub module reset control( reset : low active)default + * : 1 */ + __IOM uint32_t TEST_SS_EN_SEL : 2; /*!< [7..6] SS_EN output selection for testing.00 : RTC_CNT_OUT (default)01 + * : POR - test purpose10 : Brown Out signal - test purpose11 + * : Black Out singal - test purpose */ + __IOM uint32_t ULDO_VCTRL_SLP : 4; /*!< [11..8] uLDO control signal for Sleep mode (default : 4'b1100)when + * sleep mode, this value is applied to uLDO */ + __IOM uint32_t ULDO_HICTRL_SLP : 2; /*!< [13..12] It determines whether the 6uA bleeding current in the + * uLDO is on or off during sleep mode0: Turn off the bleeding + * current during sleep mode.1~3: Turn on the 6uA bleeding + * current during sleep mode. */ + uint32_t : 18; + } TEST_ULDO_SLP_CTRL_REG_b; + }; + + union + { + __IOM uint32_t IP4_FLDO_BG_CONT_REG; /*!< (@ 0x00000154) FLDO BandGap Control register */ + + struct + { + __IOM uint32_t FLDO_VCTRL0 : 1; /*!< [0..0] Flash LDO Voltage Control0 */ + __IOM uint32_t FLDO_VCTRL1 : 1; /*!< [1..1] Flash LDO Voltage Control1 */ + __IOM uint32_t FLDO_VCTRL2 : 1; /*!< [2..2] Flash LDO Voltage Control2 */ + __IOM uint32_t VBG_TRIM0 : 1; /*!< [3..3] VBG Trim0 */ + __IOM uint32_t VBG_TRIM1 : 1; /*!< [4..4] VBG Trim1 */ + __IOM uint32_t VBG_TRIM2 : 1; /*!< [5..5] VBG Trim2 */ + uint32_t : 2; + __IOM uint32_t F_DIO_ST_CTRL : 4; /*!< [11..8] Flash DIO control */ + __IOM uint32_t F_DIO_ST_BYP_EN : 1; /*!< [12..12] Flash DIO Bypass enable */ + uint32_t : 19; + } IP4_FLDO_BG_CONT_REG_b; + }; + + union + { + __IOM uint32_t WAKEUP_SRC_CLR_REG; /*!< (@ 0x00000158) Wakeup source clear signal read register */ + + struct + { + __IM uint32_t WAKEUP_GPIOWKCLR : 1; /*!< [0..0] ExtWkClr */ + __IM uint32_t WAKEUP_EQCLR : 1; /*!< [1..1] EqClr */ + __IM uint32_t WAKEUP_PORCLR : 1; /*!< [2..2] PorClr */ + __IM uint32_t WAKEUP_WATCHDOGCLR : 1; /*!< [3..3] WatchDogClr */ + __IM uint32_t WAKEUP_SENSOR_DETECT_CLEAR : 1; /*!< [4..4] sensor detect clear */ + __IM uint32_t WAKEUP_PULSE_CNT_DETECT_CLEAR : 1; /*!< [5..5] pulse cnt detect clear */ + __IM uint32_t WAKEUP_TIMER_IRQ_DETECT_CLEAR : 1; /*!< [6..6] timers irq detect clear */ + uint32_t : 25; + } WAKEUP_SRC_CLR_REG_b; + }; + + union + { + __IOM uint32_t WDOG_CNT_BIT_POS_REG; /*!< (@ 0x0000015C) Watchdog Counter bit position register */ + + struct + { + __IOM uint32_t FRC35_14_BIT_SEL : 5; /*!< [4..0] FRC[35:14] bit selection */ + __IM uint32_t WATCHDOG_CNT_READ_VAL : 2; /*!< [6..5] WatchDog Count read value */ + uint32_t : 25; + } WDOG_CNT_BIT_POS_REG_b; + }; + + union + { + __IOM uint32_t XADC12_CNTL_REG; /*!< (@ 0x00000160) AuxADC12 Control register */ + + struct + { + __IOM uint32_t AUXADC12_RESET : 1; /*!< [0..0] AuxADC12_RESET */ + __IOM uint32_t AUXADC12_PDB : 1; /*!< [1..1] AuxADC12_PDB */ + uint32_t : 2; + __IOM uint32_t AUXADC12_TRIM : 3; /*!< [6..4] AuxADC12_TRIM [2:0] */ + __IOM uint32_t SS_EN_OUTPUT_VAL : 1; /*!< [7..7] SS_EN output value @Test Control[4] */ + __IOM uint32_t AUXADC12_ICOMP : 2; /*!< [9..8] AuxADC12_ICOMP [1:0] */ + __IOM uint32_t AUXADC12_ICOMPS : 2; /*!< [11..10] AuxADC12_ICOMPS [1:0] */ + __IOM uint32_t AUXADC12_IVREF : 2; /*!< [13..12] AuxADC12_IVREF [1:0] */ + __IOM uint32_t AUXADC12_BITNUM : 2; /*!< [15..14] AuxADC12_BITNUM [1:0] */ + uint32_t : 16; + } XADC12_CNTL_REG_b; + }; + + union + { + __IOM uint32_t XADC12_THR01_REG; /*!< (@ 0x00000164) AuxADC12 Threshold Level2 register */ + + struct + { + __IOM uint32_t XADC12_THR_LEVEL0_CH0 : 12; /*!< [11..0] Threshold Level0[11:0] for Channel-0 */ + __IOM uint32_t XADC12_THR_CONFIG_CH0 : 2; /*!< [13..12] Threshold mode selection00: Over threshold01: Under + * threshold10: Different threshold */ + uint32_t : 2; + __IOM uint32_t XADC12_THR_LEVEL1_CH2 : 12; /*!< [27..16] Threshold Level1[11:0] for Channel-1 */ + __IOM uint32_t XADC12_THR_CONFIG_CH1 : 2; /*!< [29..28] Threshold mode selection00: Over threshold01: Under + * threshold10: Different threshold */ + uint32_t : 2; + } XADC12_THR01_REG_b; + }; + + union + { + __IOM uint32_t XADC12_THR23_REG; /*!< (@ 0x00000168) AuxADC12 Threshold Level1 register */ + + struct + { + __IOM uint32_t XADC12_THR_LEVEL2_CH2 : 12; /*!< [11..0] Threshold Level2[11:0] for Channel-2 */ + __IOM uint32_t XADC12_THR_CONFIG_CH2 : 2; /*!< [13..12] Threshold mode selection00: Over threshold01: Under + * threshold10: Different threshold */ + uint32_t : 2; + __IOM uint32_t XADC12_THR_LEVEL3_CH3 : 12; /*!< [27..16] Threshold Level3[11:0] for Channel-3 */ + __IOM uint32_t XADC12_THR_CONFIG_CH3 : 2; /*!< [29..28] Threshold mode selection00: Over threshold01: Under + * threshold10: Different threshold */ + uint32_t : 2; + } XADC12_THR23_REG_b; + }; + + union + { + __IOM uint32_t XADC12_SP_NUM_REG; /*!< (@ 0x0000016C) AuxADC12 Sample Number regster */ + + struct + { + __IOM uint32_t ADC_SMLP_NUM_AVR : 3; /*!< [2..0] sample number for average (sample count = 2n+2) 000 = + * 4-sample processing 001 = 8-sample processing 111 = 512-sample + * processing */ + __IOM uint32_t ADC_SAMPLE_RANGE_SEL : 5; /*!< [7..3] ADC sample select range - value of ADC data summation + * in any timing range */ + uint32_t : 24; + } XADC12_SP_NUM_REG_b; + }; + + union + { + __IOM uint32_t XADC12_TIMER_SET_REG; /*!< (@ 0x00000170) AuxADC12 Timer Set register */ + + struct + { + __IOM uint32_t AX12B_TIMER_VAL : 4; /*!< [3..0] REG_AX12B_TIMER_SET[3:0] Timer value (main_cnt) - periodic + * cycle = X12_Clk x main_cnt - valid range = 0x0 ~ 0xF, max + * value = 0xF @bit[6:4] 3'b000 : range = 7.8 ~ 124.8msec + * 3'b001 : range = 15.6 ~ 250.0msec 3'b010 : range = 62.5 + * ~ 1000.0msec 3'b011 : range = 250 ~ 4,000msec 3'b100 : + * range = 1,000 ~ 16,000msec 3'b101 : range = 4,000 ~ 64,000msec + * (max. 64sec) 3'b110 : range = 16,000 ~ 256,000msec (max. + * 4.2min) 3'b111 : range = */ + __IOM uint32_t X12_CLK_TMR_CNT_SRC : 3; /*!< [6..4] X12_Clk : timer count clock source (base = 32.768KHz) + * 3'b000 = 7.81-msec period 3'b001 = 31.25-msec period 3'b010 + * = 62.5-msec period 3'b011 = 250-msec period 3'b100 = 1000-msec + * period 3'b101 = 4000-msec period 3'b110 = 16000-msec period + * 3'b111 = 64,000-msec period */ + __IOM uint32_t SENSOR_DETECT_ACT : 1; /*!< [7..7] Sensor detect activate 1 = Sensor mode enable 0 = Normal + * mode */ + __IOM uint32_t IP3_ACTIVATE_TMR_VAL : 6; /*!< [13..8] IP3_ACTIVATE timer value : IP3 Power on time (sub_cnt) + * : delta T = N x X12_Clk + 8/32.768KHz x sub_cnt valid range + * = 0x00 ~ 0x3B, max. = 0x3B */ + uint32_t : 2; + __IOM uint32_t EXT_SEN_ACTIVATE_TMR_VAL : 4; /*!< [19..16] EXT_SEN_ACTIVATE timer value : External sensor on time + * : should be set under REG_AX12B_TIMER_SET[3:0] value valid + * range N = 0x0 ~ 0xE, max. = 0xE */ + uint32_t : 4; + __IOM uint32_t ASWCH_CTRL : 5; /*!< [28..24] ASWCH_CTRL [28] : Auto-switch activate [27:24] : channel + * selection [27]=Ch-3, [26]=Ch-2, [25]=Ch-1, [24]=Ch-0 */ + uint32_t : 3; + } XADC12_TIMER_SET_REG_b; + }; + + union + { + __IOM uint32_t COMP_INT_REG; /*!< (@ 0x00000174) Compare Interrupt register */ + + struct + { + __IOM uint32_t OSC_15M_ENABLE : 1; /*!< [0..0] OSC_15Mhz Enable : default enable 1due to prevent glitch + * attack, OSC15Mhz turns on by HW. */ + __IOM uint32_t CNT_ENABLE : 1; /*!< [1..1] Pulse counter Enable */ + __IOM uint32_t CNT_RST : 1; /*!< [2..2] Pulse counter Reset */ + __IOM uint32_t EDGE_SEL : 1; /*!< [3..3] count up edge 0: rising 1: falling */ + __IOM uint32_t G_FILTER_EN : 1; /*!< [4..4] ignore short glitch0: disable1: enable */ + uint32_t : 3; + __IOM uint32_t G_FILTER_THR : 5; /*!< [12..8] filtering threshold */ + uint32_t : 1; + __IOM uint32_t INT_EN : 1; /*!< [14..14] Interrupt Enable 0: disable 1: enable */ + __IOM uint32_t INT_CLR : 1; /*!< [15..15] Interrupt clear */ + __IOM uint32_t PULSE_SELECT : 4; /*!< [19..16] Input source Selection for PulseCnt0 : GPIO_P0_001 + * : GPIO_P0_082 : GPIO_P0_093 : GPIO_P0_104 : GPIO_P0_115 + * : GPIO_P0_126 : GPIO_P0_137 : GPIO_P1_108 : GPIO_P1_119 + * : GPIO_P1_1210 : GPIO_P1_13 */ + __IOM uint32_t CLK_SEL : 1; /*!< [20..20] Pulse counter operation clock select bit0 : 32Khz1 + * : 15Mhz */ + uint32_t : 2; + __IM uint32_t COMPINT : 1; /*!< [23..23] Interrtup threshold ? Counter Compare Value */ + uint32_t : 8; + } COMP_INT_REG_b; + }; + + union + { + __IOM uint32_t INT_THR_REG; /*!< (@ 0x00000178) Interrupt Threshold register */ + + struct + { + __IOM uint32_t INT_THR : 32; /*!< [31..0] Interrupt threshold */ + } INT_THR_REG_b; + }; + + union + { + __IOM uint32_t PULSE_CNT_REG; /*!< (@ 0x0000017C) Pulse Counter register */ + + struct + { + __IM uint32_t PULSE_CNT : 32; /*!< [31..0] counter value at the present */ + } PULSE_CNT_REG_b; + }; +} RTC_Type; /*!< Size = 384 (0x180) */ + +/* =========================================================================================================================== */ +/* ================ SDEMMC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SDEMMC registers (SDEMMC) + */ + +typedef struct /*!< (@ 0x40011000) SDEMMC Structure */ +{ + union + { + __IOM uint32_t SDEMMC_SDMA_SYS_ADDR__ARGU_2_REG; /*!< (@ 0x00000000) SDEMMC_SDMA_SYSTEM_ADDRESS_ARGUMENT2_REG : SDMA_System_Address_ + * rgument2 */ + + struct + { + __IOM uint32_t SDMA_System_Address_Argument2 : 32; /*!< [31..0] This register contains the physical system memoryaddress + * used for DMA transfers or the second argument for the Auto + * CMD23.(1) SDMA System AddressThis register contains the + * system memory address fora SDMA transfer. When the Host + * Controller stops aSDMA transfer, this register shall point + * to the systemaddress of the next contiguous data position. + * It canbe accessed only if no transaction is executing (i.e.,after + * a transaction has stopped). Read operationsduring transfers + * m */ + } SDEMMC_SDMA_SYS_ADDR__ARGU_2_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_BLOCK_REG; /*!< (@ 0x00000004) SDEMMC_BLOCK_REG : BlockSize_BlockCount */ + + struct + { + __IOM uint32_t TransferBlockSize : 12; /*!< [11..0] This register specifies the block size for block datatransfers + * for CMD17, CMD18, CMD24, CMD25, andCMD53. It can be accessed + * only if no transaction isexecuting (i.e after a transaction + * has stopped). Readoperations during transfer return an + * invalid value andwrite operations shall be ignored.0000h + * - No Data Transfer0001h - 1 Byte0002h - 2 Bytes0003h - + * 3 Bytes0004h - 4 Bytes--- ---01FFh - 511 Bytes0200h - 512 + * Bytes--- ---0800h - 2048 Bytes */ + __IOM uint32_t HostSDMABufferBoundry : 3; /*!< [14..12] To perform long DMA transfer, System Address register + * shall be updated at every system boundary during DMA transfer. + * These bits specify the size ofcontiguous buffer in the + * system memory. The DMAtransfer shall wait at the every + * boundary specified bythese fields and the HC generates + * the DMA Interruptto request the HD to update the System + * Address register.These bits shall support when the DMA + * Support inthe Capabilities register is set to 1 and this + * function isactive when the DMA */ + uint32_t : 1; + __IOM uint32_t BlockCountForCurrentTransfer : 16; /*!< [31..16] This register is enabled whenBlock Count Enable in + * the Transfer Mode register is set to 1 andis valid only + * for multiple blocktransfers. The HC decrementsthe block + * count after each blocktransfer and stops when thecount + * reaches zero. It can beaccessed only if no transaction + * isexecuting (i.e. after a transactionhas stopped). Read + * operationsduring transfer return an invalidvalue and write + * operations shallbe ignored.When saving transfer context + * asa resul */ + } SDEMMC_BLOCK_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC__ARGU_1_REG; /*!< (@ 0x00000008) SDEMMC_ARGUMENT1_REG : Argument1 */ + + struct + { + __IOM uint32_t Argument1 : 32; /*!< [31..0] The SD Command Argument isspecified as bit39-8 of Command-Format. */ + } SDEMMC__ARGU_1_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_TRANSFERMODE_COMMAND_REG; /*!< (@ 0x0000000C) SDEMMC_TRANSFERMODE_COMMAND_REG : TransferMode_Command */ + + struct + { + __IOM uint32_t DMAEnable : 1; /*!< [0..0] DMA can be enabled only if DMA Support bit in theCapabilities + * register is set. If this bit is set to 1, a DMAoperation + * shall begin when the HD writes to the upperbyte of Command + * register (00Fh).0 - Disable1 - Enable */ + __IOM uint32_t BlockCountEnable : 1; /*!< [1..1] This bit is used to enable the Block count register, + * whichis only relevant for multiple block transfers. When + * this bitis 0, the Block Count register is disabled, which + * is usefulin executing an infinite transfer.0 - Disable1 + * - Enable */ + __IOM uint32_t AutoCMDEnable : 2; /*!< [3..2] This field determines use of auto command functions00b + * - Auto Command Disabled01b - Auto CMD12 Enable10b - Auto + * CMD23 Enable11b - ReservedThere are two methods to stop + * Multiple-block read andwrite operation.(1) Auto CMD12 EnableMultiple-bloc + * read and write commands for memoryrequire CMD12 to stop + * the operation. When this field isset to 01b, the Host Controller + * issues CMD12 automatically when last block transfer is + * completed. Auto CMD12error is indicated to the */ + __IOM uint32_t DataTransferDirectionSelect : 1; /*!< [4..4] This bit defines the direction of data transfers.0 - + * Write (Host to Card)1 - Read (Card to Host) */ + __IOM uint32_t MultiSingleBlockSelect : 1; /*!< [5..5] This bit enables multiple block data transfers.0 - Single + * Block1 - Multiple Block */ + uint32_t : 10; + __IOM uint32_t ResponseTypeSelect : 2; /*!< [17..16] Response Type Select00 - No Response01 - Response length + * 13610 - Response length 4811 - Response length 48 checkBusy + * after response */ + uint32_t : 1; + __IOM uint32_t CommandCRCCheckEnable : 1; /*!< [19..19] If this bit is set to 1, the HC shallcheck the CRC + * field in theresponse. If an error is detected, itis reported + * as a Command CRCError. If this bit is set to 0, the CRCfield + * is not checked.0 - Disable1 - Enabl */ + __IOM uint32_t CommandIndexCheckEnable : 1; /*!< [20..20] If this bit is set to 1, the HC shallcheck the index + * field in theresponse to see if it has the samevalue as + * the command index. If it isnot, it is reported as a CommandIndex + * Error. If this bit is set to 0, theIndex field is not checked.0 + * - Disable1 - Enable */ + __IOM uint32_t DataPresentSelect : 1; /*!< [21..21] This bit is set to 1 to indicate thatdata is present + * and shall be transferred using the DAT line. If is setto + * 0 for the following:1. Commands using only CMD line(ex. + * CMD52)2. Commands with no data transferbut using busy signal + * on DAT[0]line (R1b or R5b ex. CMD38)3. Resume Command0 + * - No Data Present1 - Data Present */ + uint32_t : 1; + __IOM uint32_t CommandType : 1; /*!< [23..23] There are three types of specialcommands. Suspend, + * Resume andAbort. These bits shall bet set to00b for all + * other commands.Suspend CommandIf the Suspend command succeeds, + * the HC shall assume theSD Bus has been released andthat + * it is possible to issue the nextcommand which uses the + * DAT line.The HC shall de-assert Read Waitfor read transactions + * and stopchecking busy for write transactions. The Interrupt + * cycle shallstart, in 4-bit mode. If the Suspendcomman */ + __IOM uint32_t CommandIndex : 6; /*!< [29..24] This bit shall be set to the command number (CMD0-63, + * ACMD0-63) */ + uint32_t : 2; + } SDEMMC_TRANSFERMODE_COMMAND_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_RESPONSE0_REG; /*!< (@ 0x00000010) SDEMMC_RESPONSE0_REG : Response */ + + struct + { + __IM uint32_t Reponse0 : 32; /*!< [31..0] Reponse0 */ + } SDEMMC_RESPONSE0_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_RESPONSE1_REG; /*!< (@ 0x00000014) SDEMMC_RESPONSE1_REG : Response */ + + struct + { + __IM uint32_t Reponse1 : 32; /*!< [31..0] Reponse1 */ + } SDEMMC_RESPONSE1_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_RESPONSE2_REG; /*!< (@ 0x00000018) SDEMMC_RESPONSE2_REG : Response */ + + struct + { + __IM uint32_t Reponse2 : 32; /*!< [31..0] Reponse2 */ + } SDEMMC_RESPONSE2_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_RESPONSE3_REG; /*!< (@ 0x0000001C) SDEMMC_RESPONSE3_REG : Response */ + + struct + { + __IM uint32_t Reponse3 : 32; /*!< [31..0] Reponse3 */ + } SDEMMC_RESPONSE3_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_BUFFERDATAPORT_REG; /*!< (@ 0x00000020) SDEMMC_BUFFERDATAPORT_REG : BufferDataPort */ + + struct + { + __IOM uint32_t BufferData : 32; /*!< [31..0] BufferData */ + } SDEMMC_BUFFERDATAPORT_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_PRESENTSTATE_REG; /*!< (@ 0x00000024) SDEMMC_PRESENTSTATE_REG : PresentState */ + + struct + { + __IM uint32_t CommandInhibitCMD : 1; /*!< [0..0] CommandInhibitCMD */ + __IM uint32_t CommandInhibitDAT : 1; /*!< [1..1] CommandInhibitDAT */ + __IM uint32_t DATLineActive : 1; /*!< [2..2] DATLineActive */ + __IM uint32_t ReTuningRequest : 1; /*!< [3..3] ReTuningRequest */ + uint32_t : 4; + __IM uint32_t WriteTransferActive : 1; /*!< [8..8] WriteTransferActive */ + __IM uint32_t ReadTransferActive : 1; /*!< [9..9] ReadTransferActive */ + __IM uint32_t BufferWriteEnable : 1; /*!< [10..10] BufferWriteEnable */ + __IM uint32_t BufferReadEnable : 1; /*!< [11..11] BufferReadEnable */ + uint32_t : 4; + __IM uint32_t CardInserted : 1; /*!< [16..16] CardInserted */ + __IM uint32_t CardStateStable : 1; /*!< [17..17] CardStateStable */ + __IM uint32_t CardDetectPinLevel : 1; /*!< [18..18] CardDetectPinLevel */ + __IM uint32_t WriteProtectSwitchPinLevel : 1; /*!< [19..19] WriteProtectSwitchPinLevel */ + __IM uint32_t DAT3TO0LineSignalLevel : 4; /*!< [23..20] DAT3TO0LineSignalLevel */ + __IM uint32_t CMDLineSignalLevel : 1; /*!< [24..24] CMDLineSignalLevel */ + uint32_t : 7; + } SDEMMC_PRESENTSTATE_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_HOST_CTRL_1_REG; /*!< (@ 0x00000028) SDEMMC_HOSTCONTROL1_REG : HostControl1 */ + + struct + { + __IOM uint32_t LEDControl : 1; /*!< [0..0] LEDControl */ + __IOM uint32_t DataTransferWidth : 1; /*!< [1..1] DataTransferWidth */ + __IOM uint32_t HighSpeedEnable : 1; /*!< [2..2] HighSpeedEnable */ + __IOM uint32_t DMASelect : 2; /*!< [4..3] DMASelect */ + __IOM uint32_t ExtendedDataTransferWidth : 1; /*!< [5..5] ExtendedDataTransferWidth */ + __IOM uint32_t CardDetectTestLevel : 1; /*!< [6..6] CardDetectTestLevel */ + __IOM uint32_t CardDetectSignalSelection : 1; /*!< [7..7] CardDetectSignalSelection */ + __IOM uint32_t SDBusPower : 1; /*!< [8..8] SDBusPower */ + __IOM uint32_t SDBusVoltageSelect : 3; /*!< [11..9] SDBusVoltageSelect */ + __IOM uint32_t HardwareRst : 1; /*!< [12..12] HardwareRst */ + uint32_t : 3; + __IOM uint32_t StopAtBlockGapRequest : 1; /*!< [16..16] StopAtBlockGapRequest */ + __IOM uint32_t ContinueRequest : 1; /*!< [17..17] ContinueRequest */ + __IOM uint32_t ReadWaitControl : 1; /*!< [18..18] ReadWaitControl */ + __IOM uint32_t InterruptAtBlockGap : 1; /*!< [19..19] InterruptAtBlockGap */ + __IOM uint32_t SpiMode : 1; /*!< [20..20] SpiMode */ + __IOM uint32_t BootEn : 1; /*!< [21..21] BootEn */ + __IOM uint32_t AltBootEn : 1; /*!< [22..22] AltBootEn */ + __IOM uint32_t BootAckChk : 1; /*!< [23..23] BootAckChk */ + __IOM uint32_t WakeupEventEnableOnCardInterrupt : 1; /*!< [24..24] WakeupEventEnableOnCardInterrupt */ + __IOM uint32_t WakeupEventEnableOnSDCardInsertion : 1; /*!< [25..25] WakeupEventEnableOnSDCardInsertion */ + __IOM uint32_t WakeupEventEnableOnSDCardRemoval : 1; /*!< [26..26] WakeupEventEnableOnSDCardRemoval */ + uint32_t : 5; + } SDEMMC_HOST_CTRL_1_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC__CLK__CTRL__REG; /*!< (@ 0x0000002C) SDEMMC_CLOCKCONTROL_REG : ClockControl */ + + struct + { + __IOM uint32_t InternalClockEnable : 1; /*!< [0..0] InternalClockEnable */ + __IM uint32_t InternalClockStable : 1; /*!< [1..1] InternalClockStable */ + __IOM uint32_t SDClockEnable : 1; /*!< [2..2] SDClockEnable */ + uint32_t : 2; + __IOM uint32_t ClockGeneratorSelect : 1; /*!< [5..5] ClockGeneratorSelect */ + __IOM uint32_t UpperBitsofSDCLKFrequencySelect : 2; /*!< [7..6] UpperBitsofSDCLKFrequencySelect */ + __IOM uint32_t SDCLKFrequencySelect : 8; /*!< [15..8] SDCLKFrequencySelect */ + __IOM uint32_t DataTimeoutCounterValue : 4; /*!< [19..16] DataTimeoutCounterValue */ + uint32_t : 4; + __IOM uint32_t SoftwareResetForAll : 1; /*!< [24..24] SoftwareResetForAll */ + __IOM uint32_t SoftwareResetForCMDLine : 1; /*!< [25..25] SoftwareResetForCMDLine */ + __IOM uint32_t SoftwareResetForDATLine : 1; /*!< [26..26] SoftwareResetForDATLine */ + uint32_t : 5; + } SDEMMC__CLK__CTRL__REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_NORMAL_ITNR_STATUS_REG; /*!< (@ 0x00000030) SDEMMC_NORMALINTERRUPTSTATUS_REG : NormalInterruptStatus */ + + struct + { + __IOM uint32_t CommandComplete : 1; /*!< [0..0] CommandComplete */ + __IOM uint32_t TransferComplete : 1; /*!< [1..1] TransferComplete */ + __IOM uint32_t BlockGapEvent : 1; /*!< [2..2] BlockGapEvent */ + __IOM uint32_t DMAInterrupt : 1; /*!< [3..3] DMAInterrupt */ + __IOM uint32_t BufferWriteReady : 1; /*!< [4..4] BufferWriteReady */ + __IOM uint32_t BufferReadReady : 1; /*!< [5..5] BufferReadReady */ + __IOM uint32_t CardInsertion : 1; /*!< [6..6] CardInsertion */ + __IOM uint32_t CardRemoval : 1; /*!< [7..7] CardRemoval */ + __IM uint32_t CardInterrupt : 1; /*!< [8..8] CardInterrupt */ + __IM uint32_t INT_A : 1; /*!< [9..9] INT_A */ + __IM uint32_t INT_B : 1; /*!< [10..10] INT_B */ + __IM uint32_t INT_C : 1; /*!< [11..11] INT_C */ + __IM uint32_t ReTuningEvent : 1; /*!< [12..12] ReTuningEvent */ + __IM uint32_t BootAckRcv : 1; /*!< [13..13] BootAckRcv */ + __IM uint32_t BootTerminateInterrupt : 1; /*!< [14..14] BootTerminateInterrupt */ + __IM uint32_t ErrorInterrupt : 1; /*!< [15..15] ErrorInterrupt */ + __IOM uint32_t CommandTimeoutError : 1; /*!< [16..16] CommandTimeoutError */ + __IOM uint32_t CommandCRCError : 1; /*!< [17..17] CommandCRCError */ + __IOM uint32_t CommandEndBitError : 1; /*!< [18..18] CommandEndBitError */ + __IOM uint32_t CommandIndexError : 1; /*!< [19..19] CommandIndexError */ + __IOM uint32_t DataTimeoutError : 1; /*!< [20..20] DataTimeoutError */ + __IOM uint32_t DataCRCError : 1; /*!< [21..21] DataCRCError */ + __IOM uint32_t DataEndBitError : 1; /*!< [22..22] DataEndBitError */ + __IOM uint32_t CurrentLimitError : 1; /*!< [23..23] CurrentLimitError */ + __IOM uint32_t AutoCMDError : 1; /*!< [24..24] AutoCMDError */ + __IOM uint32_t ADMAError : 1; /*!< [25..25] ADMAError */ + __IOM uint32_t TuningError : 1; /*!< [26..26] TuningError */ + __IOM uint32_t VendorSpecificError : 5; /*!< [31..27] VendorSpecificError */ + } SDEMMC_NORMAL_ITNR_STATUS_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_NORMAL_ITNR_STATUS_EN_REG; /*!< (@ 0x00000034) SDEMMC_NORMALINTERRUPTSTATUSENABLE_REG : NormalInterruptStatusE + * able */ + + struct + { + __IOM uint32_t CommandCompleteStatusEnb : 1; /*!< [0..0] CommandCompleteStatusEnb */ + __IOM uint32_t TransferCompleteStatusEnb : 1; /*!< [1..1] TransferCompleteStatusEnb */ + __IOM uint32_t BlockGapEventStatusEnb : 1; /*!< [2..2] BlockGapEventStatusEnb */ + __IOM uint32_t DMAInterruptStatusEnb : 1; /*!< [3..3] DMAInterruptStatusEnb */ + __IOM uint32_t BufferWriteReadyStatusEnb : 1; /*!< [4..4] BufferWriteReadyStatusEnb */ + __IOM uint32_t BufferReadReadyStatusEnb : 1; /*!< [5..5] BufferReadReadyStatusEnb */ + __IOM uint32_t CardInsertionStatusEnb : 1; /*!< [6..6] CardInsertionStatusEnb */ + __IOM uint32_t CardRemovalStatusEnb : 1; /*!< [7..7] CardRemovalStatusEnb */ + __IOM uint32_t CardInterruptStatusEnb : 1; /*!< [8..8] CardInterruptStatusEnb */ + __IOM uint32_t INT_AStatusEnb : 1; /*!< [9..9] INT_AStatusEnb */ + __IOM uint32_t INT_BStatusEnb : 1; /*!< [10..10] INT_BStatusEnb */ + __IOM uint32_t INT_CStatusEnb : 1; /*!< [11..11] INT_CStatusEnb */ + __IOM uint32_t ReTuningEventStatusEnable : 1; /*!< [12..12] ReTuningEventStatusEnable */ + __IOM uint32_t BootAckRcvStatusEnb : 1; /*!< [13..13] BootAckRcvStatusEnb */ + __IOM uint32_t BootTerminateInterruptStatusEnb : 1; /*!< [14..14] BootTerminateInterruptStatusEnb */ + __IM uint32_t FixedTo0 : 1; /*!< [15..15] FixedTo0 */ + __IOM uint32_t CommandTimeoutErrorStatusEnb : 1; /*!< [16..16] CommandTimeoutErrorStatusEnb */ + __IOM uint32_t CommandCRCErrorStatusEnb : 1; /*!< [17..17] CommandCRCErrorStatusEnb */ + __IOM uint32_t CommandEndBitErrorStatusEnb : 1; /*!< [18..18] CommandEndBitErrorStatusEnb */ + __IOM uint32_t CommandIndexErrorStatusEnb : 1; /*!< [19..19] CommandIndexErrorStatusEnb */ + __IOM uint32_t DataTimeoutErrorStatusEnb : 1; /*!< [20..20] DataTimeoutErrorStatusEnb */ + __IOM uint32_t DataCRCErrorStatusEnb : 1; /*!< [21..21] DataCRCErrorStatusEnb */ + __IOM uint32_t DataEndBitErrorStatusEnb : 1; /*!< [22..22] DataEndBitErrorStatusEnb */ + __IOM uint32_t CurrentLimitErrorStatusEnb : 1; /*!< [23..23] CurrentLimitErrorStatusEnb */ + __IOM uint32_t AutoCMDErrorStatusEnb : 1; /*!< [24..24] AutoCMDErrorStatusEnb */ + __IOM uint32_t ADMAErrorStatusEnb : 1; /*!< [25..25] ADMAErrorStatusEnb */ + __IOM uint32_t TuningErrorStatusEnb : 1; /*!< [26..26] TuningErrorStatusEnb */ + __IOM uint32_t VendorSpecificErrorStatusEnb : 5; /*!< [31..27] VendorSpecificErrorStatusEnb */ + } SDEMMC_NORMAL_ITNR_STATUS_EN_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG; /*!< (@ 0x00000038) SDEMMC_NORMALINTERRUPTSIGNALENABLE_REG : NormalInterruptSignalE + * able */ + + struct + { + __IOM uint32_t CommandCompleteSignalEnb : 1; /*!< [0..0] CommandCompleteSignalEnb */ + __IOM uint32_t TransferCompleteSignalEnb : 1; /*!< [1..1] TransferCompleteSignalEnb */ + __IOM uint32_t BlockGapEventSignalEnb : 1; /*!< [2..2] BlockGapEventSignalEnb */ + __IOM uint32_t DMAInterruptSignalEnb : 1; /*!< [3..3] DMAInterruptSignalEnb */ + __IOM uint32_t BufferWriteReadySignalEnb : 1; /*!< [4..4] BufferWriteReadySignalEnb */ + __IOM uint32_t BufferReadReadySignalEnb : 1; /*!< [5..5] BufferReadReadySignalEnb */ + __IOM uint32_t CardInsertionSignalEnb : 1; /*!< [6..6] CardInsertionSignalEnb */ + __IOM uint32_t CardRemovalSignalEnb : 1; /*!< [7..7] CardRemovalSignalEnb */ + __IOM uint32_t CardInterruptSignalEnb : 1; /*!< [8..8] CardInterruptSignalEnb */ + __IOM uint32_t INT_ASignalEnb : 1; /*!< [9..9] INT_ASignalEnb */ + __IOM uint32_t INT_BSignalEnb : 1; /*!< [10..10] INT_BSignalEnb */ + __IOM uint32_t INT_CSignalEnb : 1; /*!< [11..11] INT_CSignalEnb */ + __IOM uint32_t ReTuningEventSignalEnable : 1; /*!< [12..12] ReTuningEventSignalEnable */ + __IOM uint32_t BootAckRcvSignalEnable : 1; /*!< [13..13] BootAckRcvSignalEnable */ + __IOM uint32_t BootTerminateInterruptSignalEnable : 1; /*!< [14..14] BootTerminateInterruptSignalEnable */ + __IM uint32_t FixedTo0 : 1; /*!< [15..15] FixedTo0 */ + __IOM uint32_t CommandTimeoutErrorSignalEnb : 1; /*!< [16..16] CommandTimeoutErrorSignalEnb */ + __IOM uint32_t CommandCRCErrorSignalEnb : 1; /*!< [17..17] CommandCRCErrorSignalEnb */ + __IOM uint32_t CommandEndBitErrorSignalEnb : 1; /*!< [18..18] CommandEndBitErrorSignalEnb */ + __IOM uint32_t CommandIndexErrorSignalEnb : 1; /*!< [19..19] CommandIndexErrorSignalEnb */ + __IOM uint32_t DataTimeoutErrorSignalEnb : 1; /*!< [20..20] DataTimeoutErrorSignalEnb */ + __IOM uint32_t DataCRCErrorSignalEnb : 1; /*!< [21..21] DataCRCErrorSignalEnb */ + __IOM uint32_t DataEndBitErrorSignalEnb : 1; /*!< [22..22] DataEndBitErrorSignalEnb */ + __IOM uint32_t CurrentLimitErrorSignalEnb : 1; /*!< [23..23] CurrentLimitErrorSignalEnb */ + __IOM uint32_t AutoCMDErrorSignalEnb : 1; /*!< [24..24] AutoCMDErrorSignalEnb */ + __IOM uint32_t ADMAErrorSignalEnb : 1; /*!< [25..25] ADMAErrorSignalEnb */ + __IOM uint32_t TuningErrorSignalEnb : 1; /*!< [26..26] TuningErrorSignalEnb */ + __IOM uint32_t VendorSpecificErrorSignalEnb : 5; /*!< [31..27] VendorSpecificErrorSignalEnb */ + } SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_AUTOCMDERRORSTATUS_REG; /*!< (@ 0x0000003C) SDEMMC_AUTOCMDERRORSTATUS_REG : AutoCMDErrorStatus */ + + struct + { + __IM uint32_t AutoCMD12NotExecuted : 1; /*!< [0..0] AutoCMD12NotExecuted */ + __IM uint32_t AutoCMDTimeoutError : 1; /*!< [1..1] AutoCMDTimeoutError */ + __IM uint32_t AutoCMDCRCError : 1; /*!< [2..2] AutoCMDCRCError */ + __IM uint32_t AutoCMDEndBitError : 1; /*!< [3..3] AutoCMDEndBitError */ + __IM uint32_t AutoCMDIndexError : 1; /*!< [4..4] AutoCMDIndexError */ + uint32_t : 2; + __IM uint32_t CommandNotIssuedByAutoCMD12Error : 1; /*!< [7..7] CommandNotIssuedByAutoCMD12Error */ + uint32_t : 8; + __IOM uint32_t UHSModeSelect : 3; /*!< [18..16] UHSModeSelect */ + __IOM uint32_t SignalingEnable1_8V : 1; /*!< [19..19] SignalingEnable1_8V */ + __IOM uint32_t DriveStrengthSelect : 2; /*!< [21..20] DriveStrengthSelect */ + __IOM uint32_t ExecuteTuning : 1; /*!< [22..22] ExecuteTuning */ + __IOM uint32_t SamplingClockSelect : 1; /*!< [23..23] SamplingClockSelect */ + uint32_t : 6; + __IOM uint32_t AsynchronousInterruptEnable : 1; /*!< [30..30] AsynchronousInterruptEnable */ + __IOM uint32_t PresetValueEnable : 1; /*!< [31..31] PresetValueEnable */ + } SDEMMC_AUTOCMDERRORSTATUS_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_CAPABILITIES0_REG; /*!< (@ 0x00000040) SDEMMC_CAPABILITIES0_REG : Capabilities0 */ + + struct + { + __IM uint32_t TimeoutClockFrequency : 6; /*!< [5..0] TimeoutClockFrequency */ + uint32_t : 1; + __IM uint32_t TimeoutClockUnit : 1; /*!< [7..7] TimeoutClockUnit */ + __IM uint32_t BaseClockFrequencyForSDClock : 8; /*!< [15..8] BaseClockFrequencyForSDClock */ + __IM uint32_t MaxBlockLength : 2; /*!< [17..16] MaxBlockLength */ + __IM uint32_t SupportforEmbeddedDevice8bit : 1; /*!< [18..18] SupportforEmbeddedDevice8bit */ + __IM uint32_t ADMA2Support : 1; /*!< [19..19] ADMA2Support */ + uint32_t : 1; + __IM uint32_t HighSpeedSupport : 1; /*!< [21..21] HighSpeedSupport */ + __IM uint32_t SDMASupport : 1; /*!< [22..22] SDMASupport */ + __IM uint32_t SuspendResumeSupport : 1; /*!< [23..23] SuspendResumeSupport */ + __IM uint32_t VoltageSupport33V : 1; /*!< [24..24] VoltageSupport33V */ + __IM uint32_t VoltageSupport30V : 1; /*!< [25..25] VoltageSupport30V */ + __IM uint32_t VoltageSupport18V : 1; /*!< [26..26] VoltageSupport18V */ + uint32_t : 1; + __IM uint32_t SystemBusSupport64bit : 1; /*!< [28..28] SystemBusSupport64bit */ + __IM uint32_t AsynchronousInterruptSupport : 1; /*!< [29..29] AsynchronousInterruptSupport */ + __IM uint32_t SlotType : 2; /*!< [31..30] SlotType */ + } SDEMMC_CAPABILITIES0_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_CAPABILITIES1_REG; /*!< (@ 0x00000044) SDEMMC_CAPABILITIES1_REG : Capabilities1 */ + + struct + { + __IM uint32_t SDR50Support : 1; /*!< [0..0] SDR50Support */ + __IM uint32_t SDR104Support : 1; /*!< [1..1] SDR104Support */ + __IM uint32_t DDR50Support : 1; /*!< [2..2] DDR50Support */ + uint32_t : 1; + __IM uint32_t DriverTypeASupport : 1; /*!< [4..4] DriverTypeASupport */ + __IM uint32_t DriverTypeCSupport : 1; /*!< [5..5] DriverTypeCSupport */ + __IM uint32_t DriverTypeDSupport : 1; /*!< [6..6] DriverTypeDSupport */ + uint32_t : 1; + __IM uint32_t TimerCountforReTuning : 4; /*!< [11..8] TimerCountforReTuning */ + uint32_t : 1; + __IM uint32_t UseTuningforSDR50 : 1; /*!< [13..13] UseTuningforSDR50 */ + __IM uint32_t ReTuningModes : 2; /*!< [15..14] ReTuningModes */ + __IM uint32_t ClockMultiplier : 8; /*!< [23..16] ClockMultiplier */ + uint32_t : 8; + } SDEMMC_CAPABILITIES1_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_MAX_CUR_CAPABILITIES_REG; /*!< (@ 0x00000048) SDEMMC_MAXIMUMCURRENTCAPABILITIES_REG : MaximumCurrentCapabilit + * es */ + + struct + { + __IM uint32_t MaximumCurrentFor3_3V : 8; /*!< [7..0] MaximumCurrentFor3_3V */ + __IM uint32_t MaximumCurrentFor3_0V : 8; /*!< [15..8] MaximumCurrentFor3_0V */ + __IM uint32_t MaximumCurrentFor1_8V : 8; /*!< [23..16] MaximumCurrentFor1_8V */ + uint32_t : 8; + } SDEMMC_MAX_CUR_CAPABILITIES_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t SDEMMC_FORCE_EVENET_ERRSTAT_REG; /*!< (@ 0x00000050) SDEMMC_FORCEEVENTFORAUTOCMDERRORSTATUS_REG : + * ForceEventforAutoCMDErrorStatus */ + + struct + { + __OM uint32_t ForceEventForAutoCMD12NotExec : 1; /*!< [0..0] ForceEventForAutoCMD12NotExec */ + __OM uint32_t ForceEventForAutoCMDTimeout : 1; /*!< [1..1] ForceEventForAutoCMDTimeout */ + __OM uint32_t ForceEventForAutoCMDCRC : 1; /*!< [2..2] ForceEventForAutoCMDCRC */ + __OM uint32_t ForceEventForAutoCMDEndBit : 1; /*!< [3..3] ForceEventForAutoCMDEndBit */ + __OM uint32_t ForceEventForAutoCMDIndex : 1; /*!< [4..4] ForceEventForAutoCMDIndex */ + uint32_t : 2; + __OM uint32_t ForceEventForCommandNotIssuedByAutoCMD12Error : 1; /*!< [7..7] ForceEventForCommandNotIssuedByAutoCMD12Error */ + uint32_t : 8; + __OM uint32_t ForceEventForCommandTimeoutError : 1; /*!< [16..16] ForceEventForCommandTimeoutError */ + __OM uint32_t ForceEventForCommandCRCError : 1; /*!< [17..17] ForceEventForCommandCRCError */ + __OM uint32_t ForceEventForCommandEndBitError : 1; /*!< [18..18] ForceEventForCommandEndBitError */ + __OM uint32_t ForceEventForCommandIndexError : 1; /*!< [19..19] ForceEventForCommandIndexError */ + __OM uint32_t ForceEventForDataTimeoutError : 1; /*!< [20..20] ForceEventForDataTimeoutError */ + __OM uint32_t ForceEventForDataCRCError : 1; /*!< [21..21] ForceEventForDataCRCError */ + __OM uint32_t ForceEventForDataEndBitError : 1; /*!< [22..22] ForceEventForDataEndBitError */ + __OM uint32_t ForceEventForCurrentLimitError : 1; /*!< [23..23] ForceEventForCurrentLimitError */ + __OM uint32_t ForceEventForAutoCMDError : 1; /*!< [24..24] ForceEventForAutoCMDError */ + __OM uint32_t ForceEventForADMAError : 1; /*!< [25..25] ForceEventForADMAError */ + __OM uint32_t ForceEventForVendorSpecificError : 6; /*!< [31..26] ForceEventForVendorSpecificError */ + } SDEMMC_FORCE_EVENET_ERRSTAT_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_ADMAERRORSTATUS_REG; /*!< (@ 0x00000054) SDEMMC_ADMAERRORSTATUS_REG : ADMAErrorStatus */ + + struct + { + __IM uint32_t ADMAErrorState : 2; /*!< [1..0] ADMAErrorState */ + __IM uint32_t LengthMismatchError : 1; /*!< [2..2] LengthMismatchError */ + uint32_t : 29; + } SDEMMC_ADMAERRORSTATUS_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_ADMA_SYS_ADDR_LOW_REG; /*!< (@ 0x00000058) SDEMMC_ADMASYSTEMADDRESSLOWBITS_REG : ADMASystemAddressLowbits */ + + struct + { + __IOM uint32_t ADMASystemAddress : 32; /*!< [31..0] ADMASystemAddress */ + } SDEMMC_ADMA_SYS_ADDR_LOW_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_ADMA_SYS_ADDR_UPPER_REG; /*!< (@ 0x0000005C) SDEMMC_ADMASYSTEMADDRESSUPPERBITS_REG : ADMASystemAddressUpperb + * ts */ + + struct + { + __IOM uint32_t ADMASystemAddressUpperbits : 32; /*!< [31..0] ADMASystemAddressUpperbits */ + } SDEMMC_ADMA_SYS_ADDR_UPPER_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_PRESETVALUE0_REG; /*!< (@ 0x00000060) SDEMMC_PRESETVALUE0_REG : PresetValueInit_DefSpeed */ + + struct + { + __IM uint32_t InitSDCLKFrequenceSelectValue : 10; /*!< [9..0] InitSDCLKFrequenceSelectValue */ + __IM uint32_t InitClockGeneratorSelectValue : 1; /*!< [10..10] InitClockGeneratorSelectValue */ + uint32_t : 3; + __IM uint32_t InitDriveStrengthSelectValue : 2; /*!< [15..14] InitDriveStrengthSelectValue */ + __IM uint32_t DefSpdSDCLKFrequenceSelectValue : 10; /*!< [25..16] DefSpdSDCLKFrequenceSelectValue */ + __IM uint32_t DefSpdClockGeneratorSelectValue : 1; /*!< [26..26] DefSpdClockGeneratorSelectValue */ + uint32_t : 3; + __IM uint32_t DefSpdDriveStrengthSelectValue : 2; /*!< [31..30] DefSpdDriveStrengthSelectValue */ + } SDEMMC_PRESETVALUE0_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_PRESETVALUE1_REG; /*!< (@ 0x00000064) SDEMMC_PRESETVALUE1_REG : PresetValueHighSpd_SDR12 */ + + struct + { + __IM uint32_t HighSpdSDCLKFrequenceSelectValue : 10; /*!< [9..0] HighSpdSDCLKFrequenceSelectValue */ + __IM uint32_t HighSpdClockGeneratorSelectValue : 1; /*!< [10..10] HighSpdClockGeneratorSelectValue */ + uint32_t : 3; + __IM uint32_t HighSpdDriveStrengthSelectValue : 2; /*!< [15..14] HighSpdDriveStrengthSelectValue */ + __IM uint32_t SDR12SDCLKFrequenceSelectValue : 10; /*!< [25..16] SDR12SDCLKFrequenceSelectValue */ + __IM uint32_t SDR12ClockGeneratorSelectValue : 1; /*!< [26..26] SDR12ClockGeneratorSelectValue */ + uint32_t : 3; + __IM uint32_t SDR12DriveStrengthSelectValue : 2; /*!< [31..30] SDR12DriveStrengthSelectValue */ + } SDEMMC_PRESETVALUE1_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_PRESETVALUE2_REG; /*!< (@ 0x00000068) SDEMMC_PRESETVALUE2_REG : PresetValueSDR25_SDR50 */ + + struct + { + __IM uint32_t SDR25SDCLKFrequenceSelectValue : 10; /*!< [9..0] SDR25SDCLKFrequenceSelectValue */ + __IM uint32_t SDR25ClockGeneratorSelectValue : 1; /*!< [10..10] SDR25ClockGeneratorSelectValue */ + uint32_t : 3; + __IM uint32_t SDR25DriveStrengthSelectValue : 2; /*!< [15..14] SDR25DriveStrengthSelectValue */ + __IM uint32_t SDR50SDCLKFrequenceSelectValue : 10; /*!< [25..16] SDR50SDCLKFrequenceSelectValue */ + __IM uint32_t SDR50ClockGeneratorSelectValue : 1; /*!< [26..26] SDR50ClockGeneratorSelectValue */ + uint32_t : 3; + __IM uint32_t SDR50DriveStrengthSelectValue : 2; /*!< [31..30] SDR50DriveStrengthSelectValue */ + } SDEMMC_PRESETVALUE2_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_PRESETVALUE3_REG; /*!< (@ 0x0000006C) SDEMMC_PRESETVALUE3_REG : PresetValueSDR104_DDR50 */ + + struct + { + __IM uint32_t SDR104SDCLKFrequenceSelectValue : 10; /*!< [9..0] SDR104SDCLKFrequenceSelectValue */ + __IM uint32_t SDR104ClockGeneratorSelectValue : 1; /*!< [10..10] SDR104ClockGeneratorSelectValue */ + uint32_t : 3; + __IM uint32_t SDR104DriveStrengthSelectValue : 2; /*!< [15..14] SDR104DriveStrengthSelectValue */ + __IM uint32_t DDR50SDCLKFrequenceSelectValue : 10; /*!< [25..16] DDR50SDCLKFrequenceSelectValue */ + __IM uint32_t DDR50ClockGeneratorSelectValue : 1; /*!< [26..26] DDR50ClockGeneratorSelectValue */ + uint32_t : 3; + __IM uint32_t DDR50DriveStrengthSelectValue : 2; /*!< [31..30] DDR50DriveStrengthSelectValue */ + } SDEMMC_PRESETVALUE3_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_BOOTTIMEOUT_CTRL__REG; /*!< (@ 0x00000070) SDEMMC_BOOTTIMEOUTCONTROL_REG : BootTimeoutControl */ + + struct + { + __IOM uint32_t BootDataTimeoutCounterValue : 32; /*!< [31..0] BootDataTimeoutCounterValue */ + } SDEMMC_BOOTTIMEOUT_CTRL__REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_DEBUGSELECTION_REG; /*!< (@ 0x00000074) SDEMMC_DEBUGSELECTION_REG : DebugSelection */ + + struct + { + __IOM uint32_t DebugSel : 1; /*!< [0..0] DebugSel */ + uint32_t : 31; + } SDEMMC_DEBUGSELECTION_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_VENDOR_REG; /*!< (@ 0x00000078) SDEMMC_VENDOR_REG : Vendor */ + + struct + { + __IOM uint32_t AutoGateSDCLK : 1; /*!< [0..0] AutoGateSDCLK */ + __IOM uint32_t Delay_cmdin_datin_dis : 1; /*!< [1..1] Delay_cmdin_datin_dis */ + uint32_t : 30; + } SDEMMC_VENDOR_REG_b; + }; + __IM uint32_t RESERVED1[25]; + + union + { + __IOM uint32_t SDEMMC_SHAREDBUS_CTRL__REG; /*!< (@ 0x000000E0) SDEMMC_SHAREDBUSCONTROL_REG : SharedBusControl */ + + struct + { + __IM uint32_t NumberOfClockPins : 3; /*!< [2..0] NumberOfClockPins */ + uint32_t : 1; + __IM uint32_t NumberOfInterruptInputPins : 2; /*!< [5..4] NumberOfInterruptInputPins */ + uint32_t : 2; + __IM uint32_t BusWidthPreset : 7; /*!< [14..8] BusWidthPreset */ + uint32_t : 1; + __IOM uint32_t ClockPinSelect : 3; /*!< [18..16] ClockPinSelect */ + uint32_t : 1; + __IOM uint32_t InterruptPinSelect : 3; /*!< [22..20] InterruptPinSelect */ + uint32_t : 1; + __IOM uint32_t BackEndPowerControl : 7; /*!< [30..24] BackEndPowerControl */ + uint32_t : 1; + } SDEMMC_SHAREDBUS_CTRL__REG_b; + }; + __IM uint32_t RESERVED2[6]; + + union + { + __IOM uint32_t SDEMMC_SLOT_ITNR_STATUS_REG; /*!< (@ 0x000000FC) SDEMMC_SLOTINTERRUPTSTATUS_REG : SlotInterruptStatus */ + + struct + { + __IM uint32_t InterruptSignalForEachSlot : 8; /*!< [7..0] InterruptSignalForEachSlot */ + __IM uint32_t VendorVersionNumber : 8; /*!< [15..8] VendorVersionNumber */ + __IM uint32_t SpecificationVersionNumber : 8; /*!< [23..16] SpecificationVersionNumber */ + uint32_t : 8; + } SDEMMC_SLOT_ITNR_STATUS_REG_b; + }; + __IM uint32_t RESERVED3[192]; + + union + { + __IOM uint32_t SDEMMC_GLB_ITNR_STATUS_REG; /*!< (@ 0x00000400) SDEMMC_GLOBALINTERRUPTSTATUS_REG : GlobalInterruptStatus */ + + struct + { + uint32_t : 1; + __IOM uint32_t IntSrcXD : 1; /*!< [1..1] IntSrcXD */ + __IOM uint32_t IntSrcSD : 1; /*!< [2..2] IntSrcSD */ + uint32_t : 29; + } SDEMMC_GLB_ITNR_STATUS_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_GLB_ITNR_STATUS_EN_REG; /*!< (@ 0x00000404) SDEMMC_GLOBALINTERRUPTSTATUSENABLE_REG : GlobalInterruptStatusE + * able */ + + struct + { + uint32_t : 1; + __IOM uint32_t IntSrcXD : 1; /*!< [1..1] IntSrcXD */ + __IOM uint32_t IntSrcSD : 1; /*!< [2..2] IntSrcSD */ + uint32_t : 29; + } SDEMMC_GLB_ITNR_STATUS_EN_REG_b; + }; + + union + { + __IOM uint32_t SDEMMC_GLB_ITNR_SIGNAL_EN_REG; /*!< (@ 0x00000408) SDEMMC_GLOBALINTERRUPTSIGNALENABLE_REG : GlobalInterruptSignalE + * able */ + + struct + { + uint32_t : 1; + __IOM uint32_t IntSrcXD : 1; /*!< [1..1] IntSrcXD */ + __IOM uint32_t IntSrcSD : 1; /*!< [2..2] IntSrcSD */ + uint32_t : 29; + } SDEMMC_GLB_ITNR_SIGNAL_EN_REG_b; + }; +} SDEMMC_Type; /*!< Size = 1036 (0x40c) */ + +/* =========================================================================================================================== */ +/* ================ SDIO ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SDIO registers (SDIO) + */ + +typedef struct /*!< (@ 0x40010000) SDIO Structure */ +{ + union + { + __IOM uint32_t SDIO_CLOCK_WAKEUP_REG; /*!< (@ 0x00000000) Clock Wakeup */ + + struct + { + __IOM uint32_t AUTO_CLK_ENABLE : 1; /*!< [0..0] When this bit is programmed to 1, SDIO_AHB Controllercontrols + * the ahb_clk_wkup signal depending on the datatransfer activity + * on the bus automatically. */ + __IOM uint32_t MANUAL_CLK_ENABLE : 1; /*!< [1..1] 1 - The ahb_clk_wkup signal is always high indicating + * tothe ARM for keeping the clock active. This is used to + * allowmanual mode from SD Host. */ + uint32_t : 30; + } SDIO_CLOCK_WAKEUP_REG_b; + }; + + union + { + __IOM uint32_t SDIO_CCCR_REG; /*!< (@ 0x00000004) CCCR */ + + struct + { + __IOM uint32_t CCCR_REVISION : 4; /*!< [3..0] CCCR Format Version number.These 4-bits contains the + * version of the CCCR and FBR format that this card supports.00h + * CCCR/FBR Version 1.00 CCCR/FBR01h Version 1.1002h CCCR/FBR + * Version 2.00 CCCR/FBR03h Version 3.0004h-0Fh Reserved for + * Future Use. */ + __IOM uint32_t SDIO_REVISION : 4; /*!< [7..4] SDIO Specification Revision number.These 4-bits contain + * the version of the SDIO specification that this card supports.00h + * SDIO Specification Version 1.0001h SDIO Specification Version + * 1.1002h SDIO Specification Version 1.20 (Unreleased)03h + * SDIO Specification Version2.0004h SDIO Specification Version3.0005h-0Fh + * Reserved for Future Use. */ + __IOM uint32_t SD_REVISION : 4; /*!< [11..8] SD Format Revision.These 4-bits contain the version + * of the SD Physical specification that this card supports.00h + * SD Physical Specification 1.0101h SD Specification 1.10 + * Physical02h SD Physical Specification 2.0003h SD Physical + * Specification 3.0004h-0Fh Reserved for Future Use. */ + __IOM uint32_t SCSI : 1; /*!< [12..12] Support Continuous SPI interrupt. */ + __IOM uint32_t SDC : 1; /*!< [13..13] This flag bit reports the card?s ability to execute + * CMD52 while data transfer is in progress. */ + __IOM uint32_t SMB : 1; /*!< [14..14] This flag bit reports the card's ability to execute + * CMD53 in Block Mode. */ + __IOM uint32_t SRW : 1; /*!< [15..15] This flag bit reports the card's ability to Support + * the Read Wait Control (RWC) operation. */ + __IM uint32_t SBS : 1; /*!< [16..16] This flag bit reports the card's ability to Support + * the Suspend/Resume operations at the request of the Host.If + * this bit is set all functions except 0 will accept a request + * to suspend operations and esume under host control. */ + __IOM uint32_t S4MI : 1; /*!< [17..17] This flag reports the SDIO card's ability to generate + * interrupts during a 4-bit multi block data transfer. */ + __IOM uint32_t LSC : 1; /*!< [18..18] If this bit is set, it indicates that the SDIO card + * is a low speed device. If this bit is cleared the SDIO + * card is a full speed device. */ + __IOM uint32_t FOURBLS : 1; /*!< [19..19] This bit denotes that the SDIO card is a low speed + * card and supports 4-bit data transfer. */ + __IOM uint32_t SMPC : 1; /*!< [20..20] This bit tells the host if the card supports master + * power control.SMPC = 0. The total card current is less + * than 200mA, even if all functions areactive(IOEx = 1) EMPC,SPS + * and EPS shall be zero.SMPC = 1. The total card current + * may exeed 200mA. EMPC,SPS and EPS are available */ + __IOM uint32_t SHS : 1; /*!< [21..21] Support high speed - This flag bit reports thecard?s + * ability to operate in high speed mode. */ + __IM uint32_t CMD_INDEX : 6; /*!< [27..22] These 6 bit register contains the commandindex value + * for the command?s issued on the sd side. */ + uint32_t : 4; + } SDIO_CCCR_REG_b; + }; + + union + { + __IOM uint32_t SDIO_ADMA_SYSTEM_ADDRESS_REG; /*!< (@ 0x00000008) This register holds descriptor Pointer of the + * Descriptor table.At the start of ADMA ARM + * shall program start address of the Descriptor + * table. */ + + struct + { + uint32_t : 28; + __IOM uint32_t ADMA_SYSTEM_ADDRESS : 4; /*!< [31..28] This register holds descriptor Pointer of the Descriptor + * table.At the start of ADMA ARM shall program start address + * of the Descriptor table. */ + } SDIO_ADMA_SYSTEM_ADDRESS_REG_b; + }; + + union + { + __IOM uint32_t SDIO_CARDRDY_REG; /*!< (@ 0x0000000C) Card Ready */ + + struct + { + __IM uint32_t CARD_RDY : 1; /*!< [0..0] Card ready bit indicates Power on reset is synchronously + * deasserted on SD clock domain.This bit is set to 1 after + * power on reset indicating that the SDIO_AHB Controller + * is ready to program. */ + uint32_t : 31; + } SDIO_CARDRDY_REG_b; + }; + + union + { + __IOM uint32_t SDIO_FUNRDY_REG; /*!< (@ 0x00000010) Function Ready */ + + struct + { + __IOM uint32_t CARD_RDY : 1; /*!< [0..0] ARM Processor set this bit to indicate function is ready + * to operate. */ + uint32_t : 31; + } SDIO_FUNRDY_REG_b; + }; + + union + { + __IOM uint32_t SDIO_AHB_FN0_INT_ENABLE_REG; /*!< (@ 0x00000014) Function 0 interrupt enable */ + + struct + { + __IOM uint32_t AHBSOFT_RST_EN : 1; /*!< [0..0] Interrupt enable for cmd52 soft reset interrupt. */ + __IOM uint32_t VOLT_SWITCH_CMD_EN : 1; /*!< [1..1] 1 - volt switch cmd interrupt is enabled0 - volt switch + * cmd interrupt is disabled */ + __IOM uint32_t CMD19_RD_STRT_EN : 1; /*!< [2..2] 1 - cmd19 rd start interrupt is enabled0 - cmd19 rd start + * interrupt is disabled */ + __IOM uint32_t CMD19_RD_TRN_OVR_EN : 1; /*!< [3..3] 1 - cmd19 rd trans over interrupt is enabled0 - cmd19 + * rd trans over interrupt is disabled */ + __IOM uint32_t FN0_WR_STRT_EN : 1; /*!< [4..4] 1 - fn0 write start interrupt is enabled0 - fn0 write + * start interrupt is disabled */ + __IOM uint32_t FN0_WR_TRN_OVR_EN : 1; /*!< [5..5] 1 - fn0 write trn over interrupt is enabled0 - fn0 write + * trn over interrupt is disabled */ + __IOM uint32_t FN0_RD_STRT_EN : 1; /*!< [6..6] 1 - fn0 read start interrupt is enabled0 - fn0 read start + * interrupt is disabled */ + __IOM uint32_t FN0_RD_OVR_EN : 1; /*!< [7..7] 1 - fn0 read trn over interrupt is enabled0 - fn0 read + * trn over interrupt is disabled */ + __IOM uint32_t FN0_RD_ERR_EN : 1; /*!< [8..8] 1 - fn0 read trn err interrupt is enabled0 - fn0 read + * trn err interrupt is disabled */ + __IOM uint32_t FN0_ADMA_END_EN : 1; /*!< [9..9] 1 - fn0_adma_end_bit interrupt is enabled0 - fn0_adma_end_bit + * interrupt is disabled */ + __IOM uint32_t FN0_ADMA_INT_EN : 1; /*!< [10..10] 1 - fn0_adma_int interrupt is enabled0 - fn0_adma_int + * interrupt is disabled */ + __IOM uint32_t FN0_ADMA_ERR_EN : 1; /*!< [11..11] 1 - fn0_adma_err interrupt is enabled0 - fn0_adma_err + * interrupt is disabled */ + uint32_t : 20; + } SDIO_AHB_FN0_INT_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t SDIO_AHB_FN0_INT_REG; /*!< (@ 0x00000018) Function 0 interrupt */ + + struct + { + __IOM uint32_t AHBSOFT_RST : 1; /*!< [0..0] This soft reset interrupt will be asserted to ARM when + * host issues cmd52 soft reset for SDIO controller. */ + __IOM uint32_t VOLT_SWITCH_CMD : 1; /*!< [1..1] This bit is set by Arasan SDIO_AHB bridge when SD Host + * issues cmd11. */ + __IOM uint32_t CMD19_RD_STRT : 1; /*!< [2..2] This bit is set when SD Host issues cmd19. */ + __IOM uint32_t CMD19_RD_TRN_OVR : 1; /*!< [3..3] This bit is set when cmd19 read transaction is over. */ + __IOM uint32_t FN0_WR_STRT : 1; /*!< [4..4] This bit is set when the SD Host issues CMD53 Fun0 write + * command (For ARM side transaction).This bit is set by SDIO + * AHB bridge */ + __IOM uint32_t FN0_WR_TRN_OVR : 1; /*!< [5..5] This interrupt corresponds to the interrupt issued by + * SD DMA after it completes the write operation of a Function0 + * ARM side transaction.Until this bit is cleared, busy signal + * will be asserted in dat0 line, the SD DMA engine is prevented + * from performing an AHB write access from a new cmd53 write/read.No + * valid data in the fifo is overwritten. */ + __IOM uint32_t FN0_RD_STRT : 1; /*!< [6..6] This bit is set when the SD Host issues CMD53 Fun0 read + * command(ARM side transaction).This bit is set by SDIO AHB + * bridge */ + __IOM uint32_t FN0_RD_OVR : 1; /*!< [7..7] This interrupt corresponds to the interrupt issued by + * SD DMA after it completes the read operation of a Function0. */ + __IOM uint32_t FN0_RD_ERR : 1; /*!< [8..8] This interrupt is issued if SD Host issue abort command + * during function 0 read transaction. */ + __IOM uint32_t FN0_ADMA_END : 1; /*!< [9..9] This bit is set when the adma endbit is set during descriptor + * fetch indicate end of fetch.Then ARM processor ready for + * next fetch (with new updated address) */ + __IOM uint32_t FN0_ADMA_INT : 1; /*!< [10..10] This bit is set by Arasan SDIO_AHB bridge when int + * bit is set in the attribute field during fetch operation. */ + __IOM uint32_t FN0_ADMA_ERR : 1; /*!< [11..11] This bit is set by Arasan SDIO_AHB bridge when ARM + * sets valid bit as 0 in the attribute field during fetch + * operation. */ + uint32_t : 20; + } SDIO_AHB_FN0_INT_REG_b; + }; + + union + { + __IOM uint32_t SDIO_SOFT_RST_AHB_REG; /*!< (@ 0x0000001C) Soft Reset */ + + struct + { + __IOM uint32_t AHBSOFT_VALID : 1; /*!< [0..0] When ARM receives cmd52_rst interrupt it clears the interrupt + * and set this bit to 1.After that the controller asserts + * rstsoft_ahb_n for 1 AHB clk and clear the AHB domain flops. */ + uint32_t : 31; + } SDIO_SOFT_RST_AHB_REG_b; + }; + + union + { + __IOM uint32_t SDIO_GLB_INT_ENA_REG; /*!< (@ 0x00000020) Global Interrupt Enable */ + + struct + { + __IOM uint32_t FN0_INT_TO_ARM_EN : 1; /*!< [0..0] 1 - Interrupt asserted from AHB fn0 interrupt Register + * enabled.0 - Interrupt asserted from AHB fn0 interrupt Register + * masked. */ + __IOM uint32_t FN1_INT_TO_ARM_EN : 1; /*!< [1..1] 1 - Interrupt asserted from AHB fn1 interrupt Register + * enabled.0 - Interrupt asserted from AHB fn1 interrupt Register + * masked. */ + uint32_t : 30; + } SDIO_GLB_INT_ENA_REG_b; + }; + + union + { + __IOM uint32_t SDIO_GLB_INT_STS_REG; /*!< (@ 0x00000024) Global Interrupt Enable */ + + struct + { + __IOM uint32_t FN0_INT_TO_ARM : 1; /*!< [0..0] Interrupt asserted from AHB fn0 interrupt Register */ + __IOM uint32_t FN1_INT_TO_ARM : 1; /*!< [1..1] Interrupt asserted from AHB fn1 interrupt Register */ + uint32_t : 30; + } SDIO_GLB_INT_STS_REG_b; + }; + + union + { + __IOM uint32_t SDIO_CSA_POINTER_REG; /*!< (@ 0x00000028) CSA pointer */ + + struct + { + __IM uint32_t CSA_POINTER : 24; /*!< [23..0] CSA pointer updated by SD Host. */ + uint32_t : 8; + } SDIO_CSA_POINTER_REG_b; + }; + + union + { + __IOM uint32_t SDIO_IO_ACC_MODE_REG; /*!< (@ 0x0000002C) IO access mode */ + + struct + { + __IOM uint32_t SSDR50 : 1; /*!< [0..0] This bit indicates support of SDR50.Support bit of SDR500b: + * SDR50 is not supported1b: SDR50 is supported */ + __IOM uint32_t SSDR104 : 1; /*!< [1..1] This bit indicates support of SDR104.Support bit of SDR1040b: + * SDR104 is not supported1b: SDR104 is supported */ + __IOM uint32_t SDDR50 : 1; /*!< [2..2] This bit indicates support of DDR50.Support bit of DDR500b: + * DDR50 is not supported1b: DDR50 is supported */ + __IOM uint32_t SDTA : 1; /*!< [3..3] This bit indicates support of Driver Type A.Support bit + * of SDR500b: Driver Type A is not supported1b: Driver Type + * A is supported */ + __IOM uint32_t SDTC : 1; /*!< [4..4] This bit indicates support of Driver Type C.Support bit + * of SDR500b: Driver Type C is not 1b: Drive1b: Driver Type + * C is supported */ + __IOM uint32_t SDTD : 1; /*!< [5..5] This bit indicates support of Driver Type D.Support bit + * of SDR500b: Driver Type D is not supported1b: Driver Type + * D is supported */ + __IOM uint32_t SAI : 1; /*!< [6..6] Support bit of Asynchronous Interrupt.If the card supports + * asynchronous interrupt in SD 4-bit mode (interrupt can + * be asserted without SD clock during specified period), + * this bit is set to 1. */ + uint32_t : 25; + } SDIO_IO_ACC_MODE_REG_b; + }; + + union + { + __IOM uint32_t SDIO_LAST_FETCH_ADDR_REG; /*!< (@ 0x00000030) This register holds descriptor Pointer of the + * Descriptor table.At the start of ADMA ARM + * shall program start address of the Descriptor + * table. */ + + struct + { + __IM uint32_t LAST_FETCH_ADDR : 32; /*!< [31..0] This register holds descriptor Pointer of the Descriptor + * table.At the start of ADMA ARM shall program start address + * of the Descriptor table. */ + } SDIO_LAST_FETCH_ADDR_REG_b; + }; + + union + { + __IOM uint32_t SDIO_UHS_SUPPORT_REG; /*!< (@ 0x00000034) UHS Support */ + + struct + { + __IOM uint32_t UHS_SUPPORT : 1; /*!< [0..0] This bit is set by the ARM to indicate the card supports + * the UHS mode for SD3.0 support.which requires 1.8v signal.Setting + * this to one will also make S18A bit to one in R4 Response */ + __IOM uint32_t DDR_DLY_SELECT : 1; /*!< [1..1] This bit field indicates delay select value for DDR mode + * read transaction.0 - 1.5 ns delay value1 - 3 ns delay value */ + __IOM uint32_t CARD_VOLT_ACCEPTED : 1; /*!< [2..2] This bit is set by ARM and it indicates card switched + * to 1.8v successfully */ + __IOM uint32_t SD_CLK_LINE_SWITCHED : 1; /*!< [3..3] This bit is set by ARM and it indicates sd_clk line is + * switched to 1.8v successfully */ + __IOM uint32_t SD_CMD_LINE_SWITCHED : 1; /*!< [4..4] This bit is set by ARM and it indicates cmd line switched + * to 1.8v successfully */ + uint32_t : 27; + } SDIO_UHS_SUPPORT_REG_b; + }; + + union + { + __IOM uint32_t SDIO_CLK_DELAY_TIMER_REG; /*!< (@ 0x00000038) This value used as wait time for the Controller + * before releasing cmd, data line for cmd11 + * voltage switch. */ + + struct + { + __IOM uint32_t CLK_DELAY_TIMER : 32; /*!< [31..0] This value used as wait time for the Controller before + * releasing cmd, data line for cmd11 voltage switch. */ + } SDIO_CLK_DELAY_TIMER_REG_b; + }; + + union + { + __IOM uint32_t SDIO_POWER_CONTROL_REG; /*!< (@ 0x0000003C) Power Control */ + + struct + { + __IM uint32_t EMPC : 1; /*!< [0..0] EMPC=0(default): The total card current shall be less + * than 200mAEMPC=1: The total card current may exceed 200mA. */ + __IM uint32_t EPS_FUN1 : 1; /*!< [1..1] EPS=0(default): The function operates in Higher Cur- + * rent ModeThe maximum current for the function shall be + * given in TPLFE_HP_MAX_PWR_3.3VEPS=1: The function works + * in Lower Current ModeThe maximum current for the function + * shall be given in TPLFE_LP_MAX_PWR_3.3V. */ + uint32_t : 6; + __IOM uint32_t POWERDOWN_REQUEST : 1; /*!< [8..8] It should write to initiate power down sequence, which + * the IP should start writing the register values into the + * RAM */ + __IOM uint32_t FASTINIT_REQUEST : 1; /*!< [9..9] It should write for waking the IP up from power down + * mode. This will indicate that the chip has received a wakeup + * request and the IP has to retain the register values from + * the retention RAM */ + uint32_t : 22; + } SDIO_POWER_CONTROL_REG_b; + }; + + union + { + __IOM uint32_t SDIO_POWER_STATE_REG; /*!< (@ 0x00000040) Power State */ + + struct + { + __IM uint32_t PWR_STATE_FN1 : 4; /*!< [3..0] If PS[3:0] is set to 0, TPL_CODE CISTPL_FUNCE(22h) extension + * 01h is used and the card power is con- trolled by EMPC + * andEPS (SDIO Version 2.00 Compatible).Power State control + * is defined by SDIO Version 3.00 and is effective when EMPC + * is set to 1 and PS[3:0] is set to larger than 0. In this + * case, a list of card sup- ported power states (current) + * is described in the Fun1 CIS tuple */ + uint32_t : 28; + } SDIO_POWER_STATE_REG_b; + }; + __IM uint32_t RESERVED[48]; + + union + { + __IOM uint32_t SDIO_OCR_REG; /*!< (@ 0x00000104) OCR */ + + struct + { + __IOM uint32_t OCR : 24; /*!< [23..0] IO Operational condition register is programmed by the + * ARM which is used to match with theoperating voltage range + * of the SD Host. */ + uint32_t : 8; + } SDIO_OCR_REG_b; + }; + + union + { + __IOM uint32_t SDIO_INTERRUPT_REG; /*!< (@ 0x00000108) Interrupt Identification */ + + struct + { + __IOM uint32_t READ_DATA_READY_INT : 1; /*!< [0..0] Read Ready Interrupt:If set to 1, it indicates that the + * ARM has data ready to send to the SD Host.The bit remains + * set to 1 until the SD Host writes 1 to the corresponding + * bit in the Interrupt identification register.This bit is + * set to one whenever ARM sets the read_data_rdy bit in read_data_rdy + * register. */ + __IOM uint32_t READ_ERROR : 1; /*!< [1..1] Read Error InterruptIf set to 1, it indicates that the + * ARM has send an error response during data transaction + * and the host has to retry the same transaction to prevent + * data loss. */ + __IOM uint32_t MESSAGE_FROM_ARM : 1; /*!< [2..2] ARM Message InterruptIf set to 1, it indicates that the + * ARM has programmed the ARM General Purpose Register (Message + * from ARM to SD Host).On receiving this Interrupt, the SD + * Host will read the ARM General purpose register to find + * the message from ARM. */ + __IOM uint32_t ACK_TO_SD_HOST : 1; /*!< [3..3] Acknowledgment to SD Host. If set to 1, it indicates + * that the ARM has read the message. */ + uint32_t : 4; + __IOM uint32_t READ_DATA_READY_INT_EN : 1; /*!< [8..8] 1 - Read data ready interrupt is enabled0 - Read data + * ready interrupt is disabled */ + __IOM uint32_t READ_ERROR_EN : 1; /*!< [9..9] 1 - Read error interrupt is enabled0 - Read error interrupt + * is disabled */ + __IOM uint32_t MESSAGE_FROM_ARM_EN : 1; /*!< [10..10] 1 - Message from ARM interrupt is enabled0 - Message + * from ARM interrupt is disabled */ + __IOM uint32_t ACK_TO_SD_HOST_EN : 1; /*!< [11..11] 1 - Ack to SD Host interrupt is enabled0 - Ack to SD + * Host interrupt is disabled */ + uint32_t : 20; + } SDIO_INTERRUPT_REG_b; + }; + + union + { + __IOM uint32_t SDIO_AHB_TRANSCOUNT_REG; /*!< (@ 0x0000010C) AHB transaction counter */ + + struct + { + __IOM uint32_t AHB_XFER_CNT : 21; /*!< [20..0] This register contains the transfer count value programmable + * by ARM for a read transaction. */ + uint32_t : 11; + } SDIO_AHB_TRANSCOUNT_REG_b; + }; + + union + { + __IOM uint32_t SDIO_AHB_SDIOTRANSCOUNT_REG; /*!< (@ 0x00000110) AHB SDIO transaction counter */ + + struct + { + __IM uint32_t XFER_CNT_REG : 21; /*!< [20..0] SDIO_AHB bridge writes the number of bytes transferred + * to ARM processor during write transfer. */ + uint32_t : 11; + } SDIO_AHB_SDIOTRANSCOUNT_REG_b; + }; + + union + { + __IOM uint32_t SDIO_AHB_FN1_INT_REG; /*!< (@ 0x00000114) Function 1 interrupt */ + + struct + { + __IOM uint32_t FN1_WR_OVER : 1; /*!< [0..0] This interrupt corresponds to the interrupt issued by + * SD DMA after it completes the write operation of a Function1.Until + * this bit is cleared, busy signal will be asserted in data + * line, the SD DMA engine is prevented from performing an + * AHB write access from a new cmd53 write/read.No valid data + * in the fifo is overwritten. */ + __IOM uint32_t FN1_RD_OVER : 1; /*!< [1..1] This interrupt corresponds to the interrupt issued by + * SD DMA after it completes the read operation of a Function1. */ + __IOM uint32_t FN1_RD_ERROR : 1; /*!< [2..2] This interrupt is issued if SD Host issue abort command + * during function 1 read transaction. */ + __IOM uint32_t FUN1_RST : 1; /*!< [3..3] IOEx,is a CCCR bit (Enable Functionx). If host disable + * IOEx bit in CCCR register, this interrupt is asserted to + * inform the ARM, that funx is disabled by the host.This + * is used for per function reset error recovery and this + * signal will not affect the flops inside the IP. */ + __IOM uint32_t SD_HOST_FN1_MSG_RDY : 1; /*!< [4..4] SD Host Message InterruptIf set to 1, it indicates that + * the SD Host has programmed the SD Host General Purpose + * Register (Message from SD Host to ARM).On receiving this + * Interrupt, the ARM will read the SD Host General purpose + * register to find the message from SD Host. */ + __IOM uint32_t FN1_ACK_TO_ARM : 1; /*!< [5..5] Acknowledgment to ARM. If set to 1, it indicates that + * the SD Host has read the message. */ + __IOM uint32_t FN1_SDIO_RD_START : 1; /*!< [6..6] This bit is set when the SD Host issues CMD53 read com- + * mand. This bit is set by SDIO AHB bridge */ + __IOM uint32_t FN1_SDIO_WR_START : 1; /*!< [7..7] This bit is set when the SD Host issues CMD53 write com- + * mand. This bit is set by SDIO AHB bridge */ + __IOM uint32_t ADMA_END_INT : 1; /*!< [8..8] This bit is set when the adma endbit is set during descriptor + * fetch indicate end of fetch. Then ARM processor ready for + * next fetch (with new updated address) */ + __IOM uint32_t FN1_SUSPEND : 1; /*!< [9..9] This bit is set when suspend command is issued for the + * function1. */ + __IOM uint32_t RESUME : 1; /*!< [10..10] This bit is set when resume command is issued for the + * function1. */ + __IOM uint32_t ADMA_INT : 1; /*!< [11..11] This bit is set by Arasan SDIO_AHB bridge when int + * bit is set in the attribute field during fetch operation. */ + __IOM uint32_t ADMA_ERR : 1; /*!< [12..12] This bit is set by Arasan SDIO_AHB bridge when ARM + * sets valid bit as 0 in the attribute field during fetch + * operation. */ + __IOM uint32_t FUN1_EN : 1; /*!< [13..13] This bit is set by Arasan SDIO_AHB bridge when SD Host + * enables the function enable bit in CCCR register. */ + uint32_t : 18; + } SDIO_AHB_FN1_INT_REG_b; + }; + + union + { + __IOM uint32_t SDIO_AHB_FN1_INT_ENABLE_REG; /*!< (@ 0x00000118) Function 1 interrupt enable */ + + struct + { + __IOM uint32_t FN1_WR_OVER_EN : 1; /*!< [0..0] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t FN1_RD_OVER_EN : 1; /*!< [1..1] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t FN1_RD_ERROR_EN : 1; /*!< [2..2] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t FUN1_RST_EN : 1; /*!< [3..3] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t SD_HOST_FN1_MSG_RDY_EN : 1; /*!< [4..4] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t FN1_ACK_TO_ARM_EN : 1; /*!< [5..5] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t FN1_SDIO_RD_START_EN : 1; /*!< [6..6] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t FN1_SDIO_WR_START_EN : 1; /*!< [7..7] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t ADMA_END_INT_EN : 1; /*!< [8..8] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t FN1_SUSPEND_EN : 1; /*!< [9..9] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t RESUME_EN : 1; /*!< [10..10] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t ADMA_INT_EN : 1; /*!< [11..11] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t ADMA_ERR_EN : 1; /*!< [12..12] 1 - interrupt is enabled0 - interrupt is disabled */ + __IOM uint32_t FUN1_EN_INT_EN : 1; /*!< [13..13] 1 - interrupt is enabled0 - interrupt is disabled */ + uint32_t : 18; + } SDIO_AHB_FN1_INT_ENABLE_REG_b; + }; + + union + { + __IOM uint32_t SDIO_FBR_REG; /*!< (@ 0x0000011C) FBR */ + + struct + { + __IOM uint32_t IO_DEVICE_CODE1 : 4; /*!< [3..0] This value denotes the SDIO standard Inter- face supported + * by this function (function 1).0 - No SDIO standard Interface + * supported bythis function. */ + __IOM uint32_t FUN_CSA_SUP : 1; /*!< [4..4] CSA support bit1 - CSA Supported.0 - CSA is not Supported. */ + __IOM uint32_t EXTENDED_IO_DEVICE_CODE1 : 8; /*!< [12..5] This is the Extension of the Standard I/O Device Code + * for Function 1. */ + __IOM uint32_t SDIO_SPS : 1; /*!< [13..13] Function1 supports high power. */ + uint32_t : 18; + } SDIO_FBR_REG_b; + }; + + union + { + __IOM uint32_t SDIO_IOR_REG; /*!< (@ 0x00000120) IOR */ + + struct + { + __IOM uint32_t IOR_REG : 1; /*!< [0..0] set this bit to indicate that the function is ready.This + * is used to set IOR1 bit in cccr */ + uint32_t : 31; + } SDIO_IOR_REG_b; + }; + + union + { + __IOM uint32_t SDIO_SD_HOST_GP_REG; /*!< (@ 0x00000124) SD Host General Purpose Register */ + + struct + { + __IM uint32_t SD_HOST_GP : 32; /*!< [31..0] SD Host General Purpose Register.An Interrupt will be + * asserted to the ARM, whenever SD Host writes into this + * register indicating that there is a message for ARM. */ + } SDIO_SD_HOST_GP_REG_b; + }; + + union + { + __IOM uint32_t SDIO_ARM_GP_REG; /*!< (@ 0x00000128) ARM General Purpose Register */ + + struct + { + __OM uint32_t ARM_GP : 32; /*!< [31..0] ARM General Purpose Register.An Interrupt will be asserted + * to the SD Host, whenever ARM writes into this register + * indicating that there is a message for SD Host. */ + } SDIO_ARM_GP_REG_b; + }; + + union + { + __IOM uint32_t SDIO_RDDATRDY_REG; /*!< (@ 0x0000012C) Read Data Ready */ + + struct + { + __IOM uint32_t FN1_RDDATRDY : 1; /*!< [0..0] ARM sets this bit to indicate that the function1 read + * data is ready.This bit is auto cleared. If ARM sets this + * bit to 1 then it should wait for the fn_read_over or fn_rd_error + * interrupt. */ + uint32_t : 31; + } SDIO_RDDATRDY_REG_b; + }; + + union + { + __IOM uint32_t SDIO_BLKSIZE_REG; /*!< (@ 0x00000130) Block Size */ + + struct + { + __IM uint32_t BLK_SIZE : 12; /*!< [11..0] Block Size Register. The Arasan SDIO-AHB Controller + * read this register based on the block size programmed by + * the SD host */ + __IM uint32_t SIN_MUL_BLK : 1; /*!< [12..12] This bit indicates current transaction is Block/Byte + * mode transaction.For cmd 53 block mode this value is 1. + * For cmd53 byte mode this value is 0 */ + uint32_t : 19; + } SDIO_BLKSIZE_REG_b; + }; + + union + { + __IOM uint32_t SDIO_ARGUMENT_REG; /*!< (@ 0x00000134) Argument */ + + struct + { + __IM uint32_t ARG_REG : 32; /*!< [31..0] IO transaction:[8:0] -> Byte/Block count In case of + * Block mode it indicates Block count value. In case of Byte + * mode it indicates Byte count value. [25:9] -> Register + * address field in CMD53.[26] -> Opcode[27] -> Blockmode. + * 1 - Block mode. 0 - Byte mode.[30:28] -> Function Number + * field in CMD53[31] -> R/W flag field in CMD53. 1 -> Write + * CMD53. 0 -> Read CMD53 */ + } SDIO_ARGUMENT_REG_b; + }; + + union + { + __IOM uint32_t SDIO_WRBLKCNT_REG; /*!< (@ 0x00000138) Write Block Count */ + + struct + { + __IOM uint32_t WR_BLK_CNT : 16; /*!< [15..0] This register has the value of how many blocks are transferred + * from SD Host to ARM.On receiving fn1_wr_over, ARM should + * clear this register. */ + uint32_t : 16; + } SDIO_WRBLKCNT_REG_b; + }; + + union + { + __IOM uint32_t SDIO_RDBLKCNT_REG; /*!< (@ 0x0000013C) Read Block Count */ + + struct + { + __IOM uint32_t RD_BLK_CNT : 16; /*!< [15..0] This register has the value of how many blocks are transferred + * from ARM to SD Host.On receiving the fn1_read_over interrupt, + * ARM should clear this register */ + uint32_t : 16; + } SDIO_RDBLKCNT_REG_b; + }; +} SDIO_Type; /*!< Size = 320 (0x140) */ + +/* =========================================================================================================================== */ +/* ================ SPI ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SPI registers (SPI) + */ + +typedef struct /*!< (@ 0x40090200) SPI Structure */ +{ + union + { + __IOM uint32_t SPI_CTRL_REG; /*!< (@ 0x00000000) Spi control register */ + + struct + { + __IOM uint32_t SPI_EN : 1; /*!< [0..0] 0 = SPI module is disable1 = SPI module is enable */ + __IOM uint32_t SPI_TX_EN : 1; /*!< [1..1] 0 = TX path is disabled1 = TX path is enabled */ + __IOM uint32_t SPI_RX_EN : 1; /*!< [2..2] 0 = RX path is disabled1 = RX path is enabledNote: if + * spi mode=1 or spi mode=3 readonly is not supported */ + __IOM uint32_t SPI_DMA_TX_EN : 1; /*!< [3..3] applicable only when SPI_TX_EN=10 = No DMA request for + * TX1 = DMA request when SPI_STATUS_TX_EMPTY='1' */ + __IOM uint32_t SPI_DMA_RX_EN : 1; /*!< [4..4] applicable only when SPI_RX_EN=10 = No DMA request for + * RX1 = DMA request when SPI_STATUS_RX_FULL='1' */ + __IOM uint32_t SPI_FIFO_RESET : 1; /*!< [5..5] 0 = Fifo normal operation1 = Fifo in reset state */ + __IOM uint32_t SPI_CAPTURE_AT_NEXT_EDGE : 1; /*!< [6..6] 0 = SPI captures data at correct clock edge1 = SPI captures + * data at next clock edge. (only for Master mode and high + * clock) */ + __IOM uint32_t SPI_SWAP_BYTES : 1; /*!< [7..7] 0 = normal operation1 = LSB and MSB are swaped in APB + * interfaceIn case of 8bit spi interface, DMA/SPI can be + * configured in 16bit mode to off load the bus. Enabling + * SPI_SWAP_BYTES bytes will read/wrte correctly */ + uint32_t : 24; + } SPI_CTRL_REG_b; + }; + + union + { + __IOM uint32_t SPI_CONFIG_REG; /*!< (@ 0x00000004) Spi control register */ + + struct + { + __IOM uint32_t SPI_MODE : 2; /*!< [1..0] Define the spi mode (CPOL, CPHA)0 = new data on falling, + * capture on rising, clk low in idle state1 = new data on + * rising, capture on falling, Clk low in idle state2 = new + * data on rising, capture on falling, Clk high in idle state3 + * = new data on falling, capture on rising Clk high in idle + * state */ + __IOM uint32_t SPI_WORD_LENGTH : 5; /*!< [6..2] Define the spi word length = 1+ SPI_WORD_LENGTH (range + * 4 to 32)Note: should be changed with SPI_EN=0 */ + __IOM uint32_t SPI_SLAVE_EN : 1; /*!< [7..7] 0 = SPI module master mode1 = SPI module slave mode */ + uint32_t : 24; + } SPI_CONFIG_REG_b; + }; + + union + { + __IOM uint32_t SPI_CLOCK_REG; /*!< (@ 0x00000008) Spi clock register */ + + struct + { + __IOM uint32_t SPI_CLK_DIV : 7; /*!< [6..0] Applicable only in master modeDefines the spi clock frequency + * in master only modeSPI_CLK = module_clk / 2*(SPI_CLK_DIV+1) + * when SPI_CLK_DIV not 0x7Fif SPI_CLK_DIV=0x7F then SPI_CLK=module_clk */ + uint32_t : 25; + } SPI_CLOCK_REG_b; + }; + + union + { + __IOM uint32_t SPI_FIFO_CONFIG_REG; /*!< (@ 0x0000000C) Spi fifo configuration register */ + + struct + { + __IOM uint32_t SPI_TX_TL : 8; /*!< [7..0] Transmit FIFO threshold level in bytes. Control the level + * of bytes in fifo that triggers the TX_EMPTY interrupt. + * IRQ is occurred when fifo level is less or equal to SPI_TX_TL. + * Valid FIFO level is from 0 to 32 */ + __IOM uint32_t SPI_RX_TL : 8; /*!< [15..8] Receive FIFO threshold level in bytes. Control the level + * of bytes in fifo that triggers the RX_FULL interrupt. IRQ + * is occurred when fifo level is more or equal to SPI_RX_TL+1. + * Valid FIFO level is from 0 to 32 */ + uint32_t : 16; + } SPI_FIFO_CONFIG_REG_b; + }; + + union + { + __IOM uint32_t SPI_IRQ_MASK_REG; /*!< (@ 0x00000010) Spi interrupt mask register */ + + struct + { + __IOM uint32_t SPI_IRQ_MASK_TX_EMPTY : 1; /*!< [0..0] 0 = FIFO TX empty irq is masked1 = FIFO TX empy irq is + * enabled */ + __IOM uint32_t SPI_IRQ_MASK_RX_FULL : 1; /*!< [1..1] 0 = FIFO RX full irq is masked1 = FIFO RX full irq is + * enabled */ + uint32_t : 30; + } SPI_IRQ_MASK_REG_b; + }; + + union + { + __IOM uint32_t SPI_STATUS_REG; /*!< (@ 0x00000014) Spi status register */ + + struct + { + __IM uint32_t SPI_STATUS_TX_EMPTY : 1; /*!< [0..0] Auto clear0 = TX fifo level is larger than SPI_TX_TL1 + * = TX fifo level is less or equal to SPI_TX_TL */ + __IM uint32_t SPI_STATUS_RX_FULL : 1; /*!< [1..1] Auto clear0 = RX fifo level is less than SPI_RX_TL+11 + * = RX fifo level is more or equal to SPI_RX_TL+1 */ + uint32_t : 30; + } SPI_STATUS_REG_b; + }; + + union + { + __IOM uint32_t SPI_FIFO_STATUS_REG; /*!< (@ 0x00000018) SPI RX/TX fifo status register */ + + struct + { + __IM uint32_t SPI_RX_FIFO_LEVEL : 6; /*!< [5..0] Gives the number of bytes in RX fifo */ + __IM uint32_t SPI_TX_FIFO_LEVEL : 6; /*!< [11..6] Gives the number of bytes in TX fifo */ + __IM uint32_t SPI_STATUS_RX_EMPTY : 1; /*!< [12..12] 0 = RX fifo is not empty1 = RX fifo is empty */ + __IM uint32_t SPI_STATUS_TX_FULL : 1; /*!< [13..13] 0 = TX fifo is not full1 = TX fifo is full */ + __IM uint32_t SPI_RX_FIFO_OVFL : 1; /*!< [14..14] When 1, receive data is not written to fifo because + * fifo was full and interrupt is generated. It clears with + * SPI_CTRL_REG.SPI_FIFO_RESET */ + __IM uint32_t SPI_TRANSACTION_ACTIVE : 1; /*!< [15..15] In master mode0 = spi transaction is inactive1 = spi + * transaction is active */ + uint32_t : 16; + } SPI_FIFO_STATUS_REG_b; + }; + + union + { + __IOM uint32_t SPI_FIFO_READ_REG; /*!< (@ 0x0000001C) Spi RX fifo read register */ + + struct + { + __IM uint32_t SPI_FIFO_READ : 32; /*!< [31..0] Read from RX fifo. Read access is permit only if SPI_RX_FIFO_EMPTY=0. */ + } SPI_FIFO_READ_REG_b; + }; + + union + { + __IOM uint32_t SPI_FIFO_WRITE_REG; /*!< (@ 0x00000020) Spi TX fifo wtite register */ + + struct + { + __OM uint32_t SPI_FIFO_WRITE : 32; /*!< [31..0] Write to TX fifo. Write access is permit only if SPI_TX_FIFO_FULL + * is 0 */ + } SPI_FIFO_WRITE_REG_b; + }; + + union + { + __IOM uint32_t SPI_CS_CONFIG_REG; /*!< (@ 0x00000024) Spi cs configuration register */ + + struct + { + __IOM uint32_t SPI_CS_SELECT : 3; /*!< [2..0] Control the cs output in master mode0 = none slave device + * selected1 = selected slave device connected to GPIO with + * FUNC_MODE=SPI_CS02 = selected slave device connected to + * GPIO with FUNC_MODE=SPI_CS14 = selected slave device connected + * to GPIO with FUNC_MODE=GPIO */ + uint32_t : 29; + } SPI_CS_CONFIG_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t SPI_TXBUFFER_FORCE_REG; /*!< (@ 0x0000002C) SPI TX buffer force low value */ + + struct + { + __OM uint32_t SPI_TXBUFFER_FORCE : 32; /*!< [31..0] Write directly the tx buffer . It must to be used only + * in slave mode */ + } SPI_TXBUFFER_FORCE_REG_b; + }; +} SPI_Type; /*!< Size = 48 (0x30) */ + +/* =========================================================================================================================== */ +/* ================ SPI2 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SPI2 registers (SPI2) + */ + +typedef struct /*!< (@ 0x40090300) SPI2 Structure */ +{ + union + { + __IOM uint32_t SPI2_CTRL_REG; /*!< (@ 0x00000000) Spi control register */ + + struct + { + __IOM uint32_t SPI_EN : 1; /*!< [0..0] 0 = SPI module is disable1 = SPI module is enable */ + __IOM uint32_t SPI_TX_EN : 1; /*!< [1..1] 0 = TX path is disabled1 = TX path is enabled */ + __IOM uint32_t SPI_RX_EN : 1; /*!< [2..2] 0 = RX path is disabled1 = RX path is enabledNote: if + * spi mode=1 or spi mode=3 readonly is not supported */ + __IOM uint32_t SPI_DMA_TX_EN : 1; /*!< [3..3] applicable only when SPI_TX_EN=10 = No DMA request for + * TX1 = DMA request when SPI_STATUS_TX_EMPTY='1' */ + __IOM uint32_t SPI_DMA_RX_EN : 1; /*!< [4..4] applicable only when SPI_RX_EN=10 = No DMA request for + * RX1 = DMA request when SPI_STATUS_RX_FULL='1' */ + __IOM uint32_t SPI_FIFO_RESET : 1; /*!< [5..5] 0 = Fifo normal operation1 = Fifo in reset state */ + __IOM uint32_t SPI_CAPTURE_AT_NEXT_EDGE : 1; /*!< [6..6] 0 = SPI captures data at correct clock edge1 = SPI captures + * data at next clock edge. (only for Master mode and high + * clock) */ + __IOM uint32_t SPI_SWAP_BYTES : 1; /*!< [7..7] 0 = normal operation1 = LSB and MSB are swaped in APB + * interfaceIn case of 8bit spi interface, DMA/SPI can be + * configured in 16bit mode to off load the bus. Enabling + * SPI_SWAP_BYTES bytes will read/wrte correctly */ + uint32_t : 24; + } SPI2_CTRL_REG_b; + }; + + union + { + __IOM uint32_t SPI2_CONFIG_REG; /*!< (@ 0x00000004) Spi control register */ + + struct + { + __IOM uint32_t SPI_MODE : 2; /*!< [1..0] Define the spi mode (CPOL, CPHA)0 = new data on falling, + * capture on rising, clk low in idle state1 = new data on + * rising, capture on falling, Clk low in idle state2 = new + * data on rising, capture on falling, Clk high in idle state3 + * = new data on falling, capture on rising Clk high in idle + * state */ + __IOM uint32_t SPI_WORD_LENGTH : 5; /*!< [6..2] Define the spi word length = 1+ SPI_WORD_LENGTH (range + * 4 to 32)Note: should be changed with SPI_EN=0 */ + __IOM uint32_t SPI_SLAVE_EN : 1; /*!< [7..7] 0 = SPI module master mode1 = SPI module slave mode */ + uint32_t : 24; + } SPI2_CONFIG_REG_b; + }; + + union + { + __IOM uint32_t SPI2_CLOCK_REG; /*!< (@ 0x00000008) Spi clock register */ + + struct + { + __IOM uint32_t SPI_CLK_DIV : 7; /*!< [6..0] Applicable only in master modeDefines the spi clock frequency + * in master only modeSPI_CLK = module_clk / 2*(SPI_CLK_DIV+1) + * when SPI_CLK_DIV not 0x7Fif SPI_CLK_DIV=0x7F then SPI_CLK=module_clk */ + uint32_t : 25; + } SPI2_CLOCK_REG_b; + }; + + union + { + __IOM uint32_t SPI2_FIFO_CONFIG_REG; /*!< (@ 0x0000000C) Spi fifo configuration register */ + + struct + { + __IOM uint32_t SPI_TX_TL : 8; /*!< [7..0] Transmit FIFO threshold level in bytes. Control the level + * of bytes in fifo that triggers the TX_EMPTY interrupt. + * IRQ is occurred when fifo level is less or equal to SPI_TX_TL. + * Valid FIFO level is from 0 to 32 */ + __IOM uint32_t SPI_RX_TL : 8; /*!< [15..8] Receive FIFO threshold level in bytes. Control the level + * of bytes in fifo that triggers the RX_FULL interrupt. IRQ + * is occurred when fifo level is more or equal to SPI_RX_TL+1. + * Valid FIFO level is from 0 to 32 */ + uint32_t : 16; + } SPI2_FIFO_CONFIG_REG_b; + }; + + union + { + __IOM uint32_t SPI2_IRQ_MASK_REG; /*!< (@ 0x00000010) Spi interrupt mask register */ + + struct + { + __IOM uint32_t SPI_IRQ_MASK_TX_EMPTY : 1; /*!< [0..0] 0 = FIFO TX empty irq is masked1 = FIFO TX empy irq is + * enabled */ + __IOM uint32_t SPI_IRQ_MASK_RX_FULL : 1; /*!< [1..1] 0 = FIFO RX full irq is masked1 = FIFO RX full irq is + * enabled */ + uint32_t : 30; + } SPI2_IRQ_MASK_REG_b; + }; + + union + { + __IOM uint32_t SPI2_STATUS_REG; /*!< (@ 0x00000014) Spi status register */ + + struct + { + __IM uint32_t SPI_STATUS_TX_EMPTY : 1; /*!< [0..0] Auto clear0 = TX fifo level is larger than SPI_TX_TL1 + * = TX fifo level is less or equal to SPI_TX_TL */ + __IM uint32_t SPI_STATUS_RX_FULL : 1; /*!< [1..1] Auto clear0 = RX fifo level is less than SPI_RX_TL+11 + * = RX fifo level is more or equal to SPI_RX_TL+1 */ + uint32_t : 30; + } SPI2_STATUS_REG_b; + }; + + union + { + __IOM uint32_t SPI2_FIFO_STATUS_REG; /*!< (@ 0x00000018) SPI RX/TX fifo status register */ + + struct + { + __IM uint32_t SPI_RX_FIFO_LEVEL : 6; /*!< [5..0] Gives the number of bytes in RX fifo */ + __IM uint32_t SPI_TX_FIFO_LEVEL : 6; /*!< [11..6] Gives the number of bytes in TX fifo */ + __IM uint32_t SPI_STATUS_RX_EMPTY : 1; /*!< [12..12] 0 = RX fifo is not empty1 = RX fifo is empty */ + __IM uint32_t SPI_STATUS_TX_FULL : 1; /*!< [13..13] 0 = TX fifo is not full1 = TX fifo is full */ + __IM uint32_t SPI_RX_FIFO_OVFL : 1; /*!< [14..14] When 1, receive data is not written to fifo because + * fifo was full and interrupt is generated. It clears with + * SPI_CTRL_REG.SPI_FIFO_RESET */ + __IM uint32_t SPI_TRANSACTION_ACTIVE : 1; /*!< [15..15] In master mode0 = spi transaction is inactive1 = spi + * transaction is active */ + uint32_t : 16; + } SPI2_FIFO_STATUS_REG_b; + }; + + union + { + __IOM uint32_t SPI2_FIFO_READ_REG; /*!< (@ 0x0000001C) Spi RX fifo read register */ + + struct + { + __IM uint32_t SPI_FIFO_READ : 32; /*!< [31..0] Read from RX fifo. Read access is permit only if SPI_RX_FIFO_EMPTY=0. */ + } SPI2_FIFO_READ_REG_b; + }; + + union + { + __IOM uint32_t SPI2_FIFO_WRITE_REG; /*!< (@ 0x00000020) Spi TX fifo wtite register */ + + struct + { + __OM uint32_t SPI_FIFO_WRITE : 32; /*!< [31..0] Write to TX fifo. Write access is permit only if SPI_TX_FIFO_FULL + * is 0 */ + } SPI2_FIFO_WRITE_REG_b; + }; + + union + { + __IOM uint32_t SPI2_CS_CONFIG_REG; /*!< (@ 0x00000024) Spi cs configuration register */ + + struct + { + __IOM uint32_t SPI_CS_SELECT : 3; /*!< [2..0] Control the cs output in master mode0 = none slave device + * selected1 = selected slave device connected to GPIO with + * FUNC_MODE=SPI_CS02 = selected slave device connected to + * GPIO with FUNC_MODE=SPI_CS14 = selected slave device connected + * to GPIO with FUNC_MODE=GPIO */ + uint32_t : 29; + } SPI2_CS_CONFIG_REG_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t SPI2_TXBUFFER_FORCE_REG; /*!< (@ 0x0000002C) SPI TX buffer force low value */ + + struct + { + __OM uint32_t SPI_TXBUFFER_FORCE : 32; /*!< [31..0] Write directly the tx buffer . It must to be used only + * in slave mode */ + } SPI2_TXBUFFER_FORCE_REG_b; + }; +} SPI2_Type; /*!< Size = 48 (0x30) */ + +/* =========================================================================================================================== */ +/* ================ SRC_FIFO_IF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SRC_FIFO_IF registers (SRC_FIFO_IF) + */ + +typedef struct /*!< (@ 0x40003000) SRC_FIFO_IF Structure */ +{ + union + { + __IOM uint32_t APU_FIFO_STATUS_REG; /*!< (@ 0x00000000) APU FIFO Status */ + + struct + { + __IOM uint32_t SRC_CH1_IN_EMPTY : 1; /*!< [0..0] SRC input FIFO empty */ + __IOM uint32_t SRC_CH1_IN_FULL : 1; /*!< [1..1] SRC input FIFO full */ + __IOM uint32_t SRC_CH1_OUT_EMPTY : 1; /*!< [2..2] SRC output FIFO empty */ + __IOM uint32_t SRC_CH1_OUT_FULL : 1; /*!< [3..3] SRC output FIFO full */ + __IOM uint32_t SRC_CH2_IN_EMPTY : 1; /*!< [4..4] SRC input FIFO empty */ + __IOM uint32_t SRC_CH2_IN_FULL : 1; /*!< [5..5] SRC input FIFO full */ + __IOM uint32_t SRC_CH2_OUT_EMPTY : 1; /*!< [6..6] SRC output FIFO empty */ + __IOM uint32_t SRC_CH2_OUT_FULL : 1; /*!< [7..7] SRC output FIFO full */ + uint32_t : 8; + __IOM uint32_t DAI_CH1_OUT_EMPTY : 1; /*!< [16..16] DAI output FIFO empty */ + __IOM uint32_t DAI_CH1_OUT_FULL : 1; /*!< [17..17] DAI output FIFO full */ + __IOM uint32_t DAI_CH1_IN_EMPTY : 1; /*!< [18..18] DAI input FIFO empty */ + __IOM uint32_t DAI_CH1_IN_FULL : 1; /*!< [19..19] DAI input FIFO full */ + __IOM uint32_t DAI_CH2_OUT_EMPTY : 1; /*!< [20..20] DAI output FIFO empty */ + __IOM uint32_t DAI_CH2_OUT_FULL : 1; /*!< [21..21] DAI output FIFO full */ + __IOM uint32_t DAI_CH2_IN_EMPTY : 1; /*!< [22..22] DAI input FIFO empty */ + __IOM uint32_t DAI_CH2_IN_FULL : 1; /*!< [23..23] DAI input FIFO full */ + uint32_t : 8; + } APU_FIFO_STATUS_REG_b; + }; + __IM uint32_t RESERVED[3]; + + union + { + __IOM uint32_t APU_SRC_FIFO_IN1_REG; /*!< (@ 0x00000010) SRC data in 1 */ + + struct + { + __OM uint32_t SRC_IN : 32; /*!< [31..0] SRC_FIFO_IN1 */ + } APU_SRC_FIFO_IN1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_FIFO_IN2_REG; /*!< (@ 0x00000014) SRC data in 2 */ + + struct + { + __OM uint32_t SRC_IN : 32; /*!< [31..0] SRC_FIFO_IN2 */ + } APU_SRC_FIFO_IN2_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_FIFO_OUT1_REG; /*!< (@ 0x00000018) SRC data out 1 */ + + struct + { + __IM uint32_t SRC_OUT : 32; /*!< [31..0] SRC_FIFO_OUT1 */ + } APU_SRC_FIFO_OUT1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_FIFO_OUT2_REG; /*!< (@ 0x0000001C) SRC data out 2 */ + + struct + { + __IM uint32_t SRC_OUT : 32; /*!< [31..0] SRC_FIFO_OUT2 */ + } APU_SRC_FIFO_OUT2_REG_b; + }; + + union + { + __IOM uint32_t APU_DAI_FIFO_IN1_REG; /*!< (@ 0x00000020) DAI data in 1 */ + + struct + { + __OM uint32_t DAI_IN : 32; /*!< [31..0] DAI_FIFO_OUT1 */ + } APU_DAI_FIFO_IN1_REG_b; + }; + + union + { + __IOM uint32_t APU_DAI_FIFO_IN2_REG; /*!< (@ 0x00000024) DAI data in 2 */ + + struct + { + __OM uint32_t DAI_IN : 32; /*!< [31..0] DAI_FIFO_OUT2 */ + } APU_DAI_FIFO_IN2_REG_b; + }; + + union + { + __IOM uint32_t APU_DAI_FIFO_OUT1_REG; /*!< (@ 0x00000028) DAI data out 1 */ + + struct + { + __IM uint32_t DAI_OUT : 32; /*!< [31..0] DAI_FIFO_IN1 */ + } APU_DAI_FIFO_OUT1_REG_b; + }; + + union + { + __IOM uint32_t APU_DAI_FIFO_OUT2_REG; /*!< (@ 0x0000002C) DAI data out 2 */ + + struct + { + __IM uint32_t DAI_OUT : 32; /*!< [31..0] DAI_FIFO_IN2 */ + } APU_DAI_FIFO_OUT2_REG_b; + }; +} SRC_FIFO_IF_Type; /*!< Size = 48 (0x30) */ + +/* =========================================================================================================================== */ +/* ================ SRC_IF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SRC_IF registers (SRC_IF) + */ + +typedef struct /*!< (@ 0x400E0C00) SRC_IF Structure */ +{ + __IM uint32_t RESERVED[8]; + + union + { + __IOM uint32_t APU_SRC_CTRL_REG; /*!< (@ 0x00000020) SRC control register */ + + struct + { + __IOM uint32_t SRC_EN : 1; /*!< [0..0] SRC_IN and SRC_OUT enable0: disabled1: enabled */ + __IOM uint32_t SRC_IN_AMODE : 1; /*!< [1..1] SRC_IN Automatic conversion mode0: Manual mode1: Automatic + * mode */ + __IOM uint32_t SRC_IN_CAL_BYPASS : 1; /*!< [2..2] SRC_IN upsampling filter bypass0: Do not bypass1: Bypass + * filter */ + __IOM uint32_t SRC_PDM_IN_INV : 1; /*!< [3..3] Invert PDM_CLK, see timing diagrams */ + __IOM uint32_t SRC_IN_DS : 2; /*!< [5..4] SRC_IN UpSampling IIR filters setting00: for sample rates + * up-to 48kHz01: for sample rates of 96kHz10: reserved11: + * for sample rates of 192kHz */ + __IM uint32_t SRC_IN_OK : 1; /*!< [6..6] SRC_IN status0: Acquisition in progress1: Acquisition + * ready */ + __IOM uint32_t SRC_DITHER_DISABLE : 1; /*!< [7..7] Dithering feature0: Enable1: Disable */ + __IOM uint32_t SRC_PCM_GAIN : 2; /*!< [9..8] PCM Input gain */ + __IOM uint32_t SRC_FIFO_IN1_ENABLE : 1; /*!< [10..10] 0: fifo_in1 disable. On each src request, one sample + * is serviced1: fifo_in1 enable. Fifo is used to store samples + * to srcSRC supports only DMA burst size 4 when fifo is enable + * else no burst */ + __IOM uint32_t SRC_FIFO_IN2_ENABLE : 1; /*!< [11..11] 0: fifo_in2 disable. On each src request, one sample + * is serviced1: fifo_in2 enable. Fifo is used to store samples + * to srcSRC supports only DMA burst size 4 when fifo is enable + * else no burst */ + __IOM uint32_t SRC_PDM_EN : 1; /*!< [12..12] PDM input enable */ + __IOM uint32_t SRC_OUT_AMODE : 1; /*!< [13..13] SRC_OUT1 Automatic Conversion mode0:Manual mode1:Automatic + * mode */ + __IOM uint32_t SRC_OUT_CAL_BYPASS : 1; /*!< [14..14] SRC_OUT1 upsampling filter bypass0: Do not bypass1: + * Bypass filter */ + __IOM uint32_t SRC_OUT_SET : 1; /*!< [15..15] SRC_OUT Filter coefficient set selection0: Set 1 is + * intended for wide band and full band audio (16-48 kHz). + * The filters are optimized for a narrow transition band + * and excellent anti-aliasing suppression.1: Set 2 is for + * intended for narrowband and wide band voice calls (8-16 + * kHz). The filters are optimized for low-latency. */ + __IOM uint32_t SRC_OUT_US : 2; /*!< [17..16] SRC_OUT UpSampling IIR filters setting00: for sample + * rates up-to 48kHz01: for sample rates of 96kHz10: reserved11: + * for sample rates of 192kHz */ + __IM uint32_t SRC_OUT_OK : 1; /*!< [18..18] SRC_OUT Status0: acquisition in progress1: acquisition + * ready (In manual mode this bit is always 1) */ + __OM uint32_t SRC_RESYNC : 1; /*!< [19..19] 1: SRC will restart synchronisation */ + __IM uint32_t SRC_IN_OVFLOW : 1; /*!< [20..20] 1: SRC_IN Overflow occurred */ + __IM uint32_t SRC_IN_UNFLOW : 1; /*!< [21..21] 1: SRC_IN Underflow occurred */ + __IM uint32_t SRC_OUT_OVFLOW : 1; /*!< [22..22] 1: SRC_OUT Overflow occurred */ + __IM uint32_t SRC_OUT_UNFLOW : 1; /*!< [23..23] 1: SRC_OUT Underflow occurred */ + __OM uint32_t SRC_IN_FLOWCLR : 1; /*!< [24..24] Writing a 1 clears the SRC_IN Overflow/underflow bits + * 21-20. No more over/underflow indications while bit is + * 1. Keep 1 until the over/under flow bit is cleared */ + __OM uint32_t SRC_OUT_FLOWCLR : 1; /*!< [25..25] Writing a 1 clears the SRC_OUT Overflow/underflow bits + * 23-22. No more over/underflow indications while bit is + * 1. Keep 1 until the over/under flow bit is cleared */ + __IOM uint32_t SRC_FIFO_OUT1_ENABLE : 1; /*!< [26..26] 0: fifo_out1 disable. On each src request, one sample + * is serviced1: fifo_out1 enable. Fifo is used to store samples + * from srcSRC supports only DMA burst size 4 when fifo is + * enable else no burst */ + __IOM uint32_t SRC_FIFO_OUT2_ENABLE : 1; /*!< [27..27] 0: fifo_out2 disable. On each src request, one sample + * is serviced1: fifo_out2 enable. Fifo is used to store samples + * from srcSRC supports only DMA burst size 4 when fifo is + * enable else no burst */ + uint32_t : 2; + __IOM uint32_t SRC_IN_COEF_SET : 1; /*!< [30..30] SRC_IN Filter coefficient set selection0: Set 1 is + * intended for wideband and fullband audio (16-48 kHz). The + * filters are optimized for a narrow transition band and + * excellent anti-aliasing suppression.1: Set 2 is for intended + * for narrowband and wideband voice calls (8-16 kHz). The + * filters are optimized for low-latency. */ + uint32_t : 1; + } APU_SRC_CTRL_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_IN_FS_REG; /*!< (@ 0x00000024) SRC Sample input rate */ + + struct + { + __IOM uint32_t SRC_IN_FS : 24; /*!< [23..0] SRC_IN Sample rateSRC_IN_FS = 4096*Sample_rate/100*(32768/SRC_CLK)Samp + * e_rate upper limit is 192kHz. For 96kHz and 192kHz SRC_CTRLx_REG[SRC_IN_D + * ] must be set as shown below:For SRC_CLK=32.768 kHz, SRC_DIV=1:Sample_rat + * SRC_IN_FS SRC_IN_DS Audio bandwidth8000 Hz 0x050000 0 4000 + * Hz11025 Hz 0x06E400 0 5512 Hz16000 Hz 0x0A0000 0 8000 Hz22050 + * Hz 0x0DC800 0 11025 Hz32000 Hz 0x140000 0 16000 Hz44100 + * Hz 0x1B9 */ + uint32_t : 8; + } APU_SRC_IN_FS_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_OUT_FS_REG; /*!< (@ 0x00000028) SRC Sample output rate */ + + struct + { + __IOM uint32_t SRC_OUT_FS : 24; /*!< [23..0] SRC_OUT Sample rateSRC_IN_FS = 4096*Sample_rate/100*(32768/SRC_CLK)Sam + * le_rate upper limit is 192kHz. For 96kHz and 192kHz SRC_CTRLx_REG[SRC_OUT + * US] must be set as shown below:For SRC_CLK=32.768 kHz, + * SRC_DIV=1:Sample_rate SRC_OUT_FS SRC_OUT_US Audio bandwidth8000 + * Hz 0x050000 0 4000 Hz11025 Hz 0x06E400 0 5512 Hz16000 Hz + * 0x0A0000 0 8000 Hz22050 Hz 0x0DC800 0 11025 Hz32000 Hz + * 0x140000 0 16000 Hz */ + uint32_t : 8; + } APU_SRC_OUT_FS_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_IN1_REG; /*!< (@ 0x0000002C) SRC data in 1 */ + + struct + { + __IOM uint32_t SRC_IN : 32; /*!< [31..0] SRC_IN1 */ + } APU_SRC_IN1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_IN2_REG; /*!< (@ 0x00000030) SRC data in 2 */ + + struct + { + __IOM uint32_t SRC_IN : 32; /*!< [31..0] SRC_IN2 */ + } APU_SRC_IN2_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_OUT1_REG; /*!< (@ 0x00000034) SRC data out 1 */ + + struct + { + __IM uint32_t SRC_OUT : 32; /*!< [31..0] SRC_OUT1 */ + } APU_SRC_OUT1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_OUT2_REG; /*!< (@ 0x00000038) SRC data out 2 */ + + struct + { + __IM uint32_t SRC_OUT : 32; /*!< [31..0] SRC_OUT2 */ + } APU_SRC_OUT2_REG_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t APU_SRC_FIFO_CTRL_REG; /*!< (@ 0x00000040) SRC FIFO control */ + + struct + { + __IOM uint32_t FIFO_CTRL : 32; /*!< [31..0] bit0 : FIFO enablebit10 : input channel 1 enablebit11 + * : input channel 2 enablebit26 : output channel 1 enablebit27 + * : output channel 2 enable */ + } APU_SRC_FIFO_CTRL_REG_b; + }; + + union + { + __IOM uint32_t APU_DAI_FIFO_CTRL_REG; /*!< (@ 0x00000044) DAI FIFO control */ + + struct + { + __IOM uint32_t FIFO_CTRL : 32; /*!< [31..0] bit0 : FIFO enablebit10 : input channel 1 enablebit11 + * : input channel 2 enablebit26 : output channel 1 enablebit27 + * : output channel 2 enable */ + } APU_DAI_FIFO_CTRL_REG_b; + }; + __IM uint32_t RESERVED2[38]; + + union + { + __IOM uint32_t APU_SRC_COEF10_SET1_REG; /*!< (@ 0x000000E0) SRC coefficient 1,0 set 1 */ + + struct + { + __IOM uint32_t SRC_COEF0 : 16; /*!< [15..0] coefficient 0 */ + __IOM uint32_t SRC_COEF1 : 16; /*!< [31..16] coefficient 1 */ + } APU_SRC_COEF10_SET1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF32_SET1_REG; /*!< (@ 0x000000E4) SRC coefficient 3,2 set 1 */ + + struct + { + __IOM uint32_t SRC_COEF2 : 16; /*!< [15..0] coefficient 2 */ + __IOM uint32_t SRC_COEF3 : 16; /*!< [31..16] coefficient 3 */ + } APU_SRC_COEF32_SET1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF54_SET1_REG; /*!< (@ 0x000000E8) SRC coefficient 5,4 set 1 */ + + struct + { + __IOM uint32_t SRC_COEF4 : 16; /*!< [15..0] coefficient 4 */ + __IOM uint32_t SRC_COEF5 : 16; /*!< [31..16] coefficient 5 */ + } APU_SRC_COEF54_SET1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF76_SET1_REG; /*!< (@ 0x000000EC) SRC coefficient 7,6 set 1 */ + + struct + { + __IOM uint32_t SRC_COEF6 : 16; /*!< [15..0] coefficient 6 */ + __IOM uint32_t SRC_COEF7 : 16; /*!< [31..16] coefficient 7 */ + } APU_SRC_COEF76_SET1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF98_SET1_REG; /*!< (@ 0x000000F0) SRC coefficient 9,8 set 1 */ + + struct + { + __IOM uint32_t SRC_COEF8 : 16; /*!< [15..0] coefficient 8 */ + __IOM uint32_t SRC_COEF9 : 16; /*!< [31..16] coefficient 9 */ + } APU_SRC_COEF98_SET1_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF0A_SET1_REG; /*!< (@ 0x000000F4) SRC coefficient 10 set 1 */ + + struct + { + __IOM uint32_t SRC_COEF10 : 16; /*!< [15..0] coefficient 10 */ + uint32_t : 16; + } APU_SRC_COEF0A_SET1_REG_b; + }; + __IM uint32_t RESERVED3[2]; + + union + { + __IOM uint32_t APU_SRC_COEF10_SET2_REG; /*!< (@ 0x00000100) SRC coefficient 1,0 set 2 */ + + struct + { + __IOM uint32_t SRC_COEF0 : 16; /*!< [15..0] coefficient 0 */ + __IOM uint32_t SRC_COEF1 : 16; /*!< [31..16] coefficient 1 */ + } APU_SRC_COEF10_SET2_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF32_SET2_REG; /*!< (@ 0x00000104) SRC coefficient 3,2 set 2 */ + + struct + { + __IOM uint32_t SRC_COEF2 : 16; /*!< [15..0] coefficient 2 */ + __IOM uint32_t SRC_COEF3 : 16; /*!< [31..16] coefficient 3 */ + } APU_SRC_COEF32_SET2_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF54_SET2_REG; /*!< (@ 0x00000108) SRC coefficient 5,4 set 2 */ + + struct + { + __IOM uint32_t SRC_COEF4 : 16; /*!< [15..0] coefficient 4 */ + __IOM uint32_t SRC_COEF5 : 16; /*!< [31..16] coefficient 5 */ + } APU_SRC_COEF54_SET2_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF76_SET2_REG; /*!< (@ 0x0000010C) SRC coefficient 7,6 set 2 */ + + struct + { + __IOM uint32_t SRC_COEF6 : 16; /*!< [15..0] coefficient 6 */ + __IOM uint32_t SRC_COEF7 : 16; /*!< [31..16] coefficient 7 */ + } APU_SRC_COEF76_SET2_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF98_SET2_REG; /*!< (@ 0x00000110) SRC coefficient 9,8 set 2 */ + + struct + { + __IOM uint32_t SRC_COEF8 : 16; /*!< [15..0] coefficient 8 */ + __IOM uint32_t SRC_COEF9 : 16; /*!< [31..16] coefficient 9 */ + } APU_SRC_COEF98_SET2_REG_b; + }; + + union + { + __IOM uint32_t APU_SRC_COEF0A_SET2_REG; /*!< (@ 0x00000114) SRC coefficient 10 set 2 */ + + struct + { + __IOM uint32_t SRC_COEF10 : 16; /*!< [15..0] coefficient 10 */ + uint32_t : 16; + } APU_SRC_COEF0A_SET2_REG_b; + }; +} SRC_IF_Type; /*!< Size = 280 (0x118) */ + +/* =========================================================================================================================== */ +/* ================ SYS_WDOG ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SYS_WDOG registers (SYS_WDOG) + */ + +typedef struct /*!< (@ 0x400C0700) SYS_WDOG Structure */ +{ + union + { + __IOM uint32_t WATCHDOG_REG; /*!< (@ 0x00000000) Watchdog timer register. */ + + struct + { + __IOM uint32_t WDOG_VAL : 13; /*!< [12..0] Write: Watchdog timer reload value. Note that all bits + * [31-14] must be 0 to reload this register.Read: Actual + * Watchdog timer value. Decremented by 1 every ~10 ms (RC32K) + * or ~29 ms (RCX), the Watchdog timer clock tick.Bit 13 indicates + * a negative counter value. 2, 1, 0, 3FFF16, 3FFE16 and so + * forth. An NMI or WDOG (SYS) reset is generated under the + * following conditions:If WATCHDOG_CTRL_REG[NMI_RST] = 0 + * then If WDOG_VAL = 0 -> NMI (Non Maskable Interrupt) if + * WDOG_VAL =3FF016 -> WDOG res */ + __IOM uint32_t WDOG_VAL_NEG : 1; /*!< [13..13] 0 = Watchdog timer value is positive.1 = Watchdog timer + * value is negative. */ + __OM uint32_t WDOG_WEN : 18; /*!< [31..14] If Bit [31:14] = 0, then write enable for Watchdog + * timer, else write disable.This filter prevents unintentional + * presetting the watchdog with a software runaway. */ + } WATCHDOG_REG_b; + }; + + union + { + __IOM uint32_t WATCHDOG_CTRL_REG; /*!< (@ 0x00000004) WATCHDOG_CTRL_REG */ + + struct + { + __IOM uint32_t NMI_RST : 1; /*!< [0..0] 0 = Watchdog timer generates NMI at value 0, and WDOG + * (SYS) reset at <= -16. Timer can be frozen/resumed using + * SET_FREEZE_REG[FRZ_WDOG] / RESET_FREEZE_REG[FRZ_WDOG].1 + * = Watchdog timer generates a WDOG (SYS) reset at value + * 0 and cannot be frozen by Software.Note that this bit can + * only be set to 1 by SW and only be reset with a WDOG (SYS) + * reset or SW reset.The watchdog is always frozen when the + * Cortex-M33 is halted in DEBUG state */ + uint32_t : 1; + __IOM uint32_t WDOG_FREEZE_EN : 1; /*!< [2..2] 0 = Watchdog timer cannot be frozen when NMI_RST = 01 + * = Watchdog timer can be frozen / resumed using SET_FREEZE_REG[FRZ_WDOG] + * / RESET_FREEZE_REG[FRZ_WDOG] when NMI_RST = 0. */ + __IM uint32_t WRITE_BUSY : 1; /*!< [3..3] 0 = A new WATCHDOG_REG[WDOG_VAL] can be written.1 = No + * new WATCHDOG_REG[WDOG_VAL] can be written.Note : It takes + * some time before the programmed WDOG_VAL is updated in + * the (independent) Watchdog timer. During this time, it + * is not possible to write a new value to WATCHDOG_REG[WDOG_VAL]. */ + uint32_t : 28; + } WATCHDOG_CTRL_REG_b; + }; +} SYS_WDOG_Type; /*!< Size = 8 (0x8) */ + +/* =========================================================================================================================== */ +/* ================ SYSBUS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SYSBUS registers (SYSBUS) + */ + +typedef struct /*!< (@ 0x2F000000) SYSBUS Structure */ +{ + union + { + __IOM uint32_t AHB_DMA_PL1_REG; /*!< (@ 0x00000000) AHB-DMA layer priority level RFMON */ + + struct + { + __IOM uint32_t AHB_DMA_PL1 : 4; /*!< [3..0] Arbitration priority for master RFMON.0 : disables the + * master1 : lowest ... 15: highest */ + uint32_t : 28; + } AHB_DMA_PL1_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_PL2_REG; /*!< (@ 0x00000004) AHB-DMA layer priority level GEN-DMA */ + + struct + { + __IOM uint32_t AHB_DMA_PL2 : 4; /*!< [3..0] Arbitration priority for master GEN-DMA.0 : disables + * the master1 : lowest ... 15: highest */ + uint32_t : 28; + } AHB_DMA_PL2_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_PL3_REG; /*!< (@ 0x00000008) AHB-DMA layer priority level kDMA */ + + struct + { + __IOM uint32_t AHB_DMA_PL3 : 4; /*!< [3..0] Arbitration priority for master kDMA.0 : disables the + * master1 : lowest ... 15: highest */ + uint32_t : 28; + } AHB_DMA_PL3_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_PL4_REG; /*!< (@ 0x0000000C) AHB-DMA layer priority level SDIO_M */ + + struct + { + __IOM uint32_t AHB_DMA_PL4 : 4; /*!< [3..0] Arbitration priority for master SDIO.0 : disables the + * master1 : lowest ... 15: highest */ + uint32_t : 28; + } AHB_DMA_PL4_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_PL5_REG; /*!< (@ 0x00000010) AHB-DMA layer priority level SDeMMC_M */ + + struct + { + __IOM uint32_t AHB_DMA_PL5 : 4; /*!< [3..0] Arbitration priority for master SDeMMC.0 : disables the + * master1 : lowest ... 15: highest */ + uint32_t : 28; + } AHB_DMA_PL5_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_PL6_REG; /*!< (@ 0x00000014) AHB-DMA layer Priority level CC312_M */ + + struct + { + __IOM uint32_t AHB_DMA_PL6 : 4; /*!< [3..0] Arbitration priority for master CC3120 : disables the + * master1 : lowest ... 15: highest */ + uint32_t : 28; + } AHB_DMA_PL6_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_PL7_REG; /*!< (@ 0x00000018) AHB-DMA layer Priority level CPU-S to AHB_DMA + * arbiter registers */ + + struct + { + __IOM uint32_t AHB_DMA_PL7 : 4; /*!< [3..0] Arbitration priority for master CPU-S.0 : disables the + * master1 : lowest ... 15: highest */ + uint32_t : 28; + } AHB_DMA_PL7_REG_b; + }; + __IM uint32_t RESERVED[11]; + + union + { + __IOM uint32_t AHB_DMA_DFLT_MASTER_REG; /*!< (@ 0x00000048) Default master ID number (AHB DMA layer only) */ + + struct + { + __IOM uint32_t AHB_DMA_DFLT_MASTER : 4; /*!< [3..0] Default master ID number register. The default master + * is the master that is granted by the bus when no master + * has requested ownership.0: Dummy master1: RFMON2: GP-DMA3: + * kDMA4: CPU-S */ + uint32_t : 28; + } AHB_DMA_DFLT_MASTER_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_WTEN_REG; /*!< (@ 0x0000004C) Weighted-Token Arbitration Scheme Enable (AHB + * DMA layer only) */ + + struct + { + __IOM uint32_t AHB_DMA_WTEN : 1; /*!< [0..0] Weighted-token arbitration scheme enable. */ + uint32_t : 31; + } AHB_DMA_WTEN_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_TCL_REG; /*!< (@ 0x00000050) Master clock refresh period (AHB DMA layer only) */ + + struct + { + __IOM uint32_t AHB_DMA_TCL : 16; /*!< [15..0] Master clock refresh period, counting clock cycles. + * An arbitration period is defined over this number of tokens. + * When a new arbitration period starts, the master counters + * are reloaded. Recommended value is the sum of the AHB_DMA_CCLMx_REG + * valuesplus 2 tokens for each master. */ + uint32_t : 16; + } AHB_DMA_TCL_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_CCLM1_REG; /*!< (@ 0x00000054) RFMON Master clock tokens */ + + struct + { + __IOM uint32_t AHB_DMA_CCLM : 16; /*!< [15..0] Number of tokens (counted in AHB clock cycles) that + * a master can use on the bus before it has to arbitrate + * on a bus master with low priority and having tokens. Masters + * with tokens remaining have priority over masters that have + * used all of their tokens. User should configure all the + * token values ensuring that the sum does not exceeds the + * total allocated number of tokens. If a value of zero is + * configured, then the bus is deemed to have infinite tokens + * and will always operate in the upper-tier of arbitratio */ + uint32_t : 16; + } AHB_DMA_CCLM1_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_CCLM2_REG; /*!< (@ 0x00000058) GEN-DMA Master clock tokens */ + + struct + { + __IOM uint32_t AHB_DMA_CCLM : 16; /*!< [15..0] Refer to AHB_DMA_CCLM1_REG */ + uint32_t : 16; + } AHB_DMA_CCLM2_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_CCLM3_REG; /*!< (@ 0x0000005C) kDMA Master clock tokens */ + + struct + { + __IOM uint32_t AHB_DMA_CCLM : 16; /*!< [15..0] Refer to AHB_DMA_CCLM1_REG */ + uint32_t : 16; + } AHB_DMA_CCLM3_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_CCLM4_REG; /*!< (@ 0x00000060) SDIO Master clock tokens */ + + struct + { + __IOM uint32_t AHB_DMA_CCLM : 16; /*!< [15..0] Refer to AHB_DMA_CCLM1_REG */ + uint32_t : 16; + } AHB_DMA_CCLM4_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_CCLM5_REG; /*!< (@ 0x00000064) SDeMMC Master clock tokens */ + + struct + { + __IOM uint32_t AHB_DMA_CCLM : 16; /*!< [15..0] Refer to AHB_DMA_CCLM1_REG */ + uint32_t : 16; + } AHB_DMA_CCLM5_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_CCLM6_REG; /*!< (@ 0x00000068) CPU-S Master clock tokens */ + + struct + { + __IOM uint32_t AHB_DMA_CCLM : 16; /*!< [15..0] Refer to AHB_DMA_CCLM1_REG */ + uint32_t : 16; + } AHB_DMA_CCLM6_REG_b; + }; + + union + { + __IOM uint32_t AHB_DMA_CCLM7_REG; /*!< (@ 0x0000006C) CPU-S Master clock tokens */ + + struct + { + __IOM uint32_t AHB_DMA_CCLM : 16; /*!< [15..0] Refer to AHB_DMA_CCLM1_REG */ + uint32_t : 16; + } AHB_DMA_CCLM7_REG_b; + }; + __IM uint32_t RESERVED1[8]; + + union + { + __IOM uint32_t AHB_DMA_VERSION_REG; /*!< (@ 0x00000090) Version ID (AHB DMA layer only) */ + + struct + { + __IM uint32_t AHB_DMA_VERSION : 32; /*!< [31..0] AHB_DMA_VERSION */ + } AHB_DMA_VERSION_REG_b; + }; +} SYSBUS_Type; /*!< Size = 148 (0x94) */ + +/* =========================================================================================================================== */ +/* ================ SYSBUS_ICM ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SYSBUS_ICM registers (SYSBUS_ICM) + */ + +typedef struct /*!< (@ 0x40070400) SYSBUS_ICM Structure */ +{ + union + { + __IOM uint32_t QSPIRAM_ARB_REG; /*!< (@ 0x00000000) QSPIRAM ICM Priority level */ + + struct + { + __IOM uint32_t QSPIRAM_AHB_DMA_PRIO : 1; /*!< [0..0] priority AHB DMA layer system bus0x0 : Highest priority0x1 + * : Second prority */ + __IOM uint32_t QSPIRAM_AHB_CPUS_PRIO : 1; /*!< [1..1] priority AHB CPUS layer system bus0x0 : Highest priority0x1 + * : Second prority */ + uint32_t : 30; + } QSPIRAM_ARB_REG_b; + }; + + union + { + __IOM uint32_t AHBSYS_ARB_REG; /*!< (@ 0x00000004) AHBSYS Peri ICM Priority level */ + + struct + { + __IOM uint32_t AHBSYS_AHB_DMA_PRIO : 1; /*!< [0..0] priority AHB DMA layer system bus0x0 : Highest priority0x1 + * : Second prority */ + __IOM uint32_t AHBSYS_AHB_CPUS_PRIO : 1; /*!< [1..1] priority AHB CPUS layer system bus0x0 : Highest priority0x1 + * : Second prority */ + uint32_t : 30; + } AHBSYS_ARB_REG_b; + }; + + union + { + __IOM uint32_t OTP_ARB_REG; /*!< (@ 0x00000008) OTP ICM Priority level */ + + struct + { + __IOM uint32_t OTP_AHB_CPUS_PRIO : 1; /*!< [0..0] priorityAHB_CPUS layer system bus0x0 : Highest priority0x1 + * : Second prority */ + __IOM uint32_t OTP_AHB_DMA_PRIO : 1; /*!< [1..1] priority AHB_DMA layer system bus0x0 : Highest priority0x1 + * : Second prority */ + uint32_t : 30; + } OTP_ARB_REG_b; + }; +} SYSBUS_ICM_Type; /*!< Size = 12 (0xc) */ + +/* =========================================================================================================================== */ +/* ================ TDES ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TDES registers (TDES) + */ + +typedef struct /*!< (@ 0x40030000) TDES Structure */ +{ + union + { + __IOM uint32_t TDES_CBC_CTRL_REG; /*!< (@ 0x00000000) CTRL_REG */ + + struct + { + __IOM uint32_t TDES_CBC_ED_SEL : 1; /*!< [0..0] 3DES enc/dec selection1: encryption0: decryption */ + __IOM uint32_t TDES_CBC_IRQ_EN : 1; /*!< [1..1] irq enable */ + uint32_t : 6; + __IOM uint32_t TDES_CBC_START : 1; /*!< [8..8] calculate start */ + uint32_t : 7; + __IOM uint32_t TDES_CBC_FIRST : 1; /*!< [16..16] CBC First */ + uint32_t : 7; + __IM uint32_t TDES_CBC_DONE : 1; /*!< [24..24] 3DES Done */ + uint32_t : 7; + } TDES_CBC_CTRL_REG_b; + }; + + union + { + __IOM uint32_t CBC_IV_0_REG; /*!< (@ 0x00000004) Initial Vector [ 0:31] */ + + struct + { + __IOM uint32_t CBC_IV_0 : 32; /*!< [31..0] Initial Vector [ 0:31] */ + } CBC_IV_0_REG_b; + }; + + union + { + __IOM uint32_t CBC_IV_1_REG; /*!< (@ 0x00000008) Initial Vector [32:63] */ + + struct + { + __IOM uint32_t CBC_IV_1 : 32; /*!< [31..0] Initial Vector [32:63] */ + } CBC_IV_1_REG_b; + }; + + union + { + __IOM uint32_t TDES_KEY1_0_REG; /*!< (@ 0x0000000C) key1 [ 0:31] */ + + struct + { + __IOM uint32_t TDES_KEY1_0 : 32; /*!< [31..0] key1 [ 0:31] */ + } TDES_KEY1_0_REG_b; + }; + + union + { + __IOM uint32_t TDES_KEY1_1_REG; /*!< (@ 0x00000010) key1 [32:63] */ + + struct + { + __IOM uint32_t TDES_KEY1_1 : 32; /*!< [31..0] key1 [32:63] */ + } TDES_KEY1_1_REG_b; + }; + + union + { + __IOM uint32_t TDES_KEY2_0_REG; /*!< (@ 0x00000014) key2 [ 0:31] */ + + struct + { + __IOM uint32_t TDES_KEY2_0 : 32; /*!< [31..0] key2 [ 0:31] */ + } TDES_KEY2_0_REG_b; + }; + + union + { + __IOM uint32_t TDES_KEY2_1_REG; /*!< (@ 0x00000018) key2 [32:63] */ + + struct + { + __IOM uint32_t TDES_KEY2_1 : 32; /*!< [31..0] key2 [32:63] */ + } TDES_KEY2_1_REG_b; + }; + + union + { + __IOM uint32_t TDES_KEY3_0_REG; /*!< (@ 0x0000001C) key3 [ 0:31] */ + + struct + { + __IOM uint32_t TDES_KEY3_0 : 32; /*!< [31..0] key3 [ 0:31] */ + } TDES_KEY3_0_REG_b; + }; + + union + { + __IOM uint32_t TDES_KEY3_1_REG; /*!< (@ 0x00000020) key3 [32:63] */ + + struct + { + __IOM uint32_t TDES_KEY3_1 : 32; /*!< [31..0] key3 [32:63] */ + } TDES_KEY3_1_REG_b; + }; + + union + { + __IOM uint32_t TDES_INPUT_0_REG; /*!< (@ 0x00000024) Input Text [ 0:31] */ + + struct + { + __IOM uint32_t TDES_INPUT_0 : 32; /*!< [31..0] Input Text [ 0:31] */ + } TDES_INPUT_0_REG_b; + }; + + union + { + __IOM uint32_t TDES_INPUT_1_REG; /*!< (@ 0x00000028) Input Text [32:63] */ + + struct + { + __IOM uint32_t TDES_INPUT_1 : 32; /*!< [31..0] Input Text [32:63] */ + } TDES_INPUT_1_REG_b; + }; + + union + { + __IOM uint32_t TDES_OUTPUT_0_REG; /*!< (@ 0x0000002C) Output Text [ 0:31] */ + + struct + { + __IM uint32_t TDES_OUTPUT_0 : 32; /*!< [31..0] Output Text [ 0:31] */ + } TDES_OUTPUT_0_REG_b; + }; + + union + { + __IOM uint32_t TDES_OUTPUT_1_REG; /*!< (@ 0x00000030) Output Text [32:63] */ + + struct + { + __IM uint32_t TDES_OUTPUT_1 : 32; /*!< [31..0] Output Text [32:63] */ + } TDES_OUTPUT_1_REG_b; + }; +} TDES_Type; /*!< Size = 52 (0x34) */ + +/* =========================================================================================================================== */ +/* ================ TIMER ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TIMER registers (TIMER) + */ + +typedef struct /*!< (@ 0x40080000) TIMER Structure */ +{ + union + { + __IOM uint32_t TIMER_CTRL_REG; /*!< (@ 0x00000000) Timer control register */ + + struct + { + __IOM uint32_t TIM_EN : 1; /*!< [0..0] Timer enable1 = On0 = Off */ + __IOM uint32_t TIM_ONESHOT_MODE_EN : 1; /*!< [1..1] Timer mode1 = One shot enabled0 = Counter enabled */ + __IOM uint32_t TIM_COUNT_DOWN_EN : 1; /*!< [2..2] Timer count direction1 = down0 = upNOTE: only change + * counter direction when timer is not enabled */ + __IOM uint32_t TIM_IN1_EVENT_FALL_EN : 1; /*!< [3..3] Event input 1 edge type1 = falling edge0 = rising edge */ + __IOM uint32_t TIM_IN2_EVENT_FALL_EN : 1; /*!< [4..4] Event input 2 edge type1 = falling edge0 = rising edge */ + __IOM uint32_t TIM_IRQ_EN : 1; /*!< [5..5] Interrupt mask1 = timer IRQ is unmasked0 = timer IRQ + * is masked */ + __IOM uint32_t TIM_FREE_RUN_MODE_EN : 1; /*!< [6..6] Valid when timer counts up, if it is '1' timer does not + * zero when reaches to reload value. it becomes zero only + * when it reaches the max value. */ + __IOM uint32_t TIM_SYS_CLK_EN : 1; /*!< [7..7] Select clock1 = Timer uses the DIVN clock0 = Timer uses + * the lp clockNOTE: when switching clock, the timer clock + * should be disabled (TIM_CLK_EN, bit 8) */ + __IOM uint32_t TIM_CLK_EN : 1; /*!< [8..8] Timer clock enable1 = clock enabled0 = clock disabled */ + __IOM uint32_t TIM_IN3_EVENT_FALL_EN : 1; /*!< [9..9] Event input 3 edge type1 = falling edge0 = rising edge */ + __IOM uint32_t TIM_IN4_EVENT_FALL_EN : 1; /*!< [10..10] Event input 4 edge type1 = falling edge0 = rising edge */ + __IOM uint32_t TIM_CAP_GPIO1_IRQ_EN : 1; /*!< [11..11] 0 = Event on GPIO1 does not create a CAPTIM interrrupt1 + * = Event on GPIO1 creates a CAPTIM interrrupt */ + __IOM uint32_t TIM_CAP_GPIO2_IRQ_EN : 1; /*!< [12..12] 0 = Event on GPIO2 does not create a CAPTIM interrrupt1 + * = Event on GPIO2 creates a CAPTIM interrrupt */ + __IOM uint32_t TIM_CAP_GPIO3_IRQ_EN : 1; /*!< [13..13] 0 = Event on GPIO3 does not create a CAPTIM interrrupt1 + * = Event on GPIO3 creates a CAPTIM interrrupt */ + __IOM uint32_t TIM_CAP_GPIO4_IRQ_EN : 1; /*!< [14..14] 0 = Event on GPIO4 does not create a CAPTIM interrrupt1 + * = Event on GPIO4 creates a CAPTIM interrrupt */ + __IOM uint32_t TIM_ONESHOT_TRIGGER : 2; /*!< [16..15] Oneshot trigger source00: Select external GPIO as the + * trigger for one shot01: Select a register write as the + * trigger of one shot10: Either of the two triggers one shot11: + * None of the two triggers one shot */ + __IOM uint32_t TIM_ONESHOT_SWITCH : 1; /*!< [17..17] Automatically switch after the completion of the pulse + * output without the CPU programming anything.0: No automated + * switch from OneShot to Counter mode1: Automated switch + * from OneShot to Counter mode and start counting down. In + * case no start value has been programmed (reload=0), the + * timer keeps generating interrupts until the timer clock + * is disabled */ + __IOM uint32_t TIM_EDGE_DET_CNT_EN : 1; /*!< [18..18] Enable edge detection counter.NOTE: In sleep only 80Mhz + * can be reached at 900 mV */ + __IOM uint32_t TIM_EDGE_DET_CNT_FALL_EN : 1; /*!< [19..19] Select on which edge the edge detection should react;0: + * the counter is triggered on a rising edge1: the counter + * is triggered on a falling edgeNOTE: Only change this when + * EDGE_DET_CNT_EN=0 in TIMER_CTRL_REG */ + __IOM uint32_t TIM_SINGLE_EVENT_CAPTURE : 1; /*!< [20..20] When this bit is set, only the first event on captimer1 + * is captured */ + uint32_t : 11; + } TIMER_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER_TIMER_VAL_REG; /*!< (@ 0x00000004) Timer counter value */ + + struct + { + __IM uint32_t TIM_TIMER_VALUE : 32; /*!< [31..0] Gives the current timer value */ + } TIMER_TIMER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER_STATUS_REG; /*!< (@ 0x00000008) Timer status register */ + + struct + { + __IM uint32_t TIM_IN1_STATE : 1; /*!< [0..0] Gives the logic level of the IN2 */ + __IM uint32_t TIM_IN2_STATE : 1; /*!< [1..1] Gives the logic level of the IN1 */ + __IM uint32_t TIM_ONESHOT_PHASE : 2; /*!< [3..2] OneShot phase0 = Wait for event1 = Delay phase2 = Start + * Shot3 = Shot phase */ + __IM uint32_t TIM_GPIO1_EVENT_PENDING : 1; /*!< [4..4] When 1, GPIO1 event is pending. */ + __IM uint32_t TIM_GPIO2_EVENT_PENDING : 1; /*!< [5..5] When 1, GPIO2 event is pending. */ + __IM uint32_t TIM_GPIO3_EVENT_PENDING : 1; /*!< [6..6] When 1, GPIO3 event is pending. */ + __IM uint32_t TIM_GPIO4_EVENT_PENDING : 1; /*!< [7..7] When 1, GPIO4 event is pending. */ + __IM uint32_t TIM_IRQ_STATUS : 1; /*!< [8..8] IRQ status bit. When an irq has occured, this bit is + * 1. */ + __IM uint32_t TIM_TIMER_BUSY : 1; /*!< [9..9] Busy with synchronizing PRESCALER_REG, RELOAD_REG and + * SHOTWIDTH_REG. Do not write a new value to these registers + * when this bit is high */ + __IM uint32_t TIM_PWM_BUSY : 1; /*!< [10..10] Busy with synchronizing PWM_FREQ_REG and PWM_DC_REG. + * Do not write a new value to these registers when this bit + * is high */ + __IM uint32_t TIM_SWITCHED_TO_DIVN_CLK : 1; /*!< [11..11] Indicates that timer clock has been switched to divn + * clock */ + __IM uint32_t TIM_IN3_STATE : 1; /*!< [12..12] Gives the logic level of the IN3 */ + __IM uint32_t TIM_IN4_STATE : 1; /*!< [13..13] Gives the logic level of the IN4 */ + __IM uint32_t TIM_IRQ_PULSE_STATUS : 1; /*!< [14..14] Status bit of IRQ pulse counter. When the pulse counter + * reaches the theshold value, this bit is 1 */ + __IM uint32_t TIM_CAPTIM_DETECTED : 1; /*!< [15..15] Indicates that a single event is detected when SINGLE_EVENT_CAPTURE + * is set to 1. Every next event will not update the capture + * timer register */ + uint32_t : 16; + } TIMER_STATUS_REG_b; + }; + + union + { + __IOM uint32_t TIMER_GPIO1_CONF_REG; /*!< (@ 0x0000000C) Timer gpio1 selection */ + + struct + { + __IOM uint32_t TIM_GPIO1_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN1, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER_GPIO1_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER_GPIO2_CONF_REG; /*!< (@ 0x00000010) Timer gpio2 selection */ + + struct + { + __IOM uint32_t TIM_GPIO2_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN2, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER_GPIO2_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER_SETTINGS_REG; /*!< (@ 0x00000014) Timer reload value and Delay in shot mode */ + + struct + { + __IOM uint32_t TIM_RELOAD2 : 32; /*!< [31..0] Reload or max value in timer mode, Delay phase duration + * in oneshot mode. Actual delay is the register value plus + * synchronization time (3 clock cycles) */ + } TIMER_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER_SHOTWIDTH_REG; /*!< (@ 0x00000018) Timer Shot duration in shot mode */ + + struct + { + __IOM uint32_t TIM_SHOTWIDTH2 : 32; /*!< [31..0] Shot phase duration in oneshot mode */ + } TIMER_SHOTWIDTH_REG_b; + }; + + union + { + __IOM uint32_t TIMER_PRE_SETTINGS_REG; /*!< (@ 0x0000001C) Timer reload value and Delay in shot mode */ + + struct + { + __IOM uint32_t TIM_PRESCALER2 : 5; /*!< [4..0] Defines the timer count frequency. CLOCK frequency / + * (TIM_PRESCALER+1) */ + uint32_t : 27; + } TIMER_PRE_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER_CAPTURE_GPIO1_REG; /*!< (@ 0x00000020) Timer value for event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO12 : 32; /*!< [31..0] Gives the Capture time for event on GPIO1 */ + } TIMER_CAPTURE_GPIO1_REG_b; + }; + + union + { + __IOM uint32_t TIMER_CAPTURE_GPIO2_REG; /*!< (@ 0x00000024) Timer value for event on GPIO2 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO22 : 32; /*!< [31..0] Gives the Capture time for event on GPIO2 */ + } TIMER_CAPTURE_GPIO2_REG_b; + }; + + union + { + __IOM uint32_t TIMER_PRESCALER_VAL_REG; /*!< (@ 0x00000028) Timer prescaler counter valuew */ + + struct + { + __IM uint32_t TIM_PRESCALER_VAL : 5; /*!< [4..0] Gives the current prescaler counter value */ + uint32_t : 27; + } TIMER_PRESCALER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER_PWM_CTRL_REG; /*!< (@ 0x0000002C) Timer pwm frequency register */ + + struct + { + __IOM uint32_t TIM_PWM_FREQ : 16; /*!< [15..0] Defines the PWM frequency. Timer clock frequency / (TIM_PWM_FREQ+1)Tim + * r clock is clock after prescaler */ + __IOM uint32_t TIM_PWM_DC : 16; /*!< [31..16] Defines the PWM duty cycle. TIM_PWM_DC / ( TIM_PWM_FREQ+1) */ + } TIMER_PWM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER_PULSE_GPIO_SEL_REG; /*!< (@ 0x00000030) Timer pulse counter ctrl register */ + + struct + { + __IOM uint32_t PULSE_CNT_GPIO_SEL2 : 6; /*!< [5..0] Select one of the 32 GPIOs as input for the pulse counter, + * Valid values 0-32.0: Disable input1: P0_002: P0_013: P0_024: + * P0_035: P0_046: P0_057: P0_068: P0_079: P0_0810: P0_0911: + * P0_1012: P0_1113: P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: + * P1_0319: P1_0420: P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: + * P1_1026: P1_1127: P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: + * P1_17 */ + uint32_t : 26; + } TIMER_PULSE_GPIO_SEL_REG_b; + }; + + union + { + __IOM uint32_t TIMER_GPIO3_CONF_REG; /*!< (@ 0x00000034) Timer gpio3 selection */ + + struct + { + __IOM uint32_t TIM_GPIO3_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN3, Valid value 0-32. + * 1 for the first gpio, 32 for the last gpio.0: Disable input1: + * P0_002: P0_013: P0_024: P0_035: P0_046: P0_057: P0_068: + * P0_079: P0_0810: P0_0911: P0_1012: P0_1113: P0_1214: P0_1315: + * P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: P1_0521: P1_0622: + * P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: P1_1228: P1_1329: + * P1_1430: P1_1531: P1_1 */ + uint32_t : 26; + } TIMER_GPIO3_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER_GPIO4_CONF_REG; /*!< (@ 0x00000038) Timer gpio4 selection */ + + struct + { + __IOM uint32_t TIM_GPIO4_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN4, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER_GPIO4_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER_CAPTURE_GPIO3_REG; /*!< (@ 0x0000003C) Timer value for event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO32 : 32; /*!< [31..0] Gives the Capture time for event on GPIO3 */ + } TIMER_CAPTURE_GPIO3_REG_b; + }; + + union + { + __IOM uint32_t TIMER_CAPTURE_GPIO4_REG; /*!< (@ 0x00000040) Timer value for event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO42 : 32; /*!< [31..0] Gives the Capture time for event on GPIO4 */ + } TIMER_CAPTURE_GPIO4_REG_b; + }; + + union + { + __IOM uint32_t TIMER_PULSE_CNT_CTRL_REG; /*!< (@ 0x00000044) Timer pulse counter ctrl register */ + + struct + { + __IOM uint32_t PULSE_CNT_THRESHOLD2 : 32; /*!< [31..0] Select after how many pulses an irq is fired for the + * pulse counter n-2.NOTE: Only change this when EDGE_DET_CNT_EN=0 + * in TIMER_CTRL_REG */ + } TIMER_PULSE_CNT_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER_ONESHOT_TRIGGER_REG; /*!< (@ 0x00000048) Timer oneshot trigger register */ + + struct + { + __OM uint32_t TIM_ONESHOT_TRIGGER_SW : 1; /*!< [0..0] trigger oneshot */ + uint32_t : 31; + } TIMER_ONESHOT_TRIGGER_REG_b; + }; + + union + { + __IOM uint32_t TIMER_PWM_SYNC_REG; /*!< (@ 0x0000004C) Timer pwm synchronisation register */ + + struct + { + __IOM uint32_t PWM_START : 1; /*!< [0..0] Start PWM of the selected timers */ + __IOM uint32_t SYNC_ENABLE : 1; /*!< [1..1] Enable PWM start synchronisation of the selected timers */ + __IOM uint32_t TIMER_SYNC : 1; /*!< [2..2] Enable PWM synchronisation of timer */ + __IOM uint32_t TIMER2_SYNC : 1; /*!< [3..3] Enable PWM start synchronisation of timer2 */ + __IOM uint32_t TIMER3_SYNC : 1; /*!< [4..4] Enable PWM start synchronisation of timer3 */ + __IOM uint32_t TIMER4_SYNC : 1; /*!< [5..5] Enable PWM start synchronisation of timer4 */ + __IOM uint32_t TIMER6_SYNC : 1; /*!< [6..6] Enable PWM start synchronisation of timer6 */ + uint32_t : 25; + } TIMER_PWM_SYNC_REG_b; + }; + + union + { + __IOM uint32_t TIMER_CLEAR_GPIO_EVENT_REG; /*!< (@ 0x00000050) Timer clear gpio event register */ + + struct + { + __OM uint32_t TIM_CLEAR_GPIO1_EVENT : 1; /*!< [0..0] 1 = Clear GPIO1 event. Return always 0 */ + __OM uint32_t TIM_CLEAR_GPIO2_EVENT : 1; /*!< [1..1] 1 = Clear GPIO2 event. Return always 0 */ + __OM uint32_t TIM_CLEAR_GPIO3_EVENT : 1; /*!< [2..2] 1 = Clear GPIO3 event. Return always 0 */ + __OM uint32_t TIM_CLEAR_GPIO4_EVENT : 1; /*!< [3..3] 1 = Clear GPIO4 event. Return always 0 */ + uint32_t : 28; + } TIMER_CLEAR_GPIO_EVENT_REG_b; + }; + + union + { + __IOM uint32_t TIMER_CLEAR_IRQ_REG; /*!< (@ 0x00000054) Timer clear interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_IRQ : 1; /*!< [0..0] Write any value clear interrupt */ + uint32_t : 31; + } TIMER_CLEAR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t TIMER_CLEAR_IRQ_PULSE_REG; /*!< (@ 0x00000058) Timer clear pulse interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_PULSE_IRQ : 1; /*!< [0..0] Write any value will clear irq pulse interrupt */ + uint32_t : 31; + } TIMER_CLEAR_IRQ_PULSE_REG_b; + }; +} TIMER_Type; /*!< Size = 92 (0x5c) */ + +/* =========================================================================================================================== */ +/* ================ TIMER2 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TIMER2 registers (TIMER2) + */ + +typedef struct /*!< (@ 0x40080100) TIMER2 Structure */ +{ + union + { + __IOM uint32_t TIMER2_CTRL_REG; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint32_t TIM_EN : 1; /*!< [0..0] Timer enable:0: Off1: On */ + __IOM uint32_t TIM_ONESHOT_MODE_EN : 1; /*!< [1..1] Timer mode:0: Counter is enabled.1: One shot is enabled. */ + __IOM uint32_t TIM_COUNT_DOWN_EN : 1; /*!< [2..2] Timer count direction:0: Up1: DownNOTE: Only change this + * bit when timer is disabled. */ + __IOM uint32_t TIM_IN1_EVENT_FALL_EN : 1; /*!< [3..3] Event input 1 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IN2_EVENT_FALL_EN : 1; /*!< [4..4] Event input 2 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IRQ_EN : 1; /*!< [5..5] Interrupt mask:0: Timer IRQ is disable.1: Timer IRQ is + * enable. */ + __IOM uint32_t TIM_FREE_RUN_MODE_EN : 1; /*!< [6..6] Valid when timer counts up, if it is '1' timer does not + * zero when reaches to reload value. it becomes zero only + * when it reaches the max value. */ + __IOM uint32_t TIM_SYS_CLK_EN : 1; /*!< [7..7] Timer clock selection:0: LP_CLK clock1: DIVN clockNOTE: + * When switching clock, the timer clock should be disabled + * (TIM_CLK_EN, bit 8). */ + __IOM uint32_t TIM_CLK_EN : 1; /*!< [8..8] Timer clock enable:0: Clock is disabled.1: Clock is enabled. */ + uint32_t : 9; + __IOM uint32_t TIM_EDGE_DET_CNT_EN : 1; /*!< [18..18] Edge detection counter:0: Disable1: Enable */ + __IOM uint32_t TIM_EDGE_DET_CNT_FALL_EN : 1; /*!< [19..19] Counter trigger edge selection:0: the counter is triggered + * on a rising edge.1: the counter is triggered on a falling + * edge.NOTE: Only change this when EDGE_DET_CNT_EN=0 in TIMER_CTRL_REG. */ + uint32_t : 12; + } TIMER2_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_TIMER_VAL_REG; /*!< (@ 0x00000004) Timer Counter Value */ + + struct + { + __IM uint32_t TIM_TIMER_VALUE2 : 32; /*!< [31..0] Gives the current timer value. */ + } TIMER2_TIMER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_STATUS_REG; /*!< (@ 0x00000008) Timer Status Register */ + + struct + { + __IM uint32_t TIM_IN1_STATE : 1; /*!< [0..0] Gives the logic level of the IN2. */ + __IM uint32_t TIM_IN2_STATE : 1; /*!< [1..1] Gives the logic level of the IN1. */ + __IM uint32_t TIM_ONESHOT_PHASE : 2; /*!< [3..2] OneShot phase:0: Wait for event.1: Delay phase.2: Start + * Shot.3: Shot phase. */ + uint32_t : 4; + __IM uint32_t TIM_IRQ_STATUS : 1; /*!< [8..8] IRQ status bit. When an IRQ has occured, this bit is + * 1. */ + __IM uint32_t TIM_TIMER_BUSY : 1; /*!< [9..9] Busy with synchronizing PRESCALER_REG, RELOAD_REG and + * SHOTWIDTH_REG. Do not write a new value to these registers + * when this bit is high. */ + __IM uint32_t TIM_PWM_BUSY : 1; /*!< [10..10] Busy with synchronizing PWM_FREQ_REG and PWM_DC_REG. + * Do not write a new value to these registers when this bit + * is high. */ + __IM uint32_t TIM_SWITCHED_TO_DIVN_CLK : 1; /*!< [11..11] Indicates that timer clock is switched to divn clock. */ + uint32_t : 2; + __IM uint32_t TIM_IRQ_PULSE_STATUS : 1; /*!< [14..14] Status bit of IRQ pulse counter. When the pulse counter + * reaches the threshold value, this bit is 1. */ + uint32_t : 17; + } TIMER2_STATUS_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_GPIO1_CONF_REG; /*!< (@ 0x0000000C) Timer gpio1 selection */ + + struct + { + __IOM uint32_t TIM_GPIO1_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN1, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER2_GPIO1_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_GPIO2_CONF_REG; /*!< (@ 0x00000010) Timer gpio2 selection */ + + struct + { + __IOM uint32_t TIM_GPIO2_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN2, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER2_GPIO2_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_SETTINGS_REG; /*!< (@ 0x00000014) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_RELOAD2 : 32; /*!< [31..0] Reload or max value in Timer mode; delay phase duration + * in Oneshot mode. Actual delay is the register value plus + * synchronization time (3 clock cycles). */ + } TIMER2_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_SHOTWIDTH_REG; /*!< (@ 0x00000018) Timer Shot Duration in Shot mode */ + + struct + { + __IOM uint32_t TIM_SHOTWIDTH2 : 32; /*!< [31..0] Shot phase duration in Oneshot mode. */ + } TIMER2_SHOTWIDTH_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_PRE_SETTINGS_REG; /*!< (@ 0x0000001C) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_PRESCALER2 : 5; /*!< [4..0] Defines the timer count frequency. CLOCK frequency/(TIM_PRESCALER+1). */ + uint32_t : 27; + } TIMER2_PRE_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_CAPTURE_GPIO1_REG; /*!< (@ 0x00000020) Timer Value for Event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO12 : 32; /*!< [31..0] Gives the capture time for event on GPIO1. */ + } TIMER2_CAPTURE_GPIO1_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_CAPTURE_GPIO2_REG; /*!< (@ 0x00000024) Timer Value for Event on GPIO2 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO22 : 32; /*!< [31..0] Gives the capture time for event on GPIO2. */ + } TIMER2_CAPTURE_GPIO2_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_PRESCALER_VAL_REG; /*!< (@ 0x00000028) Timer Prescaler Counter Value */ + + struct + { + __IM uint32_t TIM_PRESCALER_VAL : 5; /*!< [4..0] Gives the current prescaler counter value. */ + uint32_t : 27; + } TIMER2_PRESCALER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_PWM_CTRL_REG; /*!< (@ 0x0000002C) Timer PWM Frequency Register */ + + struct + { + __IOM uint32_t TIM_PWM_FREQ : 16; /*!< [15..0] Defines the PWM frequency. Timer clock frequency/(TIM_PWM_FREQ+1).Time + * clock is the clock after prescaler. */ + __IOM uint32_t TIM_PWM_DC : 16; /*!< [31..16] Defines the PWM duty cycle. TIM_PWM_DC/( TIM_PWM_FREQ+1). */ + } TIMER2_PWM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_PULSE_GPIO_SEL_REG; /*!< (@ 0x00000030) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_GPIO_SEL2 : 6; /*!< [5..0] Select one of the 32 GPIOs as input for the pulse counter, + * valid values 0-32:0: Disable input1: P0_002: P0_013: P0_024: + * P0_035: P0_046: P0_057: P0_068: P0_079: P0_0810: P0_0911: + * P0_1012: P0_1113: P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: + * P1_0319: P1_0420: P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: + * P1_1026: P1_1127: P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: + * P1_17N */ + uint32_t : 26; + } TIMER2_PULSE_GPIO_SEL_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t TIMER2_PULSE_CNT_CTRL_REG; /*!< (@ 0x00000044) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_THRESHOLD2 : 32; /*!< [31..0] Select after how many pulses an IRQ is fired for the + * pulse counter.NOTE: Only change this when EDGE_DET_CNT_EN=0 + * in TIMER_CTRL_REG. */ + } TIMER2_PULSE_CNT_CTRL_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t TIMER2_CLEAR_IRQ_REG; /*!< (@ 0x00000054) Timer Clear Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_IRQ : 1; /*!< [0..0] Write any value to clear interrupt. */ + uint32_t : 31; + } TIMER2_CLEAR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t TIMER2_CLEAR_IRQ_PULSE_REG; /*!< (@ 0x00000058) Timer Clear Pulse Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_PULSE_IRQ : 1; /*!< [0..0] Write any value to clear IRQ pulse interrupt. */ + uint32_t : 31; + } TIMER2_CLEAR_IRQ_PULSE_REG_b; + }; +} TIMER2_Type; /*!< Size = 92 (0x5c) */ + +/* =========================================================================================================================== */ +/* ================ TIMER3 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TIMER3 registers (TIMER3) + */ + +typedef struct /*!< (@ 0x40080200) TIMER3 Structure */ +{ + union + { + __IOM uint32_t TIMER3_CTRL_REG; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint32_t TIM_EN : 1; /*!< [0..0] Timer enable:0: Off1: On */ + __IOM uint32_t TIM_ONESHOT_MODE_EN : 1; /*!< [1..1] Timer mode:0: Counter is enabled.1: One shot is enabled. */ + __IOM uint32_t TIM_COUNT_DOWN_EN : 1; /*!< [2..2] Timer count direction:0: Up1: DownNOTE: Only change this + * bit when timer is disabled. */ + __IOM uint32_t TIM_IN1_EVENT_FALL_EN : 1; /*!< [3..3] Event input 1 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IN2_EVENT_FALL_EN : 1; /*!< [4..4] Event input 2 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IRQ_EN : 1; /*!< [5..5] Interrupt mask:0: Timer IRQ is disable.1: Timer IRQ is + * enable. */ + __IOM uint32_t TIM_FREE_RUN_MODE_EN : 1; /*!< [6..6] Valid when timer counts up, if it is '1' timer does not + * zero when reaches to reload value. it becomes zero only + * when it reaches the max value. */ + __IOM uint32_t TIM_SYS_CLK_EN : 1; /*!< [7..7] Timer clock selection:0: LP_CLK clock1: DIVN clockNOTE: + * When switching clock, the timer clock should be disabled + * (TIM_CLK_EN, bit 8). */ + __IOM uint32_t TIM_CLK_EN : 1; /*!< [8..8] Timer clock enable:0: Clock is disabled.1: Clock is enabled. */ + uint32_t : 9; + __IOM uint32_t TIM_EDGE_DET_CNT_EN : 1; /*!< [18..18] Edge detection counter:0: Disable1: Enable */ + __IOM uint32_t TIM_EDGE_DET_CNT_FALL_EN : 1; /*!< [19..19] Counter trigger edge selection:0: the counter is triggered + * on a rising edge.1: the counter is triggered on a falling + * edge.NOTE: Only change this when EDGE_DET_CNT_EN=0 in TIMER_CTRL_REG. */ + uint32_t : 12; + } TIMER3_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_TIMER_VAL_REG; /*!< (@ 0x00000004) Timer Counter Value */ + + struct + { + __IM uint32_t TIM_TIMER_VALUE2 : 32; /*!< [31..0] Gives the current timer value. */ + } TIMER3_TIMER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_STATUS_REG; /*!< (@ 0x00000008) Timer Status Register */ + + struct + { + __IM uint32_t TIM_IN1_STATE : 1; /*!< [0..0] Gives the logic level of the IN2. */ + __IM uint32_t TIM_IN2_STATE : 1; /*!< [1..1] Gives the logic level of the IN1. */ + __IM uint32_t TIM_ONESHOT_PHASE : 2; /*!< [3..2] OneShot phase:0: Wait for event.1: Delay phase.2: Start + * Shot.3: Shot phase. */ + uint32_t : 4; + __IM uint32_t TIM_IRQ_STATUS : 1; /*!< [8..8] IRQ status bit. When an IRQ has occured, this bit is + * 1. */ + __IM uint32_t TIM_TIMER_BUSY : 1; /*!< [9..9] Busy with synchronizing PRESCALER_REG, RELOAD_REG and + * SHOTWIDTH_REG. Do not write a new value to these registers + * when this bit is high. */ + __IM uint32_t TIM_PWM_BUSY : 1; /*!< [10..10] Busy with synchronizing PWM_FREQ_REG and PWM_DC_REG. + * Do not write a new value to these registers when this bit + * is high. */ + __IM uint32_t TIM_SWITCHED_TO_DIVN_CLK : 1; /*!< [11..11] Indicates that timer clock is switched to divn clock. */ + uint32_t : 2; + __IM uint32_t TIM_IRQ_PULSE_STATUS : 1; /*!< [14..14] Status bit of IRQ pulse counter. When the pulse counter + * reaches the threshold value, this bit is 1. */ + uint32_t : 17; + } TIMER3_STATUS_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_GPIO1_CONF_REG; /*!< (@ 0x0000000C) Timer gpio1 selection */ + + struct + { + __IOM uint32_t TIM_GPIO1_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN1, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER3_GPIO1_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_GPIO2_CONF_REG; /*!< (@ 0x00000010) Timer gpio2 selection */ + + struct + { + __IOM uint32_t TIM_GPIO2_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN2, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER3_GPIO2_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_SETTINGS_REG; /*!< (@ 0x00000014) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_RELOAD2 : 32; /*!< [31..0] Reload or max value in Timer mode; delay phase duration + * in Oneshot mode. Actual delay is the register value plus + * synchronization time (3 clock cycles). */ + } TIMER3_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_SHOTWIDTH_REG; /*!< (@ 0x00000018) Timer Shot Duration in Shot mode */ + + struct + { + __IOM uint32_t TIM_SHOTWIDTH2 : 32; /*!< [31..0] Shot phase duration in Oneshot mode. */ + } TIMER3_SHOTWIDTH_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_PRE_SETTINGS_REG; /*!< (@ 0x0000001C) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_PRESCALER2 : 5; /*!< [4..0] Defines the timer count frequency. CLOCK frequency/(TIM_PRESCALER+1). */ + uint32_t : 27; + } TIMER3_PRE_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_CAPTURE_GPIO1_REG; /*!< (@ 0x00000020) Timer Value for Event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO12 : 32; /*!< [31..0] Gives the capture time for event on GPIO1. */ + } TIMER3_CAPTURE_GPIO1_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_CAPTURE_GPIO2_REG; /*!< (@ 0x00000024) Timer Value for Event on GPIO2 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO22 : 32; /*!< [31..0] Gives the capture time for event on GPIO2. */ + } TIMER3_CAPTURE_GPIO2_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_PRESCALER_VAL_REG; /*!< (@ 0x00000028) Timer Prescaler Counter Value */ + + struct + { + __IM uint32_t TIM_PRESCALER_VAL : 5; /*!< [4..0] Gives the current prescaler counter value. */ + uint32_t : 27; + } TIMER3_PRESCALER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_PWM_CTRL_REG; /*!< (@ 0x0000002C) Timer PWM Frequency Register */ + + struct + { + __IOM uint32_t TIM_PWM_FREQ : 16; /*!< [15..0] Defines the PWM frequency. Timer clock frequency/(TIM_PWM_FREQ+1).Time + * clock is the clock after prescaler. */ + __IOM uint32_t TIM_PWM_DC : 16; /*!< [31..16] Defines the PWM duty cycle. TIM_PWM_DC/( TIM_PWM_FREQ+1). */ + } TIMER3_PWM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_PULSE_GPIO_SEL_REG; /*!< (@ 0x00000030) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_GPIO_SEL2 : 6; /*!< [5..0] Select one of the 32 GPIOs as input for the pulse counter, + * valid values 0-32:0: Disable input1: P0_002: P0_013: P0_024: + * P0_035: P0_046: P0_057: P0_068: P0_079: P0_0810: P0_0911: + * P0_1012: P0_1113: P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: + * P1_0319: P1_0420: P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: + * P1_1026: P1_1127: P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: + * P1_17N */ + uint32_t : 26; + } TIMER3_PULSE_GPIO_SEL_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t TIMER3_PULSE_CNT_CTRL_REG; /*!< (@ 0x00000044) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_THRESHOLD2 : 32; /*!< [31..0] Select after how many pulses an IRQ is fired for the + * pulse counter.NOTE: Only change this when EDGE_DET_CNT_EN=0 + * in TIMER_CTRL_REG. */ + } TIMER3_PULSE_CNT_CTRL_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t TIMER3_CLEAR_IRQ_REG; /*!< (@ 0x00000054) Timer Clear Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_IRQ : 1; /*!< [0..0] Write any value to clear interrupt. */ + uint32_t : 31; + } TIMER3_CLEAR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t TIMER3_CLEAR_IRQ_PULSE_REG; /*!< (@ 0x00000058) Timer Clear Pulse Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_PULSE_IRQ : 1; /*!< [0..0] Write any value to clear IRQ pulse interrupt. */ + uint32_t : 31; + } TIMER3_CLEAR_IRQ_PULSE_REG_b; + }; +} TIMER3_Type; /*!< Size = 92 (0x5c) */ + +/* =========================================================================================================================== */ +/* ================ TIMER4 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TIMER4 registers (TIMER4) + */ + +typedef struct /*!< (@ 0x40080300) TIMER4 Structure */ +{ + union + { + __IOM uint32_t TIMER4_CTRL_REG; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint32_t TIM_EN : 1; /*!< [0..0] Timer enable:0: Off1: On */ + __IOM uint32_t TIM_ONESHOT_MODE_EN : 1; /*!< [1..1] Timer mode:0: Counter is enabled.1: One shot is enabled. */ + __IOM uint32_t TIM_COUNT_DOWN_EN : 1; /*!< [2..2] Timer count direction:0: Up1: DownNOTE: Only change this + * bit when timer is disabled. */ + __IOM uint32_t TIM_IN1_EVENT_FALL_EN : 1; /*!< [3..3] Event input 1 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IN2_EVENT_FALL_EN : 1; /*!< [4..4] Event input 2 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IRQ_EN : 1; /*!< [5..5] Interrupt mask:0: Timer IRQ is disable.1: Timer IRQ is + * enable. */ + __IOM uint32_t TIM_FREE_RUN_MODE_EN : 1; /*!< [6..6] Valid when timer counts up, if it is '1' timer does not + * zero when reaches to reload value. it becomes zero only + * when it reaches the max value. */ + __IOM uint32_t TIM_SYS_CLK_EN : 1; /*!< [7..7] Timer clock selection:0: LP_CLK clock1: DIVN clockNOTE: + * When switching clock, the timer clock should be disabled + * (TIM_CLK_EN, bit 8). */ + __IOM uint32_t TIM_CLK_EN : 1; /*!< [8..8] Timer clock enable:0: Clock is disabled.1: Clock is enabled. */ + uint32_t : 9; + __IOM uint32_t TIM_EDGE_DET_CNT_EN : 1; /*!< [18..18] Edge detection counter:0: Disable1: Enable */ + __IOM uint32_t TIM_EDGE_DET_CNT_FALL_EN : 1; /*!< [19..19] Counter trigger edge selection:0: the counter is triggered + * on a rising edge.1: the counter is triggered on a falling + * edge.NOTE: Only change this when EDGE_DET_CNT_EN=0 in TIMER_CTRL_REG. */ + uint32_t : 12; + } TIMER4_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_TIMER_VAL_REG; /*!< (@ 0x00000004) Timer Counter Value */ + + struct + { + __IM uint32_t TIM_TIMER_VALUE2 : 32; /*!< [31..0] Gives the current timer value. */ + } TIMER4_TIMER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_STATUS_REG; /*!< (@ 0x00000008) Timer Status Register */ + + struct + { + __IM uint32_t TIM_IN1_STATE : 1; /*!< [0..0] Gives the logic level of the IN2. */ + __IM uint32_t TIM_IN2_STATE : 1; /*!< [1..1] Gives the logic level of the IN1. */ + __IM uint32_t TIM_ONESHOT_PHASE : 2; /*!< [3..2] OneShot phase:0: Wait for event.1: Delay phase.2: Start + * Shot.3: Shot phase. */ + uint32_t : 4; + __IM uint32_t TIM_IRQ_STATUS : 1; /*!< [8..8] IRQ status bit. When an IRQ has occured, this bit is + * 1. */ + __IM uint32_t TIM_TIMER_BUSY : 1; /*!< [9..9] Busy with synchronizing PRESCALER_REG, RELOAD_REG and + * SHOTWIDTH_REG. Do not write a new value to these registers + * when this bit is high. */ + __IM uint32_t TIM_PWM_BUSY : 1; /*!< [10..10] Busy with synchronizing PWM_FREQ_REG and PWM_DC_REG. + * Do not write a new value to these registers when this bit + * is high. */ + __IM uint32_t TIM_SWITCHED_TO_DIVN_CLK : 1; /*!< [11..11] Indicates that timer clock is switched to divn clock. */ + uint32_t : 2; + __IM uint32_t TIM_IRQ_PULSE_STATUS : 1; /*!< [14..14] Status bit of IRQ pulse counter. When the pulse counter + * reaches the threshold value, this bit is 1. */ + uint32_t : 17; + } TIMER4_STATUS_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_GPIO1_CONF_REG; /*!< (@ 0x0000000C) Timer gpio1 selection */ + + struct + { + __IOM uint32_t TIM_GPIO1_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN1, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER4_GPIO1_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_GPIO2_CONF_REG; /*!< (@ 0x00000010) Timer gpio2 selection */ + + struct + { + __IOM uint32_t TIM_GPIO2_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN2, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER4_GPIO2_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_SETTINGS_REG; /*!< (@ 0x00000014) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_RELOAD2 : 32; /*!< [31..0] Reload or max value in Timer mode; delay phase duration + * in Oneshot mode. Actual delay is the register value plus + * synchronization time (3 clock cycles). */ + } TIMER4_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_SHOTWIDTH_REG; /*!< (@ 0x00000018) Timer Shot Duration in Shot mode */ + + struct + { + __IOM uint32_t TIM_SHOTWIDTH2 : 32; /*!< [31..0] Shot phase duration in Oneshot mode. */ + } TIMER4_SHOTWIDTH_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_PRE_SETTINGS_REG; /*!< (@ 0x0000001C) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_PRESCALER2 : 5; /*!< [4..0] Defines the timer count frequency. CLOCK frequency/(TIM_PRESCALER+1). */ + uint32_t : 27; + } TIMER4_PRE_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_CAPTURE_GPIO1_REG; /*!< (@ 0x00000020) Timer Value for Event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO12 : 32; /*!< [31..0] Gives the capture time for event on GPIO1. */ + } TIMER4_CAPTURE_GPIO1_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_CAPTURE_GPIO2_REG; /*!< (@ 0x00000024) Timer Value for Event on GPIO2 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO22 : 32; /*!< [31..0] Gives the capture time for event on GPIO2. */ + } TIMER4_CAPTURE_GPIO2_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_PRESCALER_VAL_REG; /*!< (@ 0x00000028) Timer Prescaler Counter Value */ + + struct + { + __IM uint32_t TIM_PRESCALER_VAL : 5; /*!< [4..0] Gives the current prescaler counter value. */ + uint32_t : 27; + } TIMER4_PRESCALER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_PWM_CTRL_REG; /*!< (@ 0x0000002C) Timer PWM Frequency Register */ + + struct + { + __IOM uint32_t TIM_PWM_FREQ : 16; /*!< [15..0] Defines the PWM frequency. Timer clock frequency/(TIM_PWM_FREQ+1).Time + * clock is the clock after prescaler. */ + __IOM uint32_t TIM_PWM_DC : 16; /*!< [31..16] Defines the PWM duty cycle. TIM_PWM_DC/( TIM_PWM_FREQ+1). */ + } TIMER4_PWM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_PULSE_GPIO_SEL_REG; /*!< (@ 0x00000030) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_GPIO_SEL2 : 6; /*!< [5..0] Select one of the 32 GPIOs as input for the pulse counter, + * valid values 0-32:0: Disable input1: P0_002: P0_013: P0_024: + * P0_035: P0_046: P0_057: P0_068: P0_079: P0_0810: P0_0911: + * P0_1012: P0_1113: P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: + * P1_0319: P1_0420: P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: + * P1_1026: P1_1127: P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: + * P1_17N */ + uint32_t : 26; + } TIMER4_PULSE_GPIO_SEL_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t TIMER4_PULSE_CNT_CTRL_REG; /*!< (@ 0x00000044) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_THRESHOLD2 : 32; /*!< [31..0] Select after how many pulses an IRQ is fired for the + * pulse counter.NOTE: Only change this when EDGE_DET_CNT_EN=0 + * in TIMER_CTRL_REG. */ + } TIMER4_PULSE_CNT_CTRL_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t TIMER4_CLEAR_IRQ_REG; /*!< (@ 0x00000054) Timer Clear Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_IRQ : 1; /*!< [0..0] Write any value to clear interrupt. */ + uint32_t : 31; + } TIMER4_CLEAR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t TIMER4_CLEAR_IRQ_PULSE_REG; /*!< (@ 0x00000058) Timer Clear Pulse Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_PULSE_IRQ : 1; /*!< [0..0] Write any value to clear IRQ pulse interrupt. */ + uint32_t : 31; + } TIMER4_CLEAR_IRQ_PULSE_REG_b; + }; +} TIMER4_Type; /*!< Size = 92 (0x5c) */ + +/* =========================================================================================================================== */ +/* ================ TIMER5 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TIMER5 registers (TIMER5) + */ + +typedef struct /*!< (@ 0x40080400) TIMER5 Structure */ +{ + union + { + __IOM uint32_t TIMER5_CTRL_REG; /*!< (@ 0x00000000) Timer control register */ + + struct + { + __IOM uint32_t TIM_EN : 1; /*!< [0..0] Timer enable1 = On0 = Off */ + __IOM uint32_t TIM_ONESHOT_MODE_EN : 1; /*!< [1..1] Timer mode1 = One shot enabled0 = Counter enabled */ + __IOM uint32_t TIM_COUNT_DOWN_EN : 1; /*!< [2..2] Timer count direction1 = down0 = upNOTE: only change + * counter direction when timer is not enabled */ + __IOM uint32_t TIM_IN1_EVENT_FALL_EN : 1; /*!< [3..3] Event input 1 edge type1 = falling edge0 = rising edge */ + __IOM uint32_t TIM_IN2_EVENT_FALL_EN : 1; /*!< [4..4] Event input 2 edge type1 = falling edge0 = rising edge */ + __IOM uint32_t TIM_IRQ_EN : 1; /*!< [5..5] Interrupt mask1 = timer IRQ is unmasked0 = timer IRQ + * is masked */ + __IOM uint32_t TIM_FREE_RUN_MODE_EN : 1; /*!< [6..6] Valid when timer counts up, if it is '1' timer does not + * zero when reaches to reload value. it becomes zero only + * when it reaches the max value. */ + __IOM uint32_t TIM_SYS_CLK_EN : 1; /*!< [7..7] Select clock1 = Timer uses the DIVN clock0 = Timer uses + * the lp clockNOTE: when switching clock, the timer clock + * should be disabled (TIM_CLK_EN, bit 8) */ + __IOM uint32_t TIM_CLK_EN : 1; /*!< [8..8] Timer clock enable1 = clock enabled0 = clock disabled */ + __IOM uint32_t TIM_IN3_EVENT_FALL_EN : 1; /*!< [9..9] Event input 3 edge type1 = falling edge0 = rising edge */ + __IOM uint32_t TIM_IN4_EVENT_FALL_EN : 1; /*!< [10..10] Event input 4 edge type1 = falling edge0 = rising edge */ + __IOM uint32_t TIM_CAP_GPIO1_IRQ_EN : 1; /*!< [11..11] 0 = Event on GPIO1 does not create a CAPTIM interrrupt1 + * = Event on GPIO1 creates a CAPTIM interrrupt */ + __IOM uint32_t TIM_CAP_GPIO2_IRQ_EN : 1; /*!< [12..12] 0 = Event on GPIO2 does not create a CAPTIM interrrupt1 + * = Event on GPIO2 creates a CAPTIM interrrupt */ + __IOM uint32_t TIM_CAP_GPIO3_IRQ_EN : 1; /*!< [13..13] 0 = Event on GPIO3 does not create a CAPTIM interrrupt1 + * = Event on GPIO3 creates a CAPTIM interrrupt */ + __IOM uint32_t TIM_CAP_GPIO4_IRQ_EN : 1; /*!< [14..14] 0 = Event on GPIO4 does not create a CAPTIM interrrupt1 + * = Event on GPIO4 creates a CAPTIM interrrupt */ + __IOM uint32_t TIM_ONESHOT_TRIGGER : 2; /*!< [16..15] Oneshot trigger source00: Select external GPIO as the + * trigger for one shot01: Select a register write as the + * trigger of one shot10: Either of the two triggers one shot11: + * None of the two triggers one shot */ + __IOM uint32_t TIM_ONESHOT_SWITCH : 1; /*!< [17..17] Automatically switch after the completion of the pulse + * output without the CPU programming anything.0: No automated + * switch from OneShot to Counter mode1: Automated switch + * from OneShot to Counter mode and start counting down. In + * case no start value has been programmed (reload=0), the + * timer keeps generating interrupts until the timer clock + * is disabled */ + __IOM uint32_t TIM_EDGE_DET_CNT_EN : 1; /*!< [18..18] Enable edge detection counter.NOTE: In sleep only 80Mhz + * can be reached at 900 mV */ + __IOM uint32_t TIM_EDGE_DET_CNT_FALL_EN : 1; /*!< [19..19] Select on which edge the edge detection should react;0: + * the counter is triggered on a rising edge1: the counter + * is triggered on a falling edgeNOTE: Only change this when + * EDGE_DET_CNT_EN=0 in TIMER_CTRL_REG */ + __IOM uint32_t TIM_SINGLE_EVENT_CAPTURE : 1; /*!< [20..20] When this bit is set, only the first event on captimer1 + * is captured */ + uint32_t : 11; + } TIMER5_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_TIMER_VAL_REG; /*!< (@ 0x00000004) Timer counter value */ + + struct + { + __IM uint32_t TIM_TIMER_VALUE : 32; /*!< [31..0] Gives the current timer value */ + } TIMER5_TIMER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_STATUS_REG; /*!< (@ 0x00000008) Timer status register */ + + struct + { + __IM uint32_t TIM_IN1_STATE : 1; /*!< [0..0] Gives the logic level of the IN2 */ + __IM uint32_t TIM_IN2_STATE : 1; /*!< [1..1] Gives the logic level of the IN1 */ + __IM uint32_t TIM_ONESHOT_PHASE : 2; /*!< [3..2] OneShot phase0 = Wait for event1 = Delay phase2 = Start + * Shot3 = Shot phase */ + __IM uint32_t TIM_GPIO1_EVENT_PENDING : 1; /*!< [4..4] When 1, GPIO1 event is pending. */ + __IM uint32_t TIM_GPIO2_EVENT_PENDING : 1; /*!< [5..5] When 1, GPIO2 event is pending. */ + __IM uint32_t TIM_GPIO3_EVENT_PENDING : 1; /*!< [6..6] When 1, GPIO3 event is pending. */ + __IM uint32_t TIM_GPIO4_EVENT_PENDING : 1; /*!< [7..7] When 1, GPIO4 event is pending. */ + __IM uint32_t TIM_IRQ_STATUS : 1; /*!< [8..8] IRQ status bit. When an irq has occured, this bit is + * 1. */ + __IM uint32_t TIM_TIMER_BUSY : 1; /*!< [9..9] Busy with synchronizing PRESCALER_REG, RELOAD_REG and + * SHOTWIDTH_REG. Do not write a new value to these registers + * when this bit is high */ + __IM uint32_t TIM_PWM_BUSY : 1; /*!< [10..10] Busy with synchronizing PWM_FREQ_REG and PWM_DC_REG. + * Do not write a new value to these registers when this bit + * is high */ + __IM uint32_t TIM_SWITCHED_TO_DIVN_CLK : 1; /*!< [11..11] Indicates that timer clock has been switched to divn + * clock */ + __IM uint32_t TIM_IN3_STATE : 1; /*!< [12..12] Gives the logic level of the IN3 */ + __IM uint32_t TIM_IN4_STATE : 1; /*!< [13..13] Gives the logic level of the IN4 */ + __IM uint32_t TIM_IRQ_PULSE_STATUS : 1; /*!< [14..14] Status bit of IRQ pulse counter. When the pulse counter + * reaches the theshold value, this bit is 1 */ + __IM uint32_t TIM_CAPTIM_DETECTED : 1; /*!< [15..15] Indicates that a single event is detected when SINGLE_EVENT_CAPTURE + * is set to 1. Every next event will not update the capture + * timer register */ + uint32_t : 16; + } TIMER5_STATUS_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_GPIO1_CONF_REG; /*!< (@ 0x0000000C) Timer gpio1 selection */ + + struct + { + __IOM uint32_t TIM_GPIO1_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN1, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER5_GPIO1_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_GPIO2_CONF_REG; /*!< (@ 0x00000010) Timer gpio2 selection */ + + struct + { + __IOM uint32_t TIM_GPIO2_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN2, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER5_GPIO2_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_SETTINGS_REG; /*!< (@ 0x00000014) Timer reload value and Delay in shot mode */ + + struct + { + __IOM uint32_t TIM_RELOAD2 : 32; /*!< [31..0] Reload or max value in timer mode, Delay phase duration + * in oneshot mode. Actual delay is the register value plus + * synchronization time (3 clock cycles) */ + } TIMER5_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_SHOTWIDTH_REG; /*!< (@ 0x00000018) Timer Shot duration in shot mode */ + + struct + { + __IOM uint32_t TIM_SHOTWIDTH2 : 32; /*!< [31..0] Shot phase duration in oneshot mode */ + } TIMER5_SHOTWIDTH_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_PRE_SETTINGS_REG; /*!< (@ 0x0000001C) Timer reload value and Delay in shot mode */ + + struct + { + __IOM uint32_t TIM_PRESCALER2 : 5; /*!< [4..0] Defines the timer count frequency. CLOCK frequency / + * (TIM_PRESCALER+1) */ + uint32_t : 27; + } TIMER5_PRE_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_CAPTURE_GPIO1_REG; /*!< (@ 0x00000020) Timer value for event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO12 : 32; /*!< [31..0] Gives the Capture time for event on GPIO1 */ + } TIMER5_CAPTURE_GPIO1_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_CAPTURE_GPIO2_REG; /*!< (@ 0x00000024) Timer value for event on GPIO2 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO22 : 32; /*!< [31..0] Gives the Capture time for event on GPIO2 */ + } TIMER5_CAPTURE_GPIO2_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_PRESCALER_VAL_REG; /*!< (@ 0x00000028) Timer prescaler counter valuew */ + + struct + { + __IM uint32_t TIM_PRESCALER_VAL : 5; /*!< [4..0] Gives the current prescaler counter value */ + uint32_t : 27; + } TIMER5_PRESCALER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_PWM_CTRL_REG; /*!< (@ 0x0000002C) Timer pwm frequency register */ + + struct + { + __IOM uint32_t TIM_PWM_FREQ : 16; /*!< [15..0] Defines the PWM frequency. Timer clock frequency / (TIM_PWM_FREQ+1)Tim + * r clock is clock after prescaler */ + __IOM uint32_t TIM_PWM_DC : 16; /*!< [31..16] Defines the PWM duty cycle. TIM_PWM_DC / ( TIM_PWM_FREQ+1) */ + } TIMER5_PWM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_PULSE_GPIO_SEL_REG; /*!< (@ 0x00000030) Timer pulse counter ctrl register */ + + struct + { + __IOM uint32_t PULSE_CNT_GPIO_SEL2 : 6; /*!< [5..0] Select one of the 32 GPIOs as input for the pulse counter, + * Valid values 0-32.0: Disable input1: P0_002: P0_013: P0_024: + * P0_035: P0_046: P0_057: P0_068: P0_079: P0_0810: P0_0911: + * P0_1012: P0_1113: P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: + * P1_0319: P1_0420: P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: + * P1_1026: P1_1127: P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: + * P1_17 */ + uint32_t : 26; + } TIMER5_PULSE_GPIO_SEL_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_GPIO3_CONF_REG; /*!< (@ 0x00000034) Timer gpio3 selection */ + + struct + { + __IOM uint32_t TIM_GPIO3_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN3, Valid value 0-32. + * 1 for the first gpio, 32 for the last gpio.0: Disable input1: + * P0_002: P0_013: P0_024: P0_035: P0_046: P0_057: P0_068: + * P0_079: P0_0810: P0_0911: P0_1012: P0_1113: P0_1214: P0_1315: + * P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: P1_0521: P1_0622: + * P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: P1_1228: P1_1329: + * P1_1430: P1_1531: P1_1 */ + uint32_t : 26; + } TIMER5_GPIO3_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_GPIO4_CONF_REG; /*!< (@ 0x00000038) Timer gpio4 selection */ + + struct + { + __IOM uint32_t TIM_GPIO4_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN4, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER5_GPIO4_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_CAPTURE_GPIO3_REG; /*!< (@ 0x0000003C) Timer value for event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO32 : 32; /*!< [31..0] Gives the Capture time for event on GPIO3 */ + } TIMER5_CAPTURE_GPIO3_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_CAPTURE_GPIO4_REG; /*!< (@ 0x00000040) Timer value for event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO42 : 32; /*!< [31..0] Gives the Capture time for event on GPIO4 */ + } TIMER5_CAPTURE_GPIO4_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_PULSE_CNT_CTRL_REG; /*!< (@ 0x00000044) Timer pulse counter ctrl register */ + + struct + { + __IOM uint32_t PULSE_CNT_THRESHOLD2 : 32; /*!< [31..0] Select after how many pulses an irq is fired for the + * pulse counter n-2.NOTE: Only change this when EDGE_DET_CNT_EN=0 + * in TIMER_CTRL_REG */ + } TIMER5_PULSE_CNT_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_ONESHOT_TRIGGER_REG; /*!< (@ 0x00000048) Timer oneshot trigger register */ + + struct + { + __OM uint32_t TIM_ONESHOT_TRIGGER_SW : 1; /*!< [0..0] trigger oneshot */ + uint32_t : 31; + } TIMER5_ONESHOT_TRIGGER_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_PWM_SYNC_REG; /*!< (@ 0x0000004C) Timer pwm synchronisation register */ + + struct + { + __IOM uint32_t PWM_START : 1; /*!< [0..0] Start PWM of the selected timers */ + __IOM uint32_t SYNC_ENABLE : 1; /*!< [1..1] Enable PWM start synchronisation of the selected timers */ + __IOM uint32_t TIMER_SYNC : 1; /*!< [2..2] Enable PWM synchronisation of timer */ + __IOM uint32_t TIMER2_SYNC : 1; /*!< [3..3] Enable PWM start synchronisation of timer2 */ + __IOM uint32_t TIMER3_SYNC : 1; /*!< [4..4] Enable PWM start synchronisation of timer3 */ + __IOM uint32_t TIMER4_SYNC : 1; /*!< [5..5] Enable PWM start synchronisation of timer4 */ + __IOM uint32_t TIMER6_SYNC : 1; /*!< [6..6] Enable PWM start synchronisation of timer6 */ + uint32_t : 25; + } TIMER5_PWM_SYNC_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_CLEAR_GPIO_EVENT_REG; /*!< (@ 0x00000050) Timer clear gpio event register */ + + struct + { + __OM uint32_t TIM_CLEAR_GPIO1_EVENT : 1; /*!< [0..0] 1 = Clear GPIO1 event. Return always 0 */ + __OM uint32_t TIM_CLEAR_GPIO2_EVENT : 1; /*!< [1..1] 1 = Clear GPIO2 event. Return always 0 */ + __OM uint32_t TIM_CLEAR_GPIO3_EVENT : 1; /*!< [2..2] 1 = Clear GPIO3 event. Return always 0 */ + __OM uint32_t TIM_CLEAR_GPIO4_EVENT : 1; /*!< [3..3] 1 = Clear GPIO4 event. Return always 0 */ + uint32_t : 28; + } TIMER5_CLEAR_GPIO_EVENT_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_CLEAR_IRQ_REG; /*!< (@ 0x00000054) Timer clear interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_IRQ : 1; /*!< [0..0] Write any value clear interrupt */ + uint32_t : 31; + } TIMER5_CLEAR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t TIMER5_CLEAR_IRQ_PULSE_REG; /*!< (@ 0x00000058) Timer clear pulse interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_PULSE_IRQ : 1; /*!< [0..0] Write any value will clear irq pulse interrupt */ + uint32_t : 31; + } TIMER5_CLEAR_IRQ_PULSE_REG_b; + }; +} TIMER5_Type; /*!< Size = 92 (0x5c) */ + +/* =========================================================================================================================== */ +/* ================ TIMER6 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TIMER6 registers (TIMER6) + */ + +typedef struct /*!< (@ 0x40080500) TIMER6 Structure */ +{ + union + { + __IOM uint32_t TIMER6_CTRL_REG; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint32_t TIM_EN : 1; /*!< [0..0] Timer enable:0: Off1: On */ + __IOM uint32_t TIM_ONESHOT_MODE_EN : 1; /*!< [1..1] Timer mode:0: Counter is enabled.1: One shot is enabled. */ + __IOM uint32_t TIM_COUNT_DOWN_EN : 1; /*!< [2..2] Timer count direction:0: Up1: DownNOTE: Only change this + * bit when timer is disabled. */ + __IOM uint32_t TIM_IN1_EVENT_FALL_EN : 1; /*!< [3..3] Event input 1 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IN2_EVENT_FALL_EN : 1; /*!< [4..4] Event input 2 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IRQ_EN : 1; /*!< [5..5] Interrupt mask:0: Timer IRQ is disable.1: Timer IRQ is + * enable. */ + __IOM uint32_t TIM_FREE_RUN_MODE_EN : 1; /*!< [6..6] Valid when timer counts up, if it is '1' timer does not + * zero when reaches to reload value. it becomes zero only + * when it reaches the max value. */ + __IOM uint32_t TIM_SYS_CLK_EN : 1; /*!< [7..7] Timer clock selection:0: LP_CLK clock1: DIVN clockNOTE: + * When switching clock, the timer clock should be disabled + * (TIM_CLK_EN, bit 8). */ + __IOM uint32_t TIM_CLK_EN : 1; /*!< [8..8] Timer clock enable:0: Clock is disabled.1: Clock is enabled. */ + uint32_t : 9; + __IOM uint32_t TIM_EDGE_DET_CNT_EN : 1; /*!< [18..18] Edge detection counter:0: Disable1: Enable */ + __IOM uint32_t TIM_EDGE_DET_CNT_FALL_EN : 1; /*!< [19..19] Counter trigger edge selection:0: the counter is triggered + * on a rising edge.1: the counter is triggered on a falling + * edge.NOTE: Only change this when EDGE_DET_CNT_EN=0 in TIMER_CTRL_REG. */ + uint32_t : 12; + } TIMER6_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_TIMER_VAL_REG; /*!< (@ 0x00000004) Timer Counter Value */ + + struct + { + __IM uint32_t TIM_TIMER_VALUE2 : 32; /*!< [31..0] Gives the current timer value. */ + } TIMER6_TIMER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_STATUS_REG; /*!< (@ 0x00000008) Timer Status Register */ + + struct + { + __IM uint32_t TIM_IN1_STATE : 1; /*!< [0..0] Gives the logic level of the IN2. */ + __IM uint32_t TIM_IN2_STATE : 1; /*!< [1..1] Gives the logic level of the IN1. */ + __IM uint32_t TIM_ONESHOT_PHASE : 2; /*!< [3..2] OneShot phase:0: Wait for event.1: Delay phase.2: Start + * Shot.3: Shot phase. */ + uint32_t : 4; + __IM uint32_t TIM_IRQ_STATUS : 1; /*!< [8..8] IRQ status bit. When an IRQ has occured, this bit is + * 1. */ + __IM uint32_t TIM_TIMER_BUSY : 1; /*!< [9..9] Busy with synchronizing PRESCALER_REG, RELOAD_REG and + * SHOTWIDTH_REG. Do not write a new value to these registers + * when this bit is high. */ + __IM uint32_t TIM_PWM_BUSY : 1; /*!< [10..10] Busy with synchronizing PWM_FREQ_REG and PWM_DC_REG. + * Do not write a new value to these registers when this bit + * is high. */ + __IM uint32_t TIM_SWITCHED_TO_DIVN_CLK : 1; /*!< [11..11] Indicates that timer clock is switched to divn clock. */ + uint32_t : 2; + __IM uint32_t TIM_IRQ_PULSE_STATUS : 1; /*!< [14..14] Status bit of IRQ pulse counter. When the pulse counter + * reaches the threshold value, this bit is 1. */ + uint32_t : 17; + } TIMER6_STATUS_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_GPIO1_CONF_REG; /*!< (@ 0x0000000C) Timer gpio1 selection */ + + struct + { + __IOM uint32_t TIM_GPIO1_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN1, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER6_GPIO1_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_GPIO2_CONF_REG; /*!< (@ 0x00000010) Timer gpio2 selection */ + + struct + { + __IOM uint32_t TIM_GPIO2_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN2, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER6_GPIO2_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_SETTINGS_REG; /*!< (@ 0x00000014) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_RELOAD2 : 32; /*!< [31..0] Reload or max value in Timer mode; delay phase duration + * in Oneshot mode. Actual delay is the register value plus + * synchronization time (3 clock cycles). */ + } TIMER6_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_SHOTWIDTH_REG; /*!< (@ 0x00000018) Timer Shot Duration in Shot mode */ + + struct + { + __IOM uint32_t TIM_SHOTWIDTH2 : 32; /*!< [31..0] Shot phase duration in Oneshot mode. */ + } TIMER6_SHOTWIDTH_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_PRE_SETTINGS_REG; /*!< (@ 0x0000001C) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_PRESCALER2 : 5; /*!< [4..0] Defines the timer count frequency. CLOCK frequency/(TIM_PRESCALER+1). */ + uint32_t : 27; + } TIMER6_PRE_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_CAPTURE_GPIO1_REG; /*!< (@ 0x00000020) Timer Value for Event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO12 : 32; /*!< [31..0] Gives the capture time for event on GPIO1. */ + } TIMER6_CAPTURE_GPIO1_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_CAPTURE_GPIO2_REG; /*!< (@ 0x00000024) Timer Value for Event on GPIO2 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO22 : 32; /*!< [31..0] Gives the capture time for event on GPIO2. */ + } TIMER6_CAPTURE_GPIO2_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_PRESCALER_VAL_REG; /*!< (@ 0x00000028) Timer Prescaler Counter Value */ + + struct + { + __IM uint32_t TIM_PRESCALER_VAL : 5; /*!< [4..0] Gives the current prescaler counter value. */ + uint32_t : 27; + } TIMER6_PRESCALER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_PWM_CTRL_REG; /*!< (@ 0x0000002C) Timer PWM Frequency Register */ + + struct + { + __IOM uint32_t TIM_PWM_FREQ : 16; /*!< [15..0] Defines the PWM frequency. Timer clock frequency/(TIM_PWM_FREQ+1).Time + * clock is the clock after prescaler. */ + __IOM uint32_t TIM_PWM_DC : 16; /*!< [31..16] Defines the PWM duty cycle. TIM_PWM_DC/( TIM_PWM_FREQ+1). */ + } TIMER6_PWM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_PULSE_GPIO_SEL_REG; /*!< (@ 0x00000030) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_GPIO_SEL2 : 6; /*!< [5..0] Select one of the 32 GPIOs as input for the pulse counter, + * valid values 0-32:0: Disable input1: P0_002: P0_013: P0_024: + * P0_035: P0_046: P0_057: P0_068: P0_079: P0_0810: P0_0911: + * P0_1012: P0_1113: P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: + * P1_0319: P1_0420: P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: + * P1_1026: P1_1127: P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: + * P1_17N */ + uint32_t : 26; + } TIMER6_PULSE_GPIO_SEL_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t TIMER6_PULSE_CNT_CTRL_REG; /*!< (@ 0x00000044) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_THRESHOLD2 : 32; /*!< [31..0] Select after how many pulses an IRQ is fired for the + * pulse counter.NOTE: Only change this when EDGE_DET_CNT_EN=0 + * in TIMER_CTRL_REG. */ + } TIMER6_PULSE_CNT_CTRL_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t TIMER6_CLEAR_IRQ_REG; /*!< (@ 0x00000054) Timer Clear Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_IRQ : 1; /*!< [0..0] Write any value to clear interrupt. */ + uint32_t : 31; + } TIMER6_CLEAR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t TIMER6_CLEAR_IRQ_PULSE_REG; /*!< (@ 0x00000058) Timer Clear Pulse Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_PULSE_IRQ : 1; /*!< [0..0] Write any value to clear IRQ pulse interrupt. */ + uint32_t : 31; + } TIMER6_CLEAR_IRQ_PULSE_REG_b; + }; +} TIMER6_Type; /*!< Size = 92 (0x5c) */ + +/* =========================================================================================================================== */ +/* ================ TIMER7 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TIMER7 registers (TIMER7) + */ + +typedef struct /*!< (@ 0x40080600) TIMER7 Structure */ +{ + union + { + __IOM uint32_t TIMER7_CTRL_REG; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint32_t TIM_EN : 1; /*!< [0..0] Timer enable:0: Off1: On */ + __IOM uint32_t TIM_ONESHOT_MODE_EN : 1; /*!< [1..1] Timer mode:0: Counter is enabled.1: One shot is enabled. */ + __IOM uint32_t TIM_COUNT_DOWN_EN : 1; /*!< [2..2] Timer count direction:0: Up1: DownNOTE: Only change this + * bit when timer is disabled. */ + __IOM uint32_t TIM_IN1_EVENT_FALL_EN : 1; /*!< [3..3] Event input 1 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IN2_EVENT_FALL_EN : 1; /*!< [4..4] Event input 2 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IRQ_EN : 1; /*!< [5..5] Interrupt mask:0: Timer IRQ is disable.1: Timer IRQ is + * enable. */ + __IOM uint32_t TIM_FREE_RUN_MODE_EN : 1; /*!< [6..6] Valid when timer counts up, if it is '1' timer does not + * zero when reaches to reload value. it becomes zero only + * when it reaches the max value. */ + __IOM uint32_t TIM_SYS_CLK_EN : 1; /*!< [7..7] Timer clock selection:0: LP_CLK clock1: DIVN clockNOTE: + * When switching clock, the timer clock should be disabled + * (TIM_CLK_EN, bit 8). */ + __IOM uint32_t TIM_CLK_EN : 1; /*!< [8..8] Timer clock enable:0: Clock is disabled.1: Clock is enabled. */ + uint32_t : 9; + __IOM uint32_t TIM_EDGE_DET_CNT_EN : 1; /*!< [18..18] Edge detection counter:0: Disable1: Enable */ + __IOM uint32_t TIM_EDGE_DET_CNT_FALL_EN : 1; /*!< [19..19] Counter trigger edge selection:0: the counter is triggered + * on a rising edge.1: the counter is triggered on a falling + * edge.NOTE: Only change this when EDGE_DET_CNT_EN=0 in TIMER_CTRL_REG. */ + uint32_t : 12; + } TIMER7_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_TIMER_VAL_REG; /*!< (@ 0x00000004) Timer Counter Value */ + + struct + { + __IM uint32_t TIM_TIMER_VALUE2 : 32; /*!< [31..0] Gives the current timer value. */ + } TIMER7_TIMER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_STATUS_REG; /*!< (@ 0x00000008) Timer Status Register */ + + struct + { + __IM uint32_t TIM_IN1_STATE : 1; /*!< [0..0] Gives the logic level of the IN2. */ + __IM uint32_t TIM_IN2_STATE : 1; /*!< [1..1] Gives the logic level of the IN1. */ + __IM uint32_t TIM_ONESHOT_PHASE : 2; /*!< [3..2] OneShot phase:0: Wait for event.1: Delay phase.2: Start + * Shot.3: Shot phase. */ + uint32_t : 4; + __IM uint32_t TIM_IRQ_STATUS : 1; /*!< [8..8] IRQ status bit. When an IRQ has occured, this bit is + * 1. */ + __IM uint32_t TIM_TIMER_BUSY : 1; /*!< [9..9] Busy with synchronizing PRESCALER_REG, RELOAD_REG and + * SHOTWIDTH_REG. Do not write a new value to these registers + * when this bit is high. */ + __IM uint32_t TIM_PWM_BUSY : 1; /*!< [10..10] Busy with synchronizing PWM_FREQ_REG and PWM_DC_REG. + * Do not write a new value to these registers when this bit + * is high. */ + __IM uint32_t TIM_SWITCHED_TO_DIVN_CLK : 1; /*!< [11..11] Indicates that timer clock is switched to divn clock. */ + uint32_t : 2; + __IM uint32_t TIM_IRQ_PULSE_STATUS : 1; /*!< [14..14] Status bit of IRQ pulse counter. When the pulse counter + * reaches the threshold value, this bit is 1. */ + uint32_t : 17; + } TIMER7_STATUS_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_GPIO1_CONF_REG; /*!< (@ 0x0000000C) Timer gpio1 selection */ + + struct + { + __IOM uint32_t TIM_GPIO1_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN1, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER7_GPIO1_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_GPIO2_CONF_REG; /*!< (@ 0x00000010) Timer gpio2 selection */ + + struct + { + __IOM uint32_t TIM_GPIO2_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN2, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER7_GPIO2_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_SETTINGS_REG; /*!< (@ 0x00000014) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_RELOAD2 : 32; /*!< [31..0] Reload or max value in Timer mode; delay phase duration + * in Oneshot mode. Actual delay is the register value plus + * synchronization time (3 clock cycles). */ + } TIMER7_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_SHOTWIDTH_REG; /*!< (@ 0x00000018) Timer Shot Duration in Shot mode */ + + struct + { + __IOM uint32_t TIM_SHOTWIDTH2 : 32; /*!< [31..0] Shot phase duration in Oneshot mode. */ + } TIMER7_SHOTWIDTH_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_PRE_SETTINGS_REG; /*!< (@ 0x0000001C) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_PRESCALER2 : 5; /*!< [4..0] Defines the timer count frequency. CLOCK frequency/(TIM_PRESCALER+1). */ + uint32_t : 27; + } TIMER7_PRE_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_CAPTURE_GPIO1_REG; /*!< (@ 0x00000020) Timer Value for Event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO12 : 32; /*!< [31..0] Gives the capture time for event on GPIO1. */ + } TIMER7_CAPTURE_GPIO1_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_CAPTURE_GPIO2_REG; /*!< (@ 0x00000024) Timer Value for Event on GPIO2 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO22 : 32; /*!< [31..0] Gives the capture time for event on GPIO2. */ + } TIMER7_CAPTURE_GPIO2_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_PRESCALER_VAL_REG; /*!< (@ 0x00000028) Timer Prescaler Counter Value */ + + struct + { + __IM uint32_t TIM_PRESCALER_VAL : 5; /*!< [4..0] Gives the current prescaler counter value. */ + uint32_t : 27; + } TIMER7_PRESCALER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_PWM_CTRL_REG; /*!< (@ 0x0000002C) Timer PWM Frequency Register */ + + struct + { + __IOM uint32_t TIM_PWM_FREQ : 16; /*!< [15..0] Defines the PWM frequency. Timer clock frequency/(TIM_PWM_FREQ+1).Time + * clock is the clock after prescaler. */ + __IOM uint32_t TIM_PWM_DC : 16; /*!< [31..16] Defines the PWM duty cycle. TIM_PWM_DC/( TIM_PWM_FREQ+1). */ + } TIMER7_PWM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_PULSE_GPIO_SEL_REG; /*!< (@ 0x00000030) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_GPIO_SEL2 : 6; /*!< [5..0] Select one of the 32 GPIOs as input for the pulse counter, + * valid values 0-32:0: Disable input1: P0_002: P0_013: P0_024: + * P0_035: P0_046: P0_057: P0_068: P0_079: P0_0810: P0_0911: + * P0_1012: P0_1113: P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: + * P1_0319: P1_0420: P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: + * P1_1026: P1_1127: P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: + * P1_17N */ + uint32_t : 26; + } TIMER7_PULSE_GPIO_SEL_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t TIMER7_PULSE_CNT_CTRL_REG; /*!< (@ 0x00000044) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_THRESHOLD2 : 32; /*!< [31..0] Select after how many pulses an IRQ is fired for the + * pulse counter.NOTE: Only change this when EDGE_DET_CNT_EN=0 + * in TIMER_CTRL_REG. */ + } TIMER7_PULSE_CNT_CTRL_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t TIMER7_CLEAR_IRQ_REG; /*!< (@ 0x00000054) Timer Clear Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_IRQ : 1; /*!< [0..0] Write any value to clear interrupt. */ + uint32_t : 31; + } TIMER7_CLEAR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t TIMER7_CLEAR_IRQ_PULSE_REG; /*!< (@ 0x00000058) Timer Clear Pulse Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_PULSE_IRQ : 1; /*!< [0..0] Write any value to clear IRQ pulse interrupt. */ + uint32_t : 31; + } TIMER7_CLEAR_IRQ_PULSE_REG_b; + }; +} TIMER7_Type; /*!< Size = 92 (0x5c) */ + +/* =========================================================================================================================== */ +/* ================ TIMER8 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TIMER8 registers (TIMER8) + */ + +typedef struct /*!< (@ 0x40080700) TIMER8 Structure */ +{ + union + { + __IOM uint32_t TIMER8_CTRL_REG; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint32_t TIM_EN : 1; /*!< [0..0] Timer enable:0: Off1: On */ + __IOM uint32_t TIM_ONESHOT_MODE_EN : 1; /*!< [1..1] Timer mode:0: Counter is enabled.1: One shot is enabled. */ + __IOM uint32_t TIM_COUNT_DOWN_EN : 1; /*!< [2..2] Timer count direction:0: Up1: DownNOTE: Only change this + * bit when timer is disabled. */ + __IOM uint32_t TIM_IN1_EVENT_FALL_EN : 1; /*!< [3..3] Event input 1 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IN2_EVENT_FALL_EN : 1; /*!< [4..4] Event input 2 edge selection:0: Rising edge1: Falling + * edge */ + __IOM uint32_t TIM_IRQ_EN : 1; /*!< [5..5] Interrupt mask:0: Timer IRQ is disable.1: Timer IRQ is + * enable. */ + __IOM uint32_t TIM_FREE_RUN_MODE_EN : 1; /*!< [6..6] Valid when timer counts up, if it is '1' timer does not + * zero when reaches to reload value. it becomes zero only + * when it reaches the max value. */ + __IOM uint32_t TIM_SYS_CLK_EN : 1; /*!< [7..7] Timer clock selection:0: LP_CLK clock1: DIVN clockNOTE: + * When switching clock, the timer clock should be disabled + * (TIM_CLK_EN, bit 8). */ + __IOM uint32_t TIM_CLK_EN : 1; /*!< [8..8] Timer clock enable:0: Clock is disabled.1: Clock is enabled. */ + uint32_t : 9; + __IOM uint32_t TIM_EDGE_DET_CNT_EN : 1; /*!< [18..18] Edge detection counter:0: Disable1: Enable */ + __IOM uint32_t TIM_EDGE_DET_CNT_FALL_EN : 1; /*!< [19..19] Counter trigger edge selection:0: the counter is triggered + * on a rising edge.1: the counter is triggered on a falling + * edge.NOTE: Only change this when EDGE_DET_CNT_EN=0 in TIMER_CTRL_REG. */ + uint32_t : 12; + } TIMER8_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_TIMER_VAL_REG; /*!< (@ 0x00000004) Timer Counter Value */ + + struct + { + __IM uint32_t TIM_TIMER_VALUE2 : 32; /*!< [31..0] Gives the current timer value. */ + } TIMER8_TIMER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_STATUS_REG; /*!< (@ 0x00000008) Timer Status Register */ + + struct + { + __IM uint32_t TIM_IN1_STATE : 1; /*!< [0..0] Gives the logic level of the IN2. */ + __IM uint32_t TIM_IN2_STATE : 1; /*!< [1..1] Gives the logic level of the IN1. */ + __IM uint32_t TIM_ONESHOT_PHASE : 2; /*!< [3..2] OneShot phase:0: Wait for event.1: Delay phase.2: Start + * Shot.3: Shot phase. */ + uint32_t : 4; + __IM uint32_t TIM_IRQ_STATUS : 1; /*!< [8..8] IRQ status bit. When an IRQ has occured, this bit is + * 1. */ + __IM uint32_t TIM_TIMER_BUSY : 1; /*!< [9..9] Busy with synchronizing PRESCALER_REG, RELOAD_REG and + * SHOTWIDTH_REG. Do not write a new value to these registers + * when this bit is high. */ + __IM uint32_t TIM_PWM_BUSY : 1; /*!< [10..10] Busy with synchronizing PWM_FREQ_REG and PWM_DC_REG. + * Do not write a new value to these registers when this bit + * is high. */ + __IM uint32_t TIM_SWITCHED_TO_DIVN_CLK : 1; /*!< [11..11] Indicates that timer clock is switched to divn clock. */ + uint32_t : 2; + __IM uint32_t TIM_IRQ_PULSE_STATUS : 1; /*!< [14..14] Status bit of IRQ pulse counter. When the pulse counter + * reaches the threshold value, this bit is 1. */ + uint32_t : 17; + } TIMER8_STATUS_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_GPIO1_CONF_REG; /*!< (@ 0x0000000C) Timer gpio1 selection */ + + struct + { + __IOM uint32_t TIM_GPIO1_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN1, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER8_GPIO1_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_GPIO2_CONF_REG; /*!< (@ 0x00000010) Timer gpio2 selection */ + + struct + { + __IOM uint32_t TIM_GPIO2_CONF : 6; /*!< [5..0] Select one of the 32 GPIOs as IN2, Valid values 0-32.0: + * Disable input1: P0_002: P0_013: P0_024: P0_035: P0_046: + * P0_057: P0_068: P0_079: P0_0810: P0_0911: P0_1012: P0_1113: + * P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: P1_0319: P1_0420: + * P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: P1_1026: P1_1127: + * P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: P1_17 */ + uint32_t : 26; + } TIMER8_GPIO2_CONF_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_SETTINGS_REG; /*!< (@ 0x00000014) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_RELOAD2 : 32; /*!< [31..0] Reload or max value in Timer mode; delay phase duration + * in Oneshot mode. Actual delay is the register value plus + * synchronization time (3 clock cycles). */ + } TIMER8_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_SHOTWIDTH_REG; /*!< (@ 0x00000018) Timer Shot Duration in Shot mode */ + + struct + { + __IOM uint32_t TIM_SHOTWIDTH2 : 32; /*!< [31..0] Shot phase duration in Oneshot mode. */ + } TIMER8_SHOTWIDTH_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_PRE_SETTINGS_REG; /*!< (@ 0x0000001C) Timer Reload Value and Delay in Shot mode */ + + struct + { + __IOM uint32_t TIM_PRESCALER2 : 5; /*!< [4..0] Defines the timer count frequency. CLOCK frequency/(TIM_PRESCALER+1). */ + uint32_t : 27; + } TIMER8_PRE_SETTINGS_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_CAPTURE_GPIO1_REG; /*!< (@ 0x00000020) Timer Value for Event on GPIO1 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO12 : 32; /*!< [31..0] Gives the capture time for event on GPIO1. */ + } TIMER8_CAPTURE_GPIO1_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_CAPTURE_GPIO2_REG; /*!< (@ 0x00000024) Timer Value for Event on GPIO2 */ + + struct + { + __IM uint32_t TIM_CAPTURE_GPIO22 : 32; /*!< [31..0] Gives the capture time for event on GPIO2. */ + } TIMER8_CAPTURE_GPIO2_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_PRESCALER_VAL_REG; /*!< (@ 0x00000028) Timer Prescaler Counter Value */ + + struct + { + __IM uint32_t TIM_PRESCALER_VAL : 5; /*!< [4..0] Gives the current prescaler counter value. */ + uint32_t : 27; + } TIMER8_PRESCALER_VAL_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_PWM_CTRL_REG; /*!< (@ 0x0000002C) Timer PWM Frequency Register */ + + struct + { + __IOM uint32_t TIM_PWM_FREQ : 16; /*!< [15..0] Defines the PWM frequency. Timer clock frequency/(TIM_PWM_FREQ+1).Time + * clock is the clock after prescaler. */ + __IOM uint32_t TIM_PWM_DC : 16; /*!< [31..16] Defines the PWM duty cycle. TIM_PWM_DC/( TIM_PWM_FREQ+1). */ + } TIMER8_PWM_CTRL_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_PULSE_GPIO_SEL_REG; /*!< (@ 0x00000030) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_GPIO_SEL2 : 6; /*!< [5..0] Select one of the 32 GPIOs as input for the pulse counter, + * valid values 0-32:0: Disable input1: P0_002: P0_013: P0_024: + * P0_035: P0_046: P0_057: P0_068: P0_079: P0_0810: P0_0911: + * P0_1012: P0_1113: P0_1214: P0_1315: P1_0016: P1_0117: P1_0218: + * P1_0319: P1_0420: P1_0521: P1_0622: P1_0723: P1_0824: P1_0925: + * P1_1026: P1_1127: P1_1228: P1_1329: P1_1430: P1_1531: P1_1632: + * P1_17N */ + uint32_t : 26; + } TIMER8_PULSE_GPIO_SEL_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t TIMER8_PULSE_CNT_CTRL_REG; /*!< (@ 0x00000044) Timer Pulse Counter CTRL Register */ + + struct + { + __IOM uint32_t PULSE_CNT_THRESHOLD2 : 32; /*!< [31..0] Select after how many pulses an IRQ is fired for the + * pulse counter.NOTE: Only change this when EDGE_DET_CNT_EN=0 + * in TIMER_CTRL_REG. */ + } TIMER8_PULSE_CNT_CTRL_REG_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t TIMER8_CLEAR_IRQ_REG; /*!< (@ 0x00000054) Timer Clear Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_IRQ : 1; /*!< [0..0] Write any value to clear interrupt. */ + uint32_t : 31; + } TIMER8_CLEAR_IRQ_REG_b; + }; + + union + { + __IOM uint32_t TIMER8_CLEAR_IRQ_PULSE_REG; /*!< (@ 0x00000058) Timer Clear Pulse Interrupt */ + + struct + { + __OM uint32_t TIM_CLEAR_PULSE_IRQ : 1; /*!< [0..0] Write any value to clear IRQ pulse interrupt. */ + uint32_t : 31; + } TIMER8_CLEAR_IRQ_PULSE_REG_b; + }; +} TIMER8_Type; /*!< Size = 92 (0x5c) */ + +/* =========================================================================================================================== */ +/* ================ UART ================ */ +/* =========================================================================================================================== */ + +/** + * @brief UART registers (UART) + */ + +typedef struct /*!< (@ 0x40000000) UART Structure */ +{ + union + { + __IOM uint32_t UART_DR_REG; /*!< (@ 0x00000000) UART Data Register */ + + struct + { + __IOM uint32_t DR_DATA : 8; /*!< [7..0] Receive (read) data charaterTransmit (write) data character */ + __IOM uint32_t DR_FE : 1; /*!< [8..8] Framing error. When set to 1, it indicates that the received + * character did not have a valid stop bit (a valid stop bit + * is 1).In FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t DR_PE : 1; /*!< [9..9] Parity error. When set to 1, it indicates that the parity + * of the received data character does not match the parity + * that the EPS and SPS bits in the Line Control Register, + * UARTLCR_H.In FIFO mode, this error is associated with the + * character at the top of the FIFO. */ + __IOM uint32_t DR_BE : 1; /*!< [10..10] Break error. This bit is set to 1 if a break condition + * was detected, indicating that the received data input was + * held LOW for longer than a full-word transmission time + * (defined as start, data, parity and stop bits).In FIFO + * mode, this error is associated with the character at the + * top of the FIFO. When a break occurs, only one 0 character + * is loaded into the FIFO. The next character is only enabled + * after the receive data input goes to a 1 (marking state), + * and the next valid start bit is received. */ + __IOM uint32_t DR_OE : 1; /*!< [11..11] Overrun error. This bit is set to 1 if data is received + * and the receive FIFO is already full.This is cleared to + * 0 once there is an empty space in the FIFO and a new character + * can be written to it. */ + uint32_t : 20; + } UART_DR_REG_b; + }; + + union + { + __IOM uint32_t UART_RSR_REG; /*!< (@ 0x00000004) UART Receive Status (Read), Error Clear (Write) + * Register */ + + struct + { + __IOM uint32_t RSR_FE : 1; /*!< [0..0] Framing error. When set to 1, it indicates that the received + * character did not have a valid stop bit (a valid stop bit + * is 1).This bit is cleared to 0 by a write to the register.In + * FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t RSR_PE : 1; /*!< [1..1] Parity error. When set to 1, it indicates that the parity + * of the received data character does not match the parity + * that the EPS and SPS bits in the Line Control Register, + * UARTLCR_H.This bit is cleared to 0 by a write to the register.In + * FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t RSR_BE : 1; /*!< [2..2] Break error. This bit is set to 1 if a break condition + * was detected, indicating that the received data input was + * held LOW for longer than a full-word transmission time + * (defined as start, data, parity, and stop bits).This bit + * is cleared to 0 after a write to the register.In FIFO mode, + * this error is associated with the character at the top + * of the FIFO. When a break occurs, only one 0 character + * is loaded into the FIFO. The next character is only enabled + * after the receive data input goes to a 1 (mark */ + __IOM uint32_t RSR_OE : 1; /*!< [3..3] Overrun error. This bit is set to 1 if data is received + * and the FIFO is already full.This bit is cleared to 0 by + * a write to the register.The FIFO contents remain valid + * because no more data is written when the FIFO is full, + * only the contents of the shift register are overwritten. + * The CPU must now read the data, to empty the FIFO. */ + uint32_t : 28; + } UART_RSR_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t UART_FR_REG; /*!< (@ 0x00000018) UART Flag Register */ + + struct + { + __IM uint32_t CTS : 1; /*!< [0..0] Clear to send. This bit is the complement of the UART + * clear to send, nUARTCTS, modem status input.That is, the + * bit is 1 when nUARTCTS is LOW. */ + __IM uint32_t DSR : 1; /*!< [1..1] Data set ready. This bit is the complement of the UART + * data set ready, nUARTDSR, modem status input.That is, the + * bit is 1 when nUARTDSR is LOW. */ + __IM uint32_t DCD : 1; /*!< [2..2] Data carrier detect. This bit is the complement of the + * UART data carrier detect, nUARTDCD, modem status input.That + * is, the bit is 1 when nUARTDCD is LOW. */ + __IM uint32_t BUSY : 1; /*!< [3..3] UART busy. If this bit is set to 1, the UART is busy + * transmitting data. This bit remains set until the complete + * byte, including all the stop bits, has been sent from the + * shift register.This bit is set as soon as the transmit + * FIFO becomes non-empty, regardless of whether the UART + * is enabled or not. */ + __IM uint32_t RXFE : 1; /*!< [4..4] Receive FIFO empty. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the receive holding + * register is empty.If the FIFO is enabled, the RXFE bit + * is set when the receive FIFO is empty. */ + __IM uint32_t TXFF : 1; /*!< [5..5] Transmit FIFO full. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the transmit holding + * register is full.If the FIFO is enabled, the TXFF bit is + * set when the transmit FIFO is full. */ + __IM uint32_t RXFF : 1; /*!< [6..6] Receive FIFO full. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the receive holding + * register is full.If the FIFO is enabled, the RXFF bit is + * set when the receive FIFO is full. */ + __IM uint32_t TXFE : 1; /*!< [7..7] Transmit FIFO empty. The meaning of this bit depends + * on the state of the FEN bit in the Line Control Register, + * UARTLCR_HIf the FIFO is disabled, this bit is set when + * the transmit holding register is empty.If the FIFO is enabled, + * the TXFE bit is set when the transmit FIFO is empty.This + * bit does not indicate if there is data in the transmit + * shift register. */ + __IM uint32_t RI : 1; /*!< [8..8] Ring indicator. This bit is the complement of the UART + * ring indicator, nUARTRI, modem status input.That is, the + * bit is 1 when nUARTRI is LOW. */ + uint32_t : 23; + } UART_FR_REG_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t UART_IBRD_REG; /*!< (@ 0x00000024) UART Integer Baud Rate Divisor Register */ + + struct + { + __IOM uint32_t BAUD_DIVINT : 16; /*!< [15..0] The integer baud rate divisor.These bits are cleared + * to 0 on reset. */ + uint32_t : 16; + } UART_IBRD_REG_b; + }; + + union + { + __IOM uint32_t UART_FBRD_REG; /*!< (@ 0x00000028) UART Fractional Baud Rate Divisor Register */ + + struct + { + __IOM uint32_t BAUD_DIVFRAC : 6; /*!< [5..0] The fractional baud rate divisor.These bits are cleared + * to 0 on reset. */ + uint32_t : 26; + } UART_FBRD_REG_b; + }; + + union + { + __IOM uint32_t UART_LCR_H_REG; /*!< (@ 0x0000002C) UART Line Control Register (High Byte) */ + + struct + { + __IOM uint32_t BRK : 1; /*!< [0..0] Send break. If this bit is set to 1, a low-level is continually + * output on the UARTTXD output, after completing transmission + * of the current character. For the proper execution of the + * break command, the software must set this bit for at least + * two complete frames.For normal use, this bit must be cleared + * to 0. */ + __IOM uint32_t PEN : 1; /*!< [1..1] Parity enable:0 = parity is disabled and no parity bit + * added to the data frame1 = parity checking and generation + * is enabled. */ + __IOM uint32_t EPS : 1; /*!< [2..2] Even parity select. Controls the type of parity the UART + * uses during transmission and reception:0 = odd parity. + * The UART generates or checks for an odd number of 1s in + * the data and parity bits.1 = even parity. The UART generates + * or checks for an even number of 1s in the data and parity + * bits.This bit has no effect when the PEN bit disables parity + * checking and generation. */ + __IOM uint32_t STP2 : 1; /*!< [3..3] Two stop bits select. If this bit is set to 1, two stop + * bits are transmitted at the end of the frame. The receive + * logic does not check for two stop bits being received. */ + __IOM uint32_t FEN : 1; /*!< [4..4] Enable FIFOs:0 = FIFOs are disabled (character mode) + * that is, the FIFOs become 1-byte-deep holding registers1 + * = transmit and receive FIFO buffers are enabled (FIFO mode). */ + __IOM uint32_t WLEN : 2; /*!< [6..5] Word length. These bits indicate the number of data bits + * transmitted or received in a frame as follows:b11 = 8 bitsb10 + * = 7 bitsb01 = 6 bitsb00 = 5 bits. */ + __IOM uint32_t SPS : 1; /*!< [7..7] Stick parity select.0 = stick parity is disabled1 = either:? + * if the EPS bit is 0 then the parity bit is transmitted + * and checked as a 1? if the EPS bit is 1 then the parity + * bit is transmitted and checked as a 0.This bit has no effect + * when the PEN bit disables parity checking and generation. */ + uint32_t : 24; + } UART_LCR_H_REG_b; + }; + + union + { + __IOM uint32_t UART_CR_REG; /*!< (@ 0x00000030) UART Control Register */ + + struct + { + __IOM uint32_t UARTEN : 1; /*!< [0..0] UART enable:0 = UART is disabled. If the UART is disabled + * in the middle of transmission or reception, it completes + * the current character before stopping.1 = the UART is enabled. + * Data transmission and reception occurs. */ + uint32_t : 6; + __IOM uint32_t LBE : 1; /*!< [7..7] Loopback enable. If this bit is set to 1, the UARTTXD + * path is fed through to the UARTRXD path.When this bit is + * set, the modem outputs are also fed through to the modem + * inputs.This bit is cleared to 0 on reset, to disable loopback. */ + __IOM uint32_t TXE : 1; /*!< [8..8] Transmit enable. If this bit is set to 1, the transmit + * section of the UART is enabled. */ + __IOM uint32_t RXE : 1; /*!< [9..9] Receive enable. If this bit is set to 1, the receive + * section of the UART is enabled. */ + __IOM uint32_t DTR : 1; /*!< [10..10] Data transmit ready. This bit is the complement of + * the UART data transmit ready, nUARTDTR, modem status output. + * That is, when the bit is programmed to a 1 then nUARTDTR + * is LOW */ + __IOM uint32_t RTS : 1; /*!< [11..11] Request to send. This bit is the complement of the + * UART request to send, nUARTRTS, modem status output. That + * is, when the bit is programmed to a 1 then nUARTRTS is + * LOW */ + __IOM uint32_t Out1 : 1; /*!< [12..12] This bit is the complement of the UART Out1 (nUARTOut1) + * modem status output. That is, when the bit is programmed + * to a 1 the output is 0. For DTE this can be used as Data + * Carrier Detect (DCD). */ + __IOM uint32_t Out2 : 1; /*!< [13..13] This bit is the complement of the UART Out2 (nUARTOut2) + * modem status output. That is, when the bit is programmed + * to a 1, the output is 0. For DTE this can be used as Ring + * Indicator (RI). */ + __IOM uint32_t RTSEn : 1; /*!< [14..14] RTS hardware flow control enable. If this bit is set + * to 1, RTS hardware flow control is enabled.Data is only + * requested when there is space in the receive FIFO for it + * to be received. */ + __IOM uint32_t CTSEn : 1; /*!< [15..15] CTS hardware flow control enable. If this bit is set + * to 1, CTS hardware flow control is enabled.Data is only + * transmitted when the nUARTCTS signal is asserted. */ + uint32_t : 16; + } UART_CR_REG_b; + }; + + union + { + __IOM uint32_t UART_IFLS_REG; /*!< (@ 0x00000034) UART Interrupt FIFO Level Select Register */ + + struct + { + __IOM uint32_t TXIFLSEL : 3; /*!< [2..0] Transmit interrupt FIFO level select. The trigger points + * for the transmit interrupt are as follows:b000 = Transmit + * FIFO becomes 1/8 fullb001 = Transmit FIFO becomes 1/4 fullb010 + * = Transmit FIFO becomes 1/2 fullb011 = Transmit FIFO becomes + * 3/4 fullb100 = Transmit FIFO becomes 7/8 fullb101-b111 + * = Reserved. */ + __IOM uint32_t RXIFLSEL : 3; /*!< [5..3] Receive interrupt FIFO level select. The trigger points + * for the receive interrupt are as follows:b000 = Receive + * FIFO becomes 1/8 fullb001 = Receive FIFO becomes 1/4 fullb010 + * = Receive FIFO becomes 1/2 fullb011 = Receive FIFO becomes + * 3/4 fullb100 = Receive FIFO becomes 7/8 fullb101-b111 = + * Reserved. */ + uint32_t : 26; + } UART_IFLS_REG_b; + }; + + union + { + __IOM uint32_t UART_IMSC_REG; /*!< (@ 0x00000038) UART Interrupt Mask Set/Clear Register */ + + struct + { + __IOM uint32_t RIMIM : 1; /*!< [0..0] nUARTRI modem interrupt mask. A read returns the current + * mask for the UARTRIINTR interrupt.On a write of 1, the + * mask of the UARTRIINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t CTSMIM : 1; /*!< [1..1] nUARTCTS modem interrupt mask. A read returns the current + * mask for the UARTCTSINTR interrupt.On a write of 1, the + * mask of the UARTCTSINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t DCDMIM : 1; /*!< [2..2] nUARTDCD modem interrupt mask. A read returns the current + * mask for the UARTDCDINTR interrupt.On a write of 1, the + * mask of the UARTDCDINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t DSRMIM : 1; /*!< [3..3] nUARTDSR modem interrupt mask. A read returns the current + * mask for the UARTDSRINTR interrupt.On a write of 1, the + * mask of the UARTDSRINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t RXIM : 1; /*!< [4..4] Receive interrupt mask. A read returns the current mask + * for the UARTRXINTR interrupt.On a write of 1, the mask + * of the UARTRXINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t TXIM : 1; /*!< [5..5] Transmit interrupt mask. A read returns the current mask + * for the UARTTXINTR interrupt.On a write of 1, the mask + * of the UARTTXINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t RTIM : 1; /*!< [6..6] Receive timeout interrupt mask. A read returns the current + * mask for the UARTRTINTR interrupt.On a write of 1, the + * mask of the UARTRTINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t FEIM : 1; /*!< [7..7] Framing error interrupt mask. A read returns the current + * mask for the UARTFEINTR interrupt.On a write of 1, the + * mask of the UARTFEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t PEIM : 1; /*!< [8..8] Parity error interrupt mask. A read returns the current + * mask for the UARTPEINTR interrupt.On a write of 1, the + * mask of the UARTPEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t BEIM : 1; /*!< [9..9] Break error interrupt mask. A read returns the current + * mask for the UARTBEINTR interrupt.On a write of 1, the + * mask of the UARTBEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t OEIM : 1; /*!< [10..10] Overrun error interrupt mask. A read returns the current + * mask for the UARTOEINTR interrupt.On a write of 1, the + * mask of the UARTOEINTR interrupt is set. A write of 0 clears + * the mask. */ + uint32_t : 21; + } UART_IMSC_REG_b; + }; + + union + { + __IOM uint32_t UART_RIS_REG; /*!< (@ 0x0000003C) UART Raw Interrupt Status Register */ + + struct + { + __IM uint32_t RIRMIS : 1; /*!< [0..0] nUARTRI modem interrupt status. Returns the raw interrupt + * state of the UARTRIINTR interrupt. */ + __IM uint32_t CTSRMIS : 1; /*!< [1..1] nUARTCTS modem interrupt status. Returns the raw interrupt + * state of the UARTCTSINTR interrupt. */ + __IM uint32_t DCDRMIS : 1; /*!< [2..2] nUARTDCD modem interrupt status. Returns the raw interrupt + * state of the UARTDCDINTR interrupt. */ + __IM uint32_t DSRRMIS : 1; /*!< [3..3] nUARTDSR modem interrupt status. Returns the raw interrupt + * state of the UARTDSRINTR interrupt. */ + __IM uint32_t RXRIS : 1; /*!< [4..4] Receive interrupt status. Returns the raw interrupt state + * of the UARTRXINTR interrupt. */ + __IM uint32_t TXRIS : 1; /*!< [5..5] Transmit interrupt status. Returns the raw interrupt + * state of the UARTTXINTR interrupt. */ + __IM uint32_t RTRIS : 1; /*!< [6..6] Receive timeout interrupt status. Returns the raw interrupt + * state of the UARTRTINTR interrupt. */ + __IM uint32_t FERIS : 1; /*!< [7..7] Framing error interrupt status. Returns the raw interrupt + * state of the UARTFEINTR interrupt. */ + __IM uint32_t PERIS : 1; /*!< [8..8] Parity error interrupt status. Returns the raw interrupt + * state of the UARTPEINTR interrupt. */ + __IM uint32_t BERIS : 1; /*!< [9..9] Break error interrupt status. Returns the raw interrupt + * state of the UARTBEINTR interrupt. */ + __IM uint32_t OERIS : 1; /*!< [10..10] Overrun error interrupt status. Returns the raw interrupt + * state of the UARTOEINTR interrupt. */ + uint32_t : 21; + } UART_RIS_REG_b; + }; + + union + { + __IOM uint32_t UART_MIS_REG; /*!< (@ 0x00000040) UART Masked Interrupt Status Register */ + + struct + { + __IM uint32_t RIMMIS : 1; /*!< [0..0] nUARTRI modem masked interrupt status. Returns the masked + * interrupt state of the UARTRIINTR interrupt. */ + __IM uint32_t CTSMMIS : 1; /*!< [1..1] nUARTCTS modem masked interrupt status. Returns the masked + * interrupt state of the UARTCTSINTR interrupt. */ + __IM uint32_t DCDMMIS : 1; /*!< [2..2] nUARTDCD modem masked interrupt status. Returns the masked + * interrupt state of the UARTDCDINTR interrupt. */ + __IM uint32_t DSRMMIS : 1; /*!< [3..3] nUARTDSR modem masked interrupt status. Returns the masked + * interrupt state of the UARTDSRINTR interrupt. */ + __IM uint32_t RXMIS : 1; /*!< [4..4] Receive masked interrupt status. Returns the masked interrupt + * state of the UARTRXINTR interrupt. */ + __IM uint32_t TXMIS : 1; /*!< [5..5] Transmit masked interrupt status. Returns the masked + * interrupt state of the UARTTXINTR interrupt. */ + __IM uint32_t RTMIS : 1; /*!< [6..6] Receive timeout masked interrupt status. Returns the + * masked interrupt state of the UARTRTINTR interrupt. */ + __IM uint32_t FEMIS : 1; /*!< [7..7] Framing error masked interrupt status. Returns the masked + * interrupt state of the UARTFEINTR interrupt. */ + __IM uint32_t PEMIS : 1; /*!< [8..8] Parity error masked interrupt status. Returns the masked + * interrupt state of the UARTPEINTR interrupt. */ + __IM uint32_t BEMIS : 1; /*!< [9..9] Break error masked interrupt status. Returns the masked + * interrupt state of the UARTBEINTR interrupt. */ + __IM uint32_t OEMIS : 1; /*!< [10..10] Overrun error masked interrupt status. Returns the + * masked interrupt state of the UARTOEINTR interrupt. */ + uint32_t : 21; + } UART_MIS_REG_b; + }; + + union + { + __IOM uint32_t UART_ICR_REG; /*!< (@ 0x00000044) UART Interrupt Clear Register */ + + struct + { + __OM uint32_t RIMIC : 1; /*!< [0..0] nUARTRI modem interrupt clear. Clears the UARTRIINTR + * interrupt. */ + __OM uint32_t CTSMIC : 1; /*!< [1..1] nUARTCTS modem interrupt clear. Clears the UARTCTSINTR + * interrupt. */ + __OM uint32_t DCDMIC : 1; /*!< [2..2] nUARTDCD modem interrupt clear. Clears the UARTDCDINTR + * interrupt. */ + __OM uint32_t DSRMIC : 1; /*!< [3..3] nUARTDSR modem interrupt clear. Clears the UARTDSRINTR + * interrupt. */ + __OM uint32_t RXIC : 1; /*!< [4..4] Receive interrupt clear. Clears the UARTRXINTR interrupt. */ + __OM uint32_t TXIC : 1; /*!< [5..5] Transmit interrupt clear. Clears the UARTTXINTR interrupt. */ + __OM uint32_t RTIC : 1; /*!< [6..6] Receive timeout interrupt clear. Clears the UARTRTINTR + * interrupt. */ + __OM uint32_t FEIC : 1; /*!< [7..7] Framing error interrupt clear. Clears the UARTFEINTR + * interrupt. */ + __OM uint32_t PEIC : 1; /*!< [8..8] Parity error interrupt clear. Clears the UARTPEINTR interrupt. */ + __OM uint32_t BEIC : 1; /*!< [9..9] Break error interrupt clear. Clears the UARTBEINTR interrupt. */ + __OM uint32_t OEIC : 1; /*!< [10..10] Overrun error interrupt clear. Clears the UARTOEINTR + * interrupt. */ + uint32_t : 21; + } UART_ICR_REG_b; + }; + + union + { + __IOM uint32_t UART_DMACR_REG; /*!< (@ 0x00000048) UART DMA Control Register */ + + struct + { + __IOM uint32_t RXDMAE : 1; /*!< [0..0] Receive DMA enable. If this bit is set to 1, DMA for + * the receive FIFO is enabled. */ + __IOM uint32_t TXDMAE : 1; /*!< [1..1] Transmit DMA enable. If this bit is set to 1, DMA for + * the transmit FIFO is enabled. */ + __IOM uint32_t DMAONERR : 1; /*!< [2..2] DMA on error. If this bit is set to 1, the DMA receive + * request outputs, UARTRXDMASREQ or UARTRXDMABREQ, are disabled + * when the UART error interrupt is asserted */ + uint32_t : 29; + } UART_DMACR_REG_b; + }; + + union + { + __IOM uint32_t UART_WA_REG; /*!< (@ 0x0000004C) UART Word Access Enable Register */ + + struct + { + __IOM uint32_t WAE : 1; /*!< [0..0] DMA word access enable bit. If this bit is set to 1, + * DMA word access mode is enabled. */ + uint32_t : 31; + } UART_WA_REG_b; + }; + + union + { + __IOM uint32_t UART_SWFC_REG; /*!< (@ 0x00000050) UART Software Flow Control Enable Register */ + + struct + { + __IOM uint32_t SWFCE : 1; /*!< [0..0] DMA software flow control enable bit. If this bit is + * set to 1, DMA software flow control mode is enabled. */ + uint32_t : 31; + } UART_SWFC_REG_b; + }; + + union + { + __IOM uint32_t UART_RS485EN_REG; /*!< (@ 0x00000054) UART RS485 Mode Enable Register */ + + struct + { + __IOM uint32_t RS485E : 1; /*!< [0..0] DMA RS485 mode enable bit. If this bit is set to 1, DMA + * RS485 mode is enabled. */ + uint32_t : 31; + } UART_RS485EN_REG_b; + }; +} UART_Type; /*!< Size = 88 (0x58) */ + +/* =========================================================================================================================== */ +/* ================ UART2 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief UART2 registers (UART2) + */ + +typedef struct /*!< (@ 0x40001000) UART2 Structure */ +{ + union + { + __IOM uint32_t UART2_DR_REG; /*!< (@ 0x00000000) UART Data Register */ + + struct + { + __IOM uint32_t DR_DATA : 8; /*!< [7..0] Receive (read) data charaterTransmit (write) data character */ + __IOM uint32_t DR_FE : 1; /*!< [8..8] Framing error. When set to 1, it indicates that the received + * character did not have a valid stop bit (a valid stop bit + * is 1).In FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t DR_PE : 1; /*!< [9..9] Parity error. When set to 1, it indicates that the parity + * of the received data character does not match the parity + * that the EPS and SPS bits in the Line Control Register, + * UARTLCR_H.In FIFO mode, this error is associated with the + * character at the top of the FIFO. */ + __IOM uint32_t DR_BE : 1; /*!< [10..10] Break error. This bit is set to 1 if a break condition + * was detected, indicating that the received data input was + * held LOW for longer than a full-word transmission time + * (defined as start, data, parity and stop bits).In FIFO + * mode, this error is associated with the character at the + * top of the FIFO. When a break occurs, only one 0 character + * is loaded into the FIFO. The next character is only enabled + * after the receive data input goes to a 1 (marking state), + * and the next valid start bit is received. */ + __IOM uint32_t DR_OE : 1; /*!< [11..11] Overrun error. This bit is set to 1 if data is received + * and the receive FIFO is already full.This is cleared to + * 0 once there is an empty space in the FIFO and a new character + * can be written to it. */ + uint32_t : 20; + } UART2_DR_REG_b; + }; + + union + { + __IOM uint32_t UART2_RSR_REG; /*!< (@ 0x00000004) UART Receive Status (Read), Error Clear (Write) + * Register */ + + struct + { + __IOM uint32_t RSR_FE : 1; /*!< [0..0] Framing error. When set to 1, it indicates that the received + * character did not have a valid stop bit (a valid stop bit + * is 1).This bit is cleared to 0 by a write to the register.In + * FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t RSR_PE : 1; /*!< [1..1] Parity error. When set to 1, it indicates that the parity + * of the received data character does not match the parity + * that the EPS and SPS bits in the Line Control Register, + * UARTLCR_H.This bit is cleared to 0 by a write to the register.In + * FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t RSR_BE : 1; /*!< [2..2] Break error. This bit is set to 1 if a break condition + * was detected, indicating that the received data input was + * held LOW for longer than a full-word transmission time + * (defined as start, data, parity, and stop bits).This bit + * is cleared to 0 after a write to the register.In FIFO mode, + * this error is associated with the character at the top + * of the FIFO. When a break occurs, only one 0 character + * is loaded into the FIFO. The next character is only enabled + * after the receive data input goes to a 1 (mark */ + __IOM uint32_t RSR_OE : 1; /*!< [3..3] Overrun error. This bit is set to 1 if data is received + * and the FIFO is already full.This bit is cleared to 0 by + * a write to the register.The FIFO contents remain valid + * because no more data is written when the FIFO is full, + * only the contents of the shift register are overwritten. + * The CPU must now read the data, to empty the FIFO. */ + uint32_t : 28; + } UART2_RSR_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t UART2_FR_REG; /*!< (@ 0x00000018) UART Flag Register */ + + struct + { + __IM uint32_t CTS : 1; /*!< [0..0] Clear to send. This bit is the complement of the UART + * clear to send, nUARTCTS, modem status input.That is, the + * bit is 1 when nUARTCTS is LOW. */ + __IM uint32_t DSR : 1; /*!< [1..1] Data set ready. This bit is the complement of the UART + * data set ready, nUARTDSR, modem status input.That is, the + * bit is 1 when nUARTDSR is LOW. */ + __IM uint32_t DCD : 1; /*!< [2..2] Data carrier detect. This bit is the complement of the + * UART data carrier detect, nUARTDCD, modem status input.That + * is, the bit is 1 when nUARTDCD is LOW. */ + __IM uint32_t BUSY : 1; /*!< [3..3] UART busy. If this bit is set to 1, the UART is busy + * transmitting data. This bit remains set until the complete + * byte, including all the stop bits, has been sent from the + * shift register.This bit is set as soon as the transmit + * FIFO becomes non-empty, regardless of whether the UART + * is enabled or not. */ + __IM uint32_t RXFE : 1; /*!< [4..4] Receive FIFO empty. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the receive holding + * register is empty.If the FIFO is enabled, the RXFE bit + * is set when the receive FIFO is empty. */ + __IM uint32_t TXFF : 1; /*!< [5..5] Transmit FIFO full. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the transmit holding + * register is full.If the FIFO is enabled, the TXFF bit is + * set when the transmit FIFO is full. */ + __IM uint32_t RXFF : 1; /*!< [6..6] Receive FIFO full. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the receive holding + * register is full.If the FIFO is enabled, the RXFF bit is + * set when the receive FIFO is full. */ + __IM uint32_t TXFE : 1; /*!< [7..7] Transmit FIFO empty. The meaning of this bit depends + * on the state of the FEN bit in the Line Control Register, + * UARTLCR_HIf the FIFO is disabled, this bit is set when + * the transmit holding register is empty.If the FIFO is enabled, + * the TXFE bit is set when the transmit FIFO is empty.This + * bit does not indicate if there is data in the transmit + * shift register. */ + __IM uint32_t RI : 1; /*!< [8..8] Ring indicator. This bit is the complement of the UART + * ring indicator, nUARTRI, modem status input.That is, the + * bit is 1 when nUARTRI is LOW. */ + uint32_t : 23; + } UART2_FR_REG_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t UART2_IBRD_REG; /*!< (@ 0x00000024) UART Integer Baud Rate Divisor Register */ + + struct + { + __IOM uint32_t BAUD_DIVINT : 16; /*!< [15..0] The integer baud rate divisor.These bits are cleared + * to 0 on reset. */ + uint32_t : 16; + } UART2_IBRD_REG_b; + }; + + union + { + __IOM uint32_t UART2_FBRD_REG; /*!< (@ 0x00000028) UART Fractional Baud Rate Divisor Register */ + + struct + { + __IOM uint32_t BAUD_DIVFRAC : 6; /*!< [5..0] The fractional baud rate divisor.These bits are cleared + * to 0 on reset. */ + uint32_t : 26; + } UART2_FBRD_REG_b; + }; + + union + { + __IOM uint32_t UART2_LCR_H_REG; /*!< (@ 0x0000002C) UART Line Control Register (High Byte) */ + + struct + { + __IOM uint32_t BRK : 1; /*!< [0..0] Send break. If this bit is set to 1, a low-level is continually + * output on the UARTTXD output, after completing transmission + * of the current character. For the proper execution of the + * break command, the software must set this bit for at least + * two complete frames.For normal use, this bit must be cleared + * to 0. */ + __IOM uint32_t PEN : 1; /*!< [1..1] Parity enable:0 = parity is disabled and no parity bit + * added to the data frame1 = parity checking and generation + * is enabled. */ + __IOM uint32_t EPS : 1; /*!< [2..2] Even parity select. Controls the type of parity the UART + * uses during transmission and reception:0 = odd parity. + * The UART generates or checks for an odd number of 1s in + * the data and parity bits.1 = even parity. The UART generates + * or checks for an even number of 1s in the data and parity + * bits.This bit has no effect when the PEN bit disables parity + * checking and generation. */ + __IOM uint32_t STP2 : 1; /*!< [3..3] Two stop bits select. If this bit is set to 1, two stop + * bits are transmitted at the end of the frame. The receive + * logic does not check for two stop bits being received. */ + __IOM uint32_t FEN : 1; /*!< [4..4] Enable FIFOs:0 = FIFOs are disabled (character mode) + * that is, the FIFOs become 1-byte-deep holding registers1 + * = transmit and receive FIFO buffers are enabled (FIFO mode). */ + __IOM uint32_t WLEN : 2; /*!< [6..5] Word length. These bits indicate the number of data bits + * transmitted or received in a frame as follows:b11 = 8 bitsb10 + * = 7 bitsb01 = 6 bitsb00 = 5 bits. */ + __IOM uint32_t SPS : 1; /*!< [7..7] Stick parity select.0 = stick parity is disabled1 = either:? + * if the EPS bit is 0 then the parity bit is transmitted + * and checked as a 1? if the EPS bit is 1 then the parity + * bit is transmitted and checked as a 0.This bit has no effect + * when the PEN bit disables parity checking and generation. */ + uint32_t : 24; + } UART2_LCR_H_REG_b; + }; + + union + { + __IOM uint32_t UART2_CR_REG; /*!< (@ 0x00000030) UART Control Register */ + + struct + { + __IOM uint32_t UARTEN : 1; /*!< [0..0] UART enable:0 = UART is disabled. If the UART is disabled + * in the middle of transmission or reception, it completes + * the current character before stopping.1 = the UART is enabled. + * Data transmission and reception occurs. */ + uint32_t : 6; + __IOM uint32_t LBE : 1; /*!< [7..7] Loopback enable. If this bit is set to 1, the UARTTXD + * path is fed through to the UARTRXD path.When this bit is + * set, the modem outputs are also fed through to the modem + * inputs.This bit is cleared to 0 on reset, to disable loopback. */ + __IOM uint32_t TXE : 1; /*!< [8..8] Transmit enable. If this bit is set to 1, the transmit + * section of the UART is enabled. */ + __IOM uint32_t RXE : 1; /*!< [9..9] Receive enable. If this bit is set to 1, the receive + * section of the UART is enabled. */ + __IOM uint32_t DTR : 1; /*!< [10..10] Data transmit ready. This bit is the complement of + * the UART data transmit ready, nUARTDTR, modem status output. + * That is, when the bit is programmed to a 1 then nUARTDTR + * is LOW */ + __IOM uint32_t RTS : 1; /*!< [11..11] Request to send. This bit is the complement of the + * UART request to send, nUARTRTS, modem status output. That + * is, when the bit is programmed to a 1 then nUARTRTS is + * LOW */ + __IOM uint32_t Out1 : 1; /*!< [12..12] This bit is the complement of the UART Out1 (nUARTOut1) + * modem status output. That is, when the bit is programmed + * to a 1 the output is 0. For DTE this can be used as Data + * Carrier Detect (DCD). */ + __IOM uint32_t Out2 : 1; /*!< [13..13] This bit is the complement of the UART Out2 (nUARTOut2) + * modem status output. That is, when the bit is programmed + * to a 1, the output is 0. For DTE this can be used as Ring + * Indicator (RI). */ + __IOM uint32_t RTSEn : 1; /*!< [14..14] RTS hardware flow control enable. If this bit is set + * to 1, RTS hardware flow control is enabled.Data is only + * requested when there is space in the receive FIFO for it + * to be received. */ + __IOM uint32_t CTSEn : 1; /*!< [15..15] CTS hardware flow control enable. If this bit is set + * to 1, CTS hardware flow control is enabled.Data is only + * transmitted when the nUARTCTS signal is asserted. */ + uint32_t : 16; + } UART2_CR_REG_b; + }; + + union + { + __IOM uint32_t UART2_IFLS_REG; /*!< (@ 0x00000034) UART Interrupt FIFO Level Select Register */ + + struct + { + __IOM uint32_t TXIFLSEL : 3; /*!< [2..0] Transmit interrupt FIFO level select. The trigger points + * for the transmit interrupt are as follows:b000 = Transmit + * FIFO becomes 1/8 fullb001 = Transmit FIFO becomes 1/4 fullb010 + * = Transmit FIFO becomes 1/2 fullb011 = Transmit FIFO becomes + * 3/4 fullb100 = Transmit FIFO becomes 7/8 fullb101-b111 + * = Reserved. */ + __IOM uint32_t RXIFLSEL : 3; /*!< [5..3] Receive interrupt FIFO level select. The trigger points + * for the receive interrupt are as follows:b000 = Receive + * FIFO becomes 1/8 fullb001 = Receive FIFO becomes 1/4 fullb010 + * = Receive FIFO becomes 1/2 fullb011 = Receive FIFO becomes + * 3/4 fullb100 = Receive FIFO becomes 7/8 fullb101-b111 = + * Reserved. */ + uint32_t : 26; + } UART2_IFLS_REG_b; + }; + + union + { + __IOM uint32_t UART2_IMSC_REG; /*!< (@ 0x00000038) UART Interrupt Mask Set/Clear Register */ + + struct + { + __IOM uint32_t RIMIM : 1; /*!< [0..0] nUARTRI modem interrupt mask. A read returns the current + * mask for the UARTRIINTR interrupt.On a write of 1, the + * mask of the UARTRIINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t CTSMIM : 1; /*!< [1..1] nUARTCTS modem interrupt mask. A read returns the current + * mask for the UARTCTSINTR interrupt.On a write of 1, the + * mask of the UARTCTSINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t DCDMIM : 1; /*!< [2..2] nUARTDCD modem interrupt mask. A read returns the current + * mask for the UARTDCDINTR interrupt.On a write of 1, the + * mask of the UARTDCDINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t DSRMIM : 1; /*!< [3..3] nUARTDSR modem interrupt mask. A read returns the current + * mask for the UARTDSRINTR interrupt.On a write of 1, the + * mask of the UARTDSRINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t RXIM : 1; /*!< [4..4] Receive interrupt mask. A read returns the current mask + * for the UARTRXINTR interrupt.On a write of 1, the mask + * of the UARTRXINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t TXIM : 1; /*!< [5..5] Transmit interrupt mask. A read returns the current mask + * for the UARTTXINTR interrupt.On a write of 1, the mask + * of the UARTTXINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t RTIM : 1; /*!< [6..6] Receive timeout interrupt mask. A read returns the current + * mask for the UARTRTINTR interrupt.On a write of 1, the + * mask of the UARTRTINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t FEIM : 1; /*!< [7..7] Framing error interrupt mask. A read returns the current + * mask for the UARTFEINTR interrupt.On a write of 1, the + * mask of the UARTFEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t PEIM : 1; /*!< [8..8] Parity error interrupt mask. A read returns the current + * mask for the UARTPEINTR interrupt.On a write of 1, the + * mask of the UARTPEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t BEIM : 1; /*!< [9..9] Break error interrupt mask. A read returns the current + * mask for the UARTBEINTR interrupt.On a write of 1, the + * mask of the UARTBEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t OEIM : 1; /*!< [10..10] Overrun error interrupt mask. A read returns the current + * mask for the UARTOEINTR interrupt.On a write of 1, the + * mask of the UARTOEINTR interrupt is set. A write of 0 clears + * the mask. */ + uint32_t : 21; + } UART2_IMSC_REG_b; + }; + + union + { + __IOM uint32_t UART2_RIS_REG; /*!< (@ 0x0000003C) UART Raw Interrupt Status Register */ + + struct + { + __IM uint32_t RIRMIS : 1; /*!< [0..0] nUARTRI modem interrupt status. Returns the raw interrupt + * state of the UARTRIINTR interrupt. */ + __IM uint32_t CTSRMIS : 1; /*!< [1..1] nUARTCTS modem interrupt status. Returns the raw interrupt + * state of the UARTCTSINTR interrupt. */ + __IM uint32_t DCDRMIS : 1; /*!< [2..2] nUARTDCD modem interrupt status. Returns the raw interrupt + * state of the UARTDCDINTR interrupt. */ + __IM uint32_t DSRRMIS : 1; /*!< [3..3] nUARTDSR modem interrupt status. Returns the raw interrupt + * state of the UARTDSRINTR interrupt. */ + __IM uint32_t RXRIS : 1; /*!< [4..4] Receive interrupt status. Returns the raw interrupt state + * of the UARTRXINTR interrupt. */ + __IM uint32_t TXRIS : 1; /*!< [5..5] Transmit interrupt status. Returns the raw interrupt + * state of the UARTTXINTR interrupt. */ + __IM uint32_t RTRIS : 1; /*!< [6..6] Receive timeout interrupt status. Returns the raw interrupt + * state of the UARTRTINTR interrupt. */ + __IM uint32_t FERIS : 1; /*!< [7..7] Framing error interrupt status. Returns the raw interrupt + * state of the UARTFEINTR interrupt. */ + __IM uint32_t PERIS : 1; /*!< [8..8] Parity error interrupt status. Returns the raw interrupt + * state of the UARTPEINTR interrupt. */ + __IM uint32_t BERIS : 1; /*!< [9..9] Break error interrupt status. Returns the raw interrupt + * state of the UARTBEINTR interrupt. */ + __IM uint32_t OERIS : 1; /*!< [10..10] Overrun error interrupt status. Returns the raw interrupt + * state of the UARTOEINTR interrupt. */ + uint32_t : 21; + } UART2_RIS_REG_b; + }; + + union + { + __IOM uint32_t UART2_MIS_REG; /*!< (@ 0x00000040) UART Masked Interrupt Status Register */ + + struct + { + __IM uint32_t RIMMIS : 1; /*!< [0..0] nUARTRI modem masked interrupt status. Returns the masked + * interrupt state of the UARTRIINTR interrupt. */ + __IM uint32_t CTSMMIS : 1; /*!< [1..1] nUARTCTS modem masked interrupt status. Returns the masked + * interrupt state of the UARTCTSINTR interrupt. */ + __IM uint32_t DCDMMIS : 1; /*!< [2..2] nUARTDCD modem masked interrupt status. Returns the masked + * interrupt state of the UARTDCDINTR interrupt. */ + __IM uint32_t DSRMMIS : 1; /*!< [3..3] nUARTDSR modem masked interrupt status. Returns the masked + * interrupt state of the UARTDSRINTR interrupt. */ + __IM uint32_t RXMIS : 1; /*!< [4..4] Receive masked interrupt status. Returns the masked interrupt + * state of the UARTRXINTR interrupt. */ + __IM uint32_t TXMIS : 1; /*!< [5..5] Transmit masked interrupt status. Returns the masked + * interrupt state of the UARTTXINTR interrupt. */ + __IM uint32_t RTMIS : 1; /*!< [6..6] Receive timeout masked interrupt status. Returns the + * masked interrupt state of the UARTRTINTR interrupt. */ + __IM uint32_t FEMIS : 1; /*!< [7..7] Framing error masked interrupt status. Returns the masked + * interrupt state of the UARTFEINTR interrupt. */ + __IM uint32_t PEMIS : 1; /*!< [8..8] Parity error masked interrupt status. Returns the masked + * interrupt state of the UARTPEINTR interrupt. */ + __IM uint32_t BEMIS : 1; /*!< [9..9] Break error masked interrupt status. Returns the masked + * interrupt state of the UARTBEINTR interrupt. */ + __IM uint32_t OEMIS : 1; /*!< [10..10] Overrun error masked interrupt status. Returns the + * masked interrupt state of the UARTOEINTR interrupt. */ + uint32_t : 21; + } UART2_MIS_REG_b; + }; + + union + { + __IOM uint32_t UART2_ICR_REG; /*!< (@ 0x00000044) UART Interrupt Clear Register */ + + struct + { + __OM uint32_t RIMIC : 1; /*!< [0..0] nUARTRI modem interrupt clear. Clears the UARTRIINTR + * interrupt. */ + __OM uint32_t CTSMIC : 1; /*!< [1..1] nUARTCTS modem interrupt clear. Clears the UARTCTSINTR + * interrupt. */ + __OM uint32_t DCDMIC : 1; /*!< [2..2] nUARTDCD modem interrupt clear. Clears the UARTDCDINTR + * interrupt. */ + __OM uint32_t DSRMIC : 1; /*!< [3..3] nUARTDSR modem interrupt clear. Clears the UARTDSRINTR + * interrupt. */ + __OM uint32_t RXIC : 1; /*!< [4..4] Receive interrupt clear. Clears the UARTRXINTR interrupt. */ + __OM uint32_t TXIC : 1; /*!< [5..5] Transmit interrupt clear. Clears the UARTTXINTR interrupt. */ + __OM uint32_t RTIC : 1; /*!< [6..6] Receive timeout interrupt clear. Clears the UARTRTINTR + * interrupt. */ + __OM uint32_t FEIC : 1; /*!< [7..7] Framing error interrupt clear. Clears the UARTFEINTR + * interrupt. */ + __OM uint32_t PEIC : 1; /*!< [8..8] Parity error interrupt clear. Clears the UARTPEINTR interrupt. */ + __OM uint32_t BEIC : 1; /*!< [9..9] Break error interrupt clear. Clears the UARTBEINTR interrupt. */ + __OM uint32_t OEIC : 1; /*!< [10..10] Overrun error interrupt clear. Clears the UARTOEINTR + * interrupt. */ + uint32_t : 21; + } UART2_ICR_REG_b; + }; + + union + { + __IOM uint32_t UART2_DMACR_REG; /*!< (@ 0x00000048) UART DMA Control Register */ + + struct + { + __IOM uint32_t RXDMAE : 1; /*!< [0..0] Receive DMA enable. If this bit is set to 1, DMA for + * the receive FIFO is enabled. */ + __IOM uint32_t TXDMAE : 1; /*!< [1..1] Transmit DMA enable. If this bit is set to 1, DMA for + * the transmit FIFO is enabled. */ + __IOM uint32_t DMAONERR : 1; /*!< [2..2] DMA on error. If this bit is set to 1, the DMA receive + * request outputs, UARTRXDMASREQ or UARTRXDMABREQ, are disabled + * when the UART error interrupt is asserted */ + uint32_t : 29; + } UART2_DMACR_REG_b; + }; + + union + { + __IOM uint32_t UART2_WA_REG; /*!< (@ 0x0000004C) UART Word Access Enable Register */ + + struct + { + __IOM uint32_t WAE : 1; /*!< [0..0] DMA word access enable bit. If this bit is set to 1, + * DMA word access mode is enabled. */ + uint32_t : 31; + } UART2_WA_REG_b; + }; + + union + { + __IOM uint32_t UART2_SWFC_REG; /*!< (@ 0x00000050) UART Software Flow Control Enable Register */ + + struct + { + __IOM uint32_t SWFCE : 1; /*!< [0..0] DMA software flow control enable bit. If this bit is + * set to 1, DMA software flow control mode is enabled. */ + uint32_t : 31; + } UART2_SWFC_REG_b; + }; + + union + { + __IOM uint32_t UART2_RS485EN_REG; /*!< (@ 0x00000054) UART RS485 Mode Enable Register */ + + struct + { + __IOM uint32_t RS485E : 1; /*!< [0..0] DMA RS485 mode enable bit. If this bit is set to 1, DMA + * RS485 mode is enabled. */ + uint32_t : 31; + } UART2_RS485EN_REG_b; + }; +} UART2_Type; /*!< Size = 88 (0x58) */ + +/* =========================================================================================================================== */ +/* ================ UART3 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief UART3 registers (UART3) + */ + +typedef struct /*!< (@ 0x40002000) UART3 Structure */ +{ + union + { + __IOM uint32_t UART3_DR_REG; /*!< (@ 0x00000000) UART Data Register */ + + struct + { + __IOM uint32_t DR_DATA : 8; /*!< [7..0] Receive (read) data charaterTransmit (write) data character */ + __IOM uint32_t DR_FE : 1; /*!< [8..8] Framing error. When set to 1, it indicates that the received + * character did not have a valid stop bit (a valid stop bit + * is 1).In FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t DR_PE : 1; /*!< [9..9] Parity error. When set to 1, it indicates that the parity + * of the received data character does not match the parity + * that the EPS and SPS bits in the Line Control Register, + * UARTLCR_H.In FIFO mode, this error is associated with the + * character at the top of the FIFO. */ + __IOM uint32_t DR_BE : 1; /*!< [10..10] Break error. This bit is set to 1 if a break condition + * was detected, indicating that the received data input was + * held LOW for longer than a full-word transmission time + * (defined as start, data, parity and stop bits).In FIFO + * mode, this error is associated with the character at the + * top of the FIFO. When a break occurs, only one 0 character + * is loaded into the FIFO. The next character is only enabled + * after the receive data input goes to a 1 (marking state), + * and the next valid start bit is received. */ + __IOM uint32_t DR_OE : 1; /*!< [11..11] Overrun error. This bit is set to 1 if data is received + * and the receive FIFO is already full.This is cleared to + * 0 once there is an empty space in the FIFO and a new character + * can be written to it. */ + uint32_t : 20; + } UART3_DR_REG_b; + }; + + union + { + __IOM uint32_t UART3_RSR_REG; /*!< (@ 0x00000004) UART Receive Status (Read), Error Clear (Write) + * Register */ + + struct + { + __IOM uint32_t RSR_FE : 1; /*!< [0..0] Framing error. When set to 1, it indicates that the received + * character did not have a valid stop bit (a valid stop bit + * is 1).This bit is cleared to 0 by a write to the register.In + * FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t RSR_PE : 1; /*!< [1..1] Parity error. When set to 1, it indicates that the parity + * of the received data character does not match the parity + * that the EPS and SPS bits in the Line Control Register, + * UARTLCR_H.This bit is cleared to 0 by a write to the register.In + * FIFO mode, this error is associated with the character + * at the top of the FIFO. */ + __IOM uint32_t RSR_BE : 1; /*!< [2..2] Break error. This bit is set to 1 if a break condition + * was detected, indicating that the received data input was + * held LOW for longer than a full-word transmission time + * (defined as start, data, parity, and stop bits).This bit + * is cleared to 0 after a write to the register.In FIFO mode, + * this error is associated with the character at the top + * of the FIFO. When a break occurs, only one 0 character + * is loaded into the FIFO. The next character is only enabled + * after the receive data input goes to a 1 (mark */ + __IOM uint32_t RSR_OE : 1; /*!< [3..3] Overrun error. This bit is set to 1 if data is received + * and the FIFO is already full.This bit is cleared to 0 by + * a write to the register.The FIFO contents remain valid + * because no more data is written when the FIFO is full, + * only the contents of the shift register are overwritten. + * The CPU must now read the data, to empty the FIFO. */ + uint32_t : 28; + } UART3_RSR_REG_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t UART3_FR_REG; /*!< (@ 0x00000018) UART Flag Register */ + + struct + { + __IM uint32_t CTS : 1; /*!< [0..0] Clear to send. This bit is the complement of the UART + * clear to send, nUARTCTS, modem status input.That is, the + * bit is 1 when nUARTCTS is LOW. */ + __IM uint32_t DSR : 1; /*!< [1..1] Data set ready. This bit is the complement of the UART + * data set ready, nUARTDSR, modem status input.That is, the + * bit is 1 when nUARTDSR is LOW. */ + __IM uint32_t DCD : 1; /*!< [2..2] Data carrier detect. This bit is the complement of the + * UART data carrier detect, nUARTDCD, modem status input.That + * is, the bit is 1 when nUARTDCD is LOW. */ + __IM uint32_t BUSY : 1; /*!< [3..3] UART busy. If this bit is set to 1, the UART is busy + * transmitting data. This bit remains set until the complete + * byte, including all the stop bits, has been sent from the + * shift register.This bit is set as soon as the transmit + * FIFO becomes non-empty, regardless of whether the UART + * is enabled or not. */ + __IM uint32_t RXFE : 1; /*!< [4..4] Receive FIFO empty. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the receive holding + * register is empty.If the FIFO is enabled, the RXFE bit + * is set when the receive FIFO is empty. */ + __IM uint32_t TXFF : 1; /*!< [5..5] Transmit FIFO full. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the transmit holding + * register is full.If the FIFO is enabled, the TXFF bit is + * set when the transmit FIFO is full. */ + __IM uint32_t RXFF : 1; /*!< [6..6] Receive FIFO full. The meaning of this bit depends on + * the state of the FEN bit in the UARTLCR_H Register.If the + * FIFO is disabled, this bit is set when the receive holding + * register is full.If the FIFO is enabled, the RXFF bit is + * set when the receive FIFO is full. */ + __IM uint32_t TXFE : 1; /*!< [7..7] Transmit FIFO empty. The meaning of this bit depends + * on the state of the FEN bit in the Line Control Register, + * UARTLCR_HIf the FIFO is disabled, this bit is set when + * the transmit holding register is empty.If the FIFO is enabled, + * the TXFE bit is set when the transmit FIFO is empty.This + * bit does not indicate if there is data in the transmit + * shift register. */ + __IM uint32_t RI : 1; /*!< [8..8] Ring indicator. This bit is the complement of the UART + * ring indicator, nUARTRI, modem status input.That is, the + * bit is 1 when nUARTRI is LOW. */ + uint32_t : 23; + } UART3_FR_REG_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t UART3_IBRD_REG; /*!< (@ 0x00000024) UART Integer Baud Rate Divisor Register */ + + struct + { + __IOM uint32_t BAUD_DIVINT : 16; /*!< [15..0] The integer baud rate divisor.These bits are cleared + * to 0 on reset. */ + uint32_t : 16; + } UART3_IBRD_REG_b; + }; + + union + { + __IOM uint32_t UART3_FBRD_REG; /*!< (@ 0x00000028) UART Fractional Baud Rate Divisor Register */ + + struct + { + __IOM uint32_t BAUD_DIVFRAC : 6; /*!< [5..0] The fractional baud rate divisor.These bits are cleared + * to 0 on reset. */ + uint32_t : 26; + } UART3_FBRD_REG_b; + }; + + union + { + __IOM uint32_t UART3_LCR_H_REG; /*!< (@ 0x0000002C) UART Line Control Register (High Byte) */ + + struct + { + __IOM uint32_t BRK : 1; /*!< [0..0] Send break. If this bit is set to 1, a low-level is continually + * output on the UARTTXD output, after completing transmission + * of the current character. For the proper execution of the + * break command, the software must set this bit for at least + * two complete frames.For normal use, this bit must be cleared + * to 0. */ + __IOM uint32_t PEN : 1; /*!< [1..1] Parity enable:0 = parity is disabled and no parity bit + * added to the data frame1 = parity checking and generation + * is enabled. */ + __IOM uint32_t EPS : 1; /*!< [2..2] Even parity select. Controls the type of parity the UART + * uses during transmission and reception:0 = odd parity. + * The UART generates or checks for an odd number of 1s in + * the data and parity bits.1 = even parity. The UART generates + * or checks for an even number of 1s in the data and parity + * bits.This bit has no effect when the PEN bit disables parity + * checking and generation. */ + __IOM uint32_t STP2 : 1; /*!< [3..3] Two stop bits select. If this bit is set to 1, two stop + * bits are transmitted at the end of the frame. The receive + * logic does not check for two stop bits being received. */ + __IOM uint32_t FEN : 1; /*!< [4..4] Enable FIFOs:0 = FIFOs are disabled (character mode) + * that is, the FIFOs become 1-byte-deep holding registers1 + * = transmit and receive FIFO buffers are enabled (FIFO mode). */ + __IOM uint32_t WLEN : 2; /*!< [6..5] Word length. These bits indicate the number of data bits + * transmitted or received in a frame as follows:b11 = 8 bitsb10 + * = 7 bitsb01 = 6 bitsb00 = 5 bits. */ + __IOM uint32_t SPS : 1; /*!< [7..7] Stick parity select.0 = stick parity is disabled1 = either:? + * if the EPS bit is 0 then the parity bit is transmitted + * and checked as a 1? if the EPS bit is 1 then the parity + * bit is transmitted and checked as a 0.This bit has no effect + * when the PEN bit disables parity checking and generation. */ + uint32_t : 24; + } UART3_LCR_H_REG_b; + }; + + union + { + __IOM uint32_t UART3_CR_REG; /*!< (@ 0x00000030) UART Control Register */ + + struct + { + __IOM uint32_t UARTEN : 1; /*!< [0..0] UART enable:0 = UART is disabled. If the UART is disabled + * in the middle of transmission or reception, it completes + * the current character before stopping.1 = the UART is enabled. + * Data transmission and reception occurs. */ + uint32_t : 6; + __IOM uint32_t LBE : 1; /*!< [7..7] Loopback enable. If this bit is set to 1, the UARTTXD + * path is fed through to the UARTRXD path.When this bit is + * set, the modem outputs are also fed through to the modem + * inputs.This bit is cleared to 0 on reset, to disable loopback. */ + __IOM uint32_t TXE : 1; /*!< [8..8] Transmit enable. If this bit is set to 1, the transmit + * section of the UART is enabled. */ + __IOM uint32_t RXE : 1; /*!< [9..9] Receive enable. If this bit is set to 1, the receive + * section of the UART is enabled. */ + __IOM uint32_t DTR : 1; /*!< [10..10] Data transmit ready. This bit is the complement of + * the UART data transmit ready, nUARTDTR, modem status output. + * That is, when the bit is programmed to a 1 then nUARTDTR + * is LOW */ + __IOM uint32_t RTS : 1; /*!< [11..11] Request to send. This bit is the complement of the + * UART request to send, nUARTRTS, modem status output. That + * is, when the bit is programmed to a 1 then nUARTRTS is + * LOW */ + __IOM uint32_t Out1 : 1; /*!< [12..12] This bit is the complement of the UART Out1 (nUARTOut1) + * modem status output. That is, when the bit is programmed + * to a 1 the output is 0. For DTE this can be used as Data + * Carrier Detect (DCD). */ + __IOM uint32_t Out2 : 1; /*!< [13..13] This bit is the complement of the UART Out2 (nUARTOut2) + * modem status output. That is, when the bit is programmed + * to a 1, the output is 0. For DTE this can be used as Ring + * Indicator (RI). */ + __IOM uint32_t RTSEn : 1; /*!< [14..14] RTS hardware flow control enable. If this bit is set + * to 1, RTS hardware flow control is enabled.Data is only + * requested when there is space in the receive FIFO for it + * to be received. */ + __IOM uint32_t CTSEn : 1; /*!< [15..15] CTS hardware flow control enable. If this bit is set + * to 1, CTS hardware flow control is enabled.Data is only + * transmitted when the nUARTCTS signal is asserted. */ + uint32_t : 16; + } UART3_CR_REG_b; + }; + + union + { + __IOM uint32_t UART3_IFLS_REG; /*!< (@ 0x00000034) UART Interrupt FIFO Level Select Register */ + + struct + { + __IOM uint32_t TXIFLSEL : 3; /*!< [2..0] Transmit interrupt FIFO level select. The trigger points + * for the transmit interrupt are as follows:b000 = Transmit + * FIFO becomes 1/8 fullb001 = Transmit FIFO becomes 1/4 fullb010 + * = Transmit FIFO becomes 1/2 fullb011 = Transmit FIFO becomes + * 3/4 fullb100 = Transmit FIFO becomes 7/8 fullb101-b111 + * = Reserved. */ + __IOM uint32_t RXIFLSEL : 3; /*!< [5..3] Receive interrupt FIFO level select. The trigger points + * for the receive interrupt are as follows:b000 = Receive + * FIFO becomes 1/8 fullb001 = Receive FIFO becomes 1/4 fullb010 + * = Receive FIFO becomes 1/2 fullb011 = Receive FIFO becomes + * 3/4 fullb100 = Receive FIFO becomes 7/8 fullb101-b111 = + * Reserved. */ + uint32_t : 26; + } UART3_IFLS_REG_b; + }; + + union + { + __IOM uint32_t UART3_IMSC_REG; /*!< (@ 0x00000038) UART Interrupt Mask Set/Clear Register */ + + struct + { + __IOM uint32_t RIMIM : 1; /*!< [0..0] nUARTRI modem interrupt mask. A read returns the current + * mask for the UARTRIINTR interrupt.On a write of 1, the + * mask of the UARTRIINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t CTSMIM : 1; /*!< [1..1] nUARTCTS modem interrupt mask. A read returns the current + * mask for the UARTCTSINTR interrupt.On a write of 1, the + * mask of the UARTCTSINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t DCDMIM : 1; /*!< [2..2] nUARTDCD modem interrupt mask. A read returns the current + * mask for the UARTDCDINTR interrupt.On a write of 1, the + * mask of the UARTDCDINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t DSRMIM : 1; /*!< [3..3] nUARTDSR modem interrupt mask. A read returns the current + * mask for the UARTDSRINTR interrupt.On a write of 1, the + * mask of the UARTDSRINTR interrupt is set. A write of 0 + * clears the mask. */ + __IOM uint32_t RXIM : 1; /*!< [4..4] Receive interrupt mask. A read returns the current mask + * for the UARTRXINTR interrupt.On a write of 1, the mask + * of the UARTRXINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t TXIM : 1; /*!< [5..5] Transmit interrupt mask. A read returns the current mask + * for the UARTTXINTR interrupt.On a write of 1, the mask + * of the UARTTXINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t RTIM : 1; /*!< [6..6] Receive timeout interrupt mask. A read returns the current + * mask for the UARTRTINTR interrupt.On a write of 1, the + * mask of the UARTRTINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t FEIM : 1; /*!< [7..7] Framing error interrupt mask. A read returns the current + * mask for the UARTFEINTR interrupt.On a write of 1, the + * mask of the UARTFEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t PEIM : 1; /*!< [8..8] Parity error interrupt mask. A read returns the current + * mask for the UARTPEINTR interrupt.On a write of 1, the + * mask of the UARTPEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t BEIM : 1; /*!< [9..9] Break error interrupt mask. A read returns the current + * mask for the UARTBEINTR interrupt.On a write of 1, the + * mask of the UARTBEINTR interrupt is set. A write of 0 clears + * the mask. */ + __IOM uint32_t OEIM : 1; /*!< [10..10] Overrun error interrupt mask. A read returns the current + * mask for the UARTOEINTR interrupt.On a write of 1, the + * mask of the UARTOEINTR interrupt is set. A write of 0 clears + * the mask. */ + uint32_t : 21; + } UART3_IMSC_REG_b; + }; + + union + { + __IOM uint32_t UART3_RIS_REG; /*!< (@ 0x0000003C) UART Raw Interrupt Status Register */ + + struct + { + __IM uint32_t RIRMIS : 1; /*!< [0..0] nUARTRI modem interrupt status. Returns the raw interrupt + * state of the UARTRIINTR interrupt. */ + __IM uint32_t CTSRMIS : 1; /*!< [1..1] nUARTCTS modem interrupt status. Returns the raw interrupt + * state of the UARTCTSINTR interrupt. */ + __IM uint32_t DCDRMIS : 1; /*!< [2..2] nUARTDCD modem interrupt status. Returns the raw interrupt + * state of the UARTDCDINTR interrupt. */ + __IM uint32_t DSRRMIS : 1; /*!< [3..3] nUARTDSR modem interrupt status. Returns the raw interrupt + * state of the UARTDSRINTR interrupt. */ + __IM uint32_t RXRIS : 1; /*!< [4..4] Receive interrupt status. Returns the raw interrupt state + * of the UARTRXINTR interrupt. */ + __IM uint32_t TXRIS : 1; /*!< [5..5] Transmit interrupt status. Returns the raw interrupt + * state of the UARTTXINTR interrupt. */ + __IM uint32_t RTRIS : 1; /*!< [6..6] Receive timeout interrupt status. Returns the raw interrupt + * state of the UARTRTINTR interrupt. */ + __IM uint32_t FERIS : 1; /*!< [7..7] Framing error interrupt status. Returns the raw interrupt + * state of the UARTFEINTR interrupt. */ + __IM uint32_t PERIS : 1; /*!< [8..8] Parity error interrupt status. Returns the raw interrupt + * state of the UARTPEINTR interrupt. */ + __IM uint32_t BERIS : 1; /*!< [9..9] Break error interrupt status. Returns the raw interrupt + * state of the UARTBEINTR interrupt. */ + __IM uint32_t OERIS : 1; /*!< [10..10] Overrun error interrupt status. Returns the raw interrupt + * state of the UARTOEINTR interrupt. */ + uint32_t : 21; + } UART3_RIS_REG_b; + }; + + union + { + __IOM uint32_t UART3_MIS_REG; /*!< (@ 0x00000040) UART Masked Interrupt Status Register */ + + struct + { + __IM uint32_t RIMMIS : 1; /*!< [0..0] nUARTRI modem masked interrupt status. Returns the masked + * interrupt state of the UARTRIINTR interrupt. */ + __IM uint32_t CTSMMIS : 1; /*!< [1..1] nUARTCTS modem masked interrupt status. Returns the masked + * interrupt state of the UARTCTSINTR interrupt. */ + __IM uint32_t DCDMMIS : 1; /*!< [2..2] nUARTDCD modem masked interrupt status. Returns the masked + * interrupt state of the UARTDCDINTR interrupt. */ + __IM uint32_t DSRMMIS : 1; /*!< [3..3] nUARTDSR modem masked interrupt status. Returns the masked + * interrupt state of the UARTDSRINTR interrupt. */ + __IM uint32_t RXMIS : 1; /*!< [4..4] Receive masked interrupt status. Returns the masked interrupt + * state of the UARTRXINTR interrupt. */ + __IM uint32_t TXMIS : 1; /*!< [5..5] Transmit masked interrupt status. Returns the masked + * interrupt state of the UARTTXINTR interrupt. */ + __IM uint32_t RTMIS : 1; /*!< [6..6] Receive timeout masked interrupt status. Returns the + * masked interrupt state of the UARTRTINTR interrupt. */ + __IM uint32_t FEMIS : 1; /*!< [7..7] Framing error masked interrupt status. Returns the masked + * interrupt state of the UARTFEINTR interrupt. */ + __IM uint32_t PEMIS : 1; /*!< [8..8] Parity error masked interrupt status. Returns the masked + * interrupt state of the UARTPEINTR interrupt. */ + __IM uint32_t BEMIS : 1; /*!< [9..9] Break error masked interrupt status. Returns the masked + * interrupt state of the UARTBEINTR interrupt. */ + __IM uint32_t OEMIS : 1; /*!< [10..10] Overrun error masked interrupt status. Returns the + * masked interrupt state of the UARTOEINTR interrupt. */ + uint32_t : 21; + } UART3_MIS_REG_b; + }; + + union + { + __IOM uint32_t UART3_ICR_REG; /*!< (@ 0x00000044) UART Interrupt Clear Register */ + + struct + { + __OM uint32_t RIMIC : 1; /*!< [0..0] nUARTRI modem interrupt clear. Clears the UARTRIINTR + * interrupt. */ + __OM uint32_t CTSMIC : 1; /*!< [1..1] nUARTCTS modem interrupt clear. Clears the UARTCTSINTR + * interrupt. */ + __OM uint32_t DCDMIC : 1; /*!< [2..2] nUARTDCD modem interrupt clear. Clears the UARTDCDINTR + * interrupt. */ + __OM uint32_t DSRMIC : 1; /*!< [3..3] nUARTDSR modem interrupt clear. Clears the UARTDSRINTR + * interrupt. */ + __OM uint32_t RXIC : 1; /*!< [4..4] Receive interrupt clear. Clears the UARTRXINTR interrupt. */ + __OM uint32_t TXIC : 1; /*!< [5..5] Transmit interrupt clear. Clears the UARTTXINTR interrupt. */ + __OM uint32_t RTIC : 1; /*!< [6..6] Receive timeout interrupt clear. Clears the UARTRTINTR + * interrupt. */ + __OM uint32_t FEIC : 1; /*!< [7..7] Framing error interrupt clear. Clears the UARTFEINTR + * interrupt. */ + __OM uint32_t PEIC : 1; /*!< [8..8] Parity error interrupt clear. Clears the UARTPEINTR interrupt. */ + __OM uint32_t BEIC : 1; /*!< [9..9] Break error interrupt clear. Clears the UARTBEINTR interrupt. */ + __OM uint32_t OEIC : 1; /*!< [10..10] Overrun error interrupt clear. Clears the UARTOEINTR + * interrupt. */ + uint32_t : 21; + } UART3_ICR_REG_b; + }; + + union + { + __IOM uint32_t UART3_DMACR_REG; /*!< (@ 0x00000048) UART DMA Control Register */ + + struct + { + __IOM uint32_t RXDMAE : 1; /*!< [0..0] Receive DMA enable. If this bit is set to 1, DMA for + * the receive FIFO is enabled. */ + __IOM uint32_t TXDMAE : 1; /*!< [1..1] Transmit DMA enable. If this bit is set to 1, DMA for + * the transmit FIFO is enabled. */ + __IOM uint32_t DMAONERR : 1; /*!< [2..2] DMA on error. If this bit is set to 1, the DMA receive + * request outputs, UARTRXDMASREQ or UARTRXDMABREQ, are disabled + * when the UART error interrupt is asserted */ + uint32_t : 29; + } UART3_DMACR_REG_b; + }; + + union + { + __IOM uint32_t UART3_WA_REG; /*!< (@ 0x0000004C) UART Word Access Enable Register */ + + struct + { + __IOM uint32_t WAE : 1; /*!< [0..0] DMA word access enable bit. If this bit is set to 1, + * DMA word access mode is enabled. */ + uint32_t : 31; + } UART3_WA_REG_b; + }; + + union + { + __IOM uint32_t UART3_SWFC_REG; /*!< (@ 0x00000050) UART Software Flow Control Enable Register */ + + struct + { + __IOM uint32_t SWFCE : 1; /*!< [0..0] DMA software flow control enable bit. If this bit is + * set to 1, DMA software flow control mode is enabled. */ + uint32_t : 31; + } UART3_SWFC_REG_b; + }; + + union + { + __IOM uint32_t UART3_RS485EN_REG; /*!< (@ 0x00000054) UART RS485 Mode Enable Register */ + + struct + { + __IOM uint32_t RS485E : 1; /*!< [0..0] DMA RS485 mode enable bit. If this bit is set to 1, DMA + * RS485 mode is enabled. */ + uint32_t : 31; + } UART3_RS485EN_REG_b; + }; +} UART3_Type; /*!< Size = 88 (0x58) */ + +/** @} */ /* End of group Device_Peripheral_peripherals */ + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Address Map ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_peripheralAddr + * @{ + */ + + #define APU_AUD_BASE 0x400E0400UL + #define APU_DSP_BASE 0x400E0800UL + #define AUXADC_BASE 0x40090500UL + #define CACHE_BASE 0x0E010000UL + #define CC312_BASE 0x400F0000UL + #define CHIP_VERSION_BASE 0x40070200UL + #define CLKCAL_BIF_BASE 0x40090600UL + #define CRG_APU_BASE 0x400E0000UL + #define CRG_COM_BASE 0x400C0200UL + #define CRG_PER_BASE 0x40090400UL + #define CRG_SYS_BASE 0x40070500UL + #define CRG_TOP_BASE 0x400C0000UL + #define DAI_BASE 0x400E0900UL + #define DCACHE_BASE 0x21000000UL + #define DMA_BASE 0x40070700UL + #define FPLL_BASE 0x400C0300UL + #define GPIO_BASE 0x400B0000UL + #define GPREG_BASE 0x40070300UL + #define HW_ACC_BASE 0x40032000UL + #define I2C_BASE 0x40090000UL + #define I2C2_BASE 0x40090100UL + #define KDMA_BASE 0x40070A00UL + #define MEMCTRL_BASE 0x400B0800UL + #define OQSPIF_BASE 0x29000000UL + #define OTPC_BASE 0x400F3000UL + #define PSK_BASE 0x40031000UL + #define QSPIC_BASE 0x22000000UL + #define RETMEMCTRL_BASE 0x400B0900UL + #define RFMON_BASE 0x40070600UL + #define RTC_BASE 0x40038000UL + #define SDEMMC_BASE 0x40011000UL + #define SDIO_BASE 0x40010000UL + #define SPI_BASE 0x40090200UL + #define SPI2_BASE 0x40090300UL + #define SRC_FIFO_IF_BASE 0x40003000UL + #define SRC_IF_BASE 0x400E0C00UL + #define SYS_WDOG_BASE 0x400C0700UL + #define SYSBUS_BASE 0x2F000000UL + #define SYSBUS_ICM_BASE 0x40070400UL + #define TDES_BASE 0x40030000UL + #define TIMER_BASE 0x40080000UL + #define TIMER2_BASE 0x40080100UL + #define TIMER3_BASE 0x40080200UL + #define TIMER4_BASE 0x40080300UL + #define TIMER5_BASE 0x40080400UL + #define TIMER6_BASE 0x40080500UL + #define TIMER7_BASE 0x40080600UL + #define TIMER8_BASE 0x40080700UL + #define UART_BASE 0x40000000UL + #define UART2_BASE 0x40001000UL + #define UART3_BASE 0x40002000UL + +/** @} */ /* End of group Device_Peripheral_peripheralAddr */ + +/* =========================================================================================================================== */ +/* ================ Peripheral declaration ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_declaration + * @{ + */ + + #define APU_AUD ((APU_AUD_Type *) APU_AUD_BASE) + #define APU_DSP ((APU_DSP_Type *) APU_DSP_BASE) + #define AUXADC ((AUXADC_Type *) AUXADC_BASE) + #define CACHE ((CACHE_Type *) CACHE_BASE) + #define CC312 ((CC312_Type *) CC312_BASE) + #define CHIP_VERSION ((CHIP_VERSION_Type *) CHIP_VERSION_BASE) + #define CLKCAL_BIF ((CLKCAL_BIF_Type *) CLKCAL_BIF_BASE) + #define CRG_APU ((CRG_APU_Type *) CRG_APU_BASE) + #define CRG_COM ((CRG_COM_Type *) CRG_COM_BASE) + #define CRG_PER ((CRG_PER_Type *) CRG_PER_BASE) + #define CRG_SYS ((CRG_SYS_Type *) CRG_SYS_BASE) + #define CRG_TOP ((CRG_TOP_Type *) CRG_TOP_BASE) + #define DAI ((DAI_Type *) DAI_BASE) + #define DCACHE ((DCACHE_Type *) DCACHE_BASE) + #define DMA ((DMA_Type *) DMA_BASE) + #define FPLL ((FPLL_Type *) FPLL_BASE) + #define GPIO ((GPIO_Type *) GPIO_BASE) + #define GPREG ((GPREG_Type *) GPREG_BASE) + #define HW_ACC ((HW_ACC_Type *) HW_ACC_BASE) + #define I2C ((I2C_Type *) I2C_BASE) + #define I2C2 ((I2C2_Type *) I2C2_BASE) + #define KDMA ((KDMA_Type *) KDMA_BASE) + #define MEMCTRL ((MEMCTRL_Type *) MEMCTRL_BASE) + #define OQSPIF ((OQSPIF_Type *) OQSPIF_BASE) + #define OTPC ((OTPC_Type *) OTPC_BASE) + #define PSK ((PSK_Type *) PSK_BASE) + #define QSPIC ((QSPIC_Type *) QSPIC_BASE) + #define RETMEMCTRL ((RETMEMCTRL_Type *) RETMEMCTRL_BASE) + #define RFMON ((RFMON_Type *) RFMON_BASE) + #define RTC ((RTC_Type *) RTC_BASE) + #define SDEMMC ((SDEMMC_Type *) SDEMMC_BASE) + #define SDIO ((SDIO_Type *) SDIO_BASE) + #define SPI ((SPI_Type *) SPI_BASE) + #define SPI2 ((SPI2_Type *) SPI2_BASE) + #define SRC_FIFO_IF ((SRC_FIFO_IF_Type *) SRC_FIFO_IF_BASE) + #define SRC_IF ((SRC_IF_Type *) SRC_IF_BASE) + #define SYS_WDOG ((SYS_WDOG_Type *) SYS_WDOG_BASE) + #define SYSBUS ((SYSBUS_Type *) SYSBUS_BASE) + #define SYSBUS_ICM ((SYSBUS_ICM_Type *) SYSBUS_ICM_BASE) + #define TDES ((TDES_Type *) TDES_BASE) + #define TIMER ((TIMER_Type *) TIMER_BASE) + #define TIMER2 ((TIMER2_Type *) TIMER2_BASE) + #define TIMER3 ((TIMER3_Type *) TIMER3_BASE) + #define TIMER4 ((TIMER4_Type *) TIMER4_BASE) + #define TIMER5 ((TIMER5_Type *) TIMER5_BASE) + #define TIMER6 ((TIMER6_Type *) TIMER6_BASE) + #define TIMER7 ((TIMER7_Type *) TIMER7_BASE) + #define TIMER8 ((TIMER8_Type *) TIMER8_BASE) + #define UART ((UART_Type *) UART_BASE) + #define UART2 ((UART2_Type *) UART2_BASE) + #define UART3 ((UART3_Type *) UART3_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 Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup PosMask_peripherals + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ APU_AUD ================ */ +/* =========================================================================================================================== */ + +/* =================================================== APU_DMIC_CTRL_REG =================================================== */ + #define APU_AUD_APU_DMIC_CTRL_REG_DMIC1_IN_DELAY_Pos (16UL) /*!< DMIC1_IN_DELAY (Bit 16) */ + #define APU_AUD_APU_DMIC_CTRL_REG_DMIC1_IN_DELAY_Msk (0x30000UL) /*!< DMIC1_IN_DELAY (Bitfield-Mask: 0x03) */ + #define APU_AUD_APU_DMIC_CTRL_REG_DMIC_MASTER_MODE_Pos (0UL) /*!< DMIC_MASTER_MODE (Bit 0) */ + #define APU_AUD_APU_DMIC_CTRL_REG_DMIC_MASTER_MODE_Msk (0x1UL) /*!< DMIC_MASTER_MODE (Bitfield-Mask: 0x01) */ +/* =================================================== APU_DMIC_DIV_REG ==================================================== */ + #define APU_AUD_APU_DMIC_DIV_REG_DMIC1_PHASE_Pos (16UL) /*!< DMIC1_PHASE (Bit 16) */ + #define APU_AUD_APU_DMIC_DIV_REG_DMIC1_PHASE_Msk (0x1f0000UL) /*!< DMIC1_PHASE (Bitfield-Mask: 0x1f) */ + #define APU_AUD_APU_DMIC_DIV_REG_DMIC_DIV_Pos (8UL) /*!< DMIC_DIV (Bit 8) */ + #define APU_AUD_APU_DMIC_DIV_REG_DMIC_DIV_Msk (0x1f00UL) /*!< DMIC_DIV (Bitfield-Mask: 0x1f) */ + #define APU_AUD_APU_DMIC_DIV_REG_DMIC1_CLK_EN_Pos (0UL) /*!< DMIC1_CLK_EN (Bit 0) */ + #define APU_AUD_APU_DMIC_DIV_REG_DMIC1_CLK_EN_Msk (0x1UL) /*!< DMIC1_CLK_EN (Bitfield-Mask: 0x01) */ +/* =================================================== APU_MAIN_DIV_REG ==================================================== */ + #define APU_AUD_APU_MAIN_DIV_REG_APU_MAIN_DIV_EN_Pos (12UL) /*!< APU_MAIN_DIV_EN (Bit 12) */ + #define APU_AUD_APU_MAIN_DIV_REG_APU_MAIN_DIV_EN_Msk (0x1000UL) /*!< APU_MAIN_DIV_EN (Bitfield-Mask: 0x01) */ + #define APU_AUD_APU_MAIN_DIV_REG_APU_MAIN_DIV_Pos (0UL) /*!< APU_MAIN_DIV (Bit 0) */ + #define APU_AUD_APU_MAIN_DIV_REG_APU_MAIN_DIV_Msk (0xfffUL) /*!< APU_MAIN_DIV (Bitfield-Mask: 0xfff) */ +/* =================================================== APU_SYNC_DIV_REG ==================================================== */ + #define APU_AUD_APU_SYNC_DIV_REG_APU_SYNC_DIV_EN_Pos (8UL) /*!< APU_SYNC_DIV_EN (Bit 8) */ + #define APU_AUD_APU_SYNC_DIV_REG_APU_SYNC_DIV_EN_Msk (0x100UL) /*!< APU_SYNC_DIV_EN (Bitfield-Mask: 0x01) */ + #define APU_AUD_APU_SYNC_DIV_REG_APU_SYNC_DIV_Pos (0UL) /*!< APU_SYNC_DIV (Bit 0) */ + #define APU_AUD_APU_SYNC_DIV_REG_APU_SYNC_DIV_Msk (0x1fUL) /*!< APU_SYNC_DIV (Bitfield-Mask: 0x1f) */ +/* ================================================= APU_SYNC_DIV_SEL_REG ================================================== */ + #define APU_AUD_APU_SYNC_DIV_SEL_REG_APU_SYNC_DIV_SEL_Pos (0UL) /*!< APU_SYNC_DIV_SEL (Bit 0) */ + #define APU_AUD_APU_SYNC_DIV_SEL_REG_APU_SYNC_DIV_SEL_Msk (0x3UL) /*!< APU_SYNC_DIV_SEL (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ APU_DSP ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== APU_CTRL_REG ====================================================== */ + #define APU_DSP_APU_CTRL_REG_DAI1_EN_Pos (0UL) /*!< DAI1_EN (Bit 0) */ + #define APU_DSP_APU_CTRL_REG_DAI1_EN_Msk (0x1UL) /*!< DAI1_EN (Bitfield-Mask: 0x01) */ +/* =================================================== APU_MUX_CTRL_REG ==================================================== */ + #define APU_DSP_APU_MUX_CTRL_REG_APU_DSP_MUX_CTL_Pos (24UL) /*!< APU_DSP_MUX_CTL (Bit 24) */ + #define APU_DSP_APU_MUX_CTRL_REG_APU_DSP_MUX_CTL_Msk (0xff000000UL) /*!< APU_DSP_MUX_CTL (Bitfield-Mask: 0xff) */ +/* =================================================== APU_PCM1_DIV_REG ==================================================== */ + #define APU_DSP_APU_PCM1_DIV_REG_PCM1_DIV_Pos (0UL) /*!< PCM1_DIV (Bit 0) */ + #define APU_DSP_APU_PCM1_DIV_REG_PCM1_DIV_Msk (0x7fUL) /*!< PCM1_DIV (Bitfield-Mask: 0x7f) */ +/* ================================================ APU_PCM1_FDIV_HIGH_REG ================================================= */ + #define APU_DSP_APU_PCM1_FDIV_HIGH_REG_PCM1_FDIV_HIGH_Pos (0UL) /*!< PCM1_FDIV_HIGH (Bit 0) */ + #define APU_DSP_APU_PCM1_FDIV_HIGH_REG_PCM1_FDIV_HIGH_Msk (0xffffUL) /*!< PCM1_FDIV_HIGH (Bitfield-Mask: 0xffff) */ +/* =================================================== APU_PCM1_FDIV_REG =================================================== */ + #define APU_DSP_APU_PCM1_FDIV_REG_PCM1_FDIV_Pos (0UL) /*!< PCM1_FDIV (Bit 0) */ + #define APU_DSP_APU_PCM1_FDIV_REG_PCM1_FDIV_Msk (0xffffffffUL) /*!< PCM1_FDIV (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== APU_PCM_CLK_REG ==================================================== */ + #define APU_DSP_APU_PCM_CLK_REG_PCM_USE_FDIV_Pos (2UL) /*!< PCM_USE_FDIV (Bit 2) */ + #define APU_DSP_APU_PCM_CLK_REG_PCM_USE_FDIV_Msk (0x4UL) /*!< PCM_USE_FDIV (Bitfield-Mask: 0x01) */ + #define APU_DSP_APU_PCM_CLK_REG_PCM1_CLK_EN_Pos (0UL) /*!< PCM1_CLK_EN (Bit 0) */ + #define APU_DSP_APU_PCM_CLK_REG_PCM1_CLK_EN_Msk (0x1UL) /*!< PCM1_CLK_EN (Bitfield-Mask: 0x01) */ +/* ================================================ APU_SYNC_SRC1IN_SEL_REG ================================================ */ + #define APU_DSP_APU_SYNC_SRC1IN_SEL_REG_SRC1_IN_A_SEL_Pos (0UL) /*!< SRC1_IN_A_SEL (Bit 0) */ + #define APU_DSP_APU_SYNC_SRC1IN_SEL_REG_SRC1_IN_A_SEL_Msk (0x3UL) /*!< SRC1_IN_A_SEL (Bitfield-Mask: 0x03) */ +/* =============================================== APU_SYNC_SRC1OUT_SEL_REG ================================================ */ + #define APU_DSP_APU_SYNC_SRC1OUT_SEL_REG_SRC1_OUT_A_SEL_Pos (0UL) /*!< SRC1_OUT_A_SEL (Bit 0) */ + #define APU_DSP_APU_SYNC_SRC1OUT_SEL_REG_SRC1_OUT_A_SEL_Msk (0x3UL) /*!< SRC1_OUT_A_SEL (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ AUXADC ================ */ +/* =========================================================================================================================== */ + +/* ================================================== FIFO0_DATA_CURR_REG ================================================== */ + #define AUXADC_FIFO0_DATA_CURR_REG_FIFO0_CURR_DATA_Pos (0UL) /*!< FIFO0_CURR_DATA (Bit 0) */ + #define AUXADC_FIFO0_DATA_CURR_REG_FIFO0_CURR_DATA_Msk (0xffffUL) /*!< FIFO0_CURR_DATA (Bitfield-Mask: 0xffff) */ +/* ================================================== FIFO0_DMA_DATA_REG =================================================== */ + #define AUXADC_FIFO0_DMA_DATA_REG_FIFO0_DMA_DATA_Pos (0UL) /*!< FIFO0_DMA_DATA (Bit 0) */ + #define AUXADC_FIFO0_DMA_DATA_REG_FIFO0_DMA_DATA_Msk (0xffffUL) /*!< FIFO0_DMA_DATA (Bitfield-Mask: 0xffff) */ +/* ================================================== FIFO1_DATA_CURR_REG ================================================== */ + #define AUXADC_FIFO1_DATA_CURR_REG_FIFO1_CURR_DATA_Pos (0UL) /*!< FIFO1_CURR_DATA (Bit 0) */ + #define AUXADC_FIFO1_DATA_CURR_REG_FIFO1_CURR_DATA_Msk (0xffffUL) /*!< FIFO1_CURR_DATA (Bitfield-Mask: 0xffff) */ +/* ================================================== FIFO1_DMA_DATA_REG =================================================== */ + #define AUXADC_FIFO1_DMA_DATA_REG_FIFO1_DMA_DATA_Pos (0UL) /*!< FIFO1_DMA_DATA (Bit 0) */ + #define AUXADC_FIFO1_DMA_DATA_REG_FIFO1_DMA_DATA_Msk (0xffffUL) /*!< FIFO1_DMA_DATA (Bitfield-Mask: 0xffff) */ +/* ================================================== FIFO2_DATA_CURR_REG ================================================== */ + #define AUXADC_FIFO2_DATA_CURR_REG_FIFO2_CURR_DATA_Pos (0UL) /*!< FIFO2_CURR_DATA (Bit 0) */ + #define AUXADC_FIFO2_DATA_CURR_REG_FIFO2_CURR_DATA_Msk (0xffffUL) /*!< FIFO2_CURR_DATA (Bitfield-Mask: 0xffff) */ +/* ================================================== FIFO2_DMA_DATA_REG =================================================== */ + #define AUXADC_FIFO2_DMA_DATA_REG_FIFO2_DMA_DATA_Pos (0UL) /*!< FIFO2_DMA_DATA (Bit 0) */ + #define AUXADC_FIFO2_DMA_DATA_REG_FIFO2_DMA_DATA_Msk (0xffffUL) /*!< FIFO2_DMA_DATA (Bitfield-Mask: 0xffff) */ +/* ================================================== FIFO3_DATA_CURR_REG ================================================== */ + #define AUXADC_FIFO3_DATA_CURR_REG_FIFO3_CURR_DATA_Pos (0UL) /*!< FIFO3_CURR_DATA (Bit 0) */ + #define AUXADC_FIFO3_DATA_CURR_REG_FIFO3_CURR_DATA_Msk (0xffffUL) /*!< FIFO3_CURR_DATA (Bitfield-Mask: 0xffff) */ +/* ================================================== FIFO3_DMA_DATA_REG =================================================== */ + #define AUXADC_FIFO3_DMA_DATA_REG_FIFO3_DMA_DATA_Pos (0UL) /*!< FIFO3_DMA_DATA (Bit 0) */ + #define AUXADC_FIFO3_DMA_DATA_REG_FIFO3_DMA_DATA_Msk (0xffffUL) /*!< FIFO3_DMA_DATA (Bitfield-Mask: 0xffff) */ +/* ================================================== FXADC_CLK_CTRL_REG =================================================== */ + #define AUXADC_FXADC_CLK_CTRL_REG_FXADC12B_CLK_Pos (8UL) /*!< FXADC12B_CLK (Bit 8) */ + #define AUXADC_FXADC_CLK_CTRL_REG_FXADC12B_CLK_Msk (0xff00UL) /*!< FXADC12B_CLK (Bitfield-Mask: 0xff) */ +/* ================================================== SWITCHING_MODE_REG =================================================== */ + #define AUXADC_SWITCHING_MODE_REG_SWITCHING_MODE_Pos (0UL) /*!< SWITCHING_MODE (Bit 0) */ + #define AUXADC_SWITCHING_MODE_REG_SWITCHING_MODE_Msk (0x1ffUL) /*!< SWITCHING_MODE (Bitfield-Mask: 0x1ff) */ +/* ================================================== TIMESTAMP_CTRL_REG =================================================== */ + #define AUXADC_TIMESTAMP_CTRL_REG_TIMESTAMP_12B_Pos (8UL) /*!< TIMESTAMP_12B (Bit 8) */ + #define AUXADC_TIMESTAMP_CTRL_REG_TIMESTAMP_12B_Msk (0xf00UL) /*!< TIMESTAMP_12B (Bitfield-Mask: 0x0f) */ +/* =================================================== XADC12B_CTRL_REG ==================================================== */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_DATA_FORMAT_Pos (8UL) /*!< ADC12B_DATA_FORMAT (Bit 8) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_DATA_FORMAT_Msk (0x100UL) /*!< ADC12B_DATA_FORMAT (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_TRIM_Pos (5UL) /*!< ADC12B_TRIM (Bit 5) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_TRIM_Msk (0xe0UL) /*!< ADC12B_TRIM (Bitfield-Mask: 0x07) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_CS_Pos (2UL) /*!< ADC12B_CS (Bit 2) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_CS_Msk (0x1cUL) /*!< ADC12B_CS (Bitfield-Mask: 0x07) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_PWRDOEN_Pos (1UL) /*!< ADC12B_PWRDOEN (Bit 1) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_PWRDOEN_Msk (0x2UL) /*!< ADC12B_PWRDOEN (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_RESET_Pos (0UL) /*!< ADC12B_RESET (Bit 0) */ + #define AUXADC_XADC12B_CTRL_REG_ADC12B_RESET_Msk (0x1UL) /*!< ADC12B_RESET (Bitfield-Mask: 0x01) */ +/* ================================================== XADC12B_DMA_EN_REG =================================================== */ + #define AUXADC_XADC12B_DMA_EN_REG_FIFO3_ENABLE_Pos (3UL) /*!< FIFO3_ENABLE (Bit 3) */ + #define AUXADC_XADC12B_DMA_EN_REG_FIFO3_ENABLE_Msk (0x8UL) /*!< FIFO3_ENABLE (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_DMA_EN_REG_FIFO2_ENABLE_Pos (2UL) /*!< FIFO2_ENABLE (Bit 2) */ + #define AUXADC_XADC12B_DMA_EN_REG_FIFO2_ENABLE_Msk (0x4UL) /*!< FIFO2_ENABLE (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_DMA_EN_REG_FIFO1_ENABLE_Pos (1UL) /*!< FIFO1_ENABLE (Bit 1) */ + #define AUXADC_XADC12B_DMA_EN_REG_FIFO1_ENABLE_Msk (0x2UL) /*!< FIFO1_ENABLE (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_DMA_EN_REG_FIFO0_ENABLE_Pos (0UL) /*!< FIFO0_ENABLE (Bit 0) */ + #define AUXADC_XADC12B_DMA_EN_REG_FIFO0_ENABLE_Msk (0x1UL) /*!< FIFO0_ENABLE (Bitfield-Mask: 0x01) */ +/* ============================================== XADC12B_FIFO_INTR_MASK_REG =============================================== */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_FL_FIFO3_MASK_Pos (7UL) /*!< FL_FIFO3_MASK (Bit 7) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_FL_FIFO3_MASK_Msk (0x80UL) /*!< FL_FIFO3_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_FL_FIFO2_MASK_Pos (6UL) /*!< FL_FIFO2_MASK (Bit 6) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_FL_FIFO2_MASK_Msk (0x40UL) /*!< FL_FIFO2_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_FL_FIFO1_MASK_Pos (5UL) /*!< FL_FIFO1_MASK (Bit 5) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_FL_FIFO1_MASK_Msk (0x20UL) /*!< FL_FIFO1_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_FL_FIFO0_MASK_Pos (4UL) /*!< FL_FIFO0_MASK (Bit 4) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_FL_FIFO0_MASK_Msk (0x10UL) /*!< FL_FIFO0_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_HL_FIFO3_MASK_Pos (3UL) /*!< HL_FIFO3_MASK (Bit 3) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_HL_FIFO3_MASK_Msk (0x8UL) /*!< HL_FIFO3_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_HL_FIFO2_MASK_Pos (2UL) /*!< HL_FIFO2_MASK (Bit 2) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_HL_FIFO2_MASK_Msk (0x4UL) /*!< HL_FIFO2_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_HL_FIFO1_MASK_Pos (1UL) /*!< HL_FIFO1_MASK (Bit 1) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_HL_FIFO1_MASK_Msk (0x2UL) /*!< HL_FIFO1_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_HL_FIFO0_MASK_Pos (0UL) /*!< HL_FIFO0_MASK (Bit 0) */ + #define AUXADC_XADC12B_FIFO_INTR_MASK_REG_HL_FIFO0_MASK_Msk (0x1UL) /*!< HL_FIFO0_MASK (Bitfield-Mask: 0x01) */ +/* ================================================ XADC12B_INTR_STATUS_REG ================================================ */ + #define AUXADC_XADC12B_INTR_STATUS_REG_DIFF_THR_FIFO3_STS_Pos (19UL) /*!< DIFF_THR_FIFO3_STS (Bit 19) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_DIFF_THR_FIFO3_STS_Msk (0x80000UL) /*!< DIFF_THR_FIFO3_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_DIFF_THR_FIFO2_STS_Pos (18UL) /*!< DIFF_THR_FIFO2_STS (Bit 18) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_DIFF_THR_FIFO2_STS_Msk (0x40000UL) /*!< DIFF_THR_FIFO2_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_DIFF_THR_FIFO1_STS_Pos (17UL) /*!< DIFF_THR_FIFO1_STS (Bit 17) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_DIFF_THR_FIFO1_STS_Msk (0x20000UL) /*!< DIFF_THR_FIFO1_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_DIFF_THR_FIFO0_STS_Pos (16UL) /*!< DIFF_THR_FIFO0_STS (Bit 16) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_DIFF_THR_FIFO0_STS_Msk (0x10000UL) /*!< DIFF_THR_FIFO0_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_UNDER_THR_FIFO3_STS_Pos (15UL) /*!< UNDER_THR_FIFO3_STS (Bit 15) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_UNDER_THR_FIFO3_STS_Msk (0x8000UL) /*!< UNDER_THR_FIFO3_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_UNDER_THR_FIFO2_STS_Pos (14UL) /*!< UNDER_THR_FIFO2_STS (Bit 14) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_UNDER_THR_FIFO2_STS_Msk (0x4000UL) /*!< UNDER_THR_FIFO2_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_UNDER_THR_FIFO1_STS_Pos (13UL) /*!< UNDER_THR_FIFO1_STS (Bit 13) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_UNDER_THR_FIFO1_STS_Msk (0x2000UL) /*!< UNDER_THR_FIFO1_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_UNDER_THR_FIFO0_STS_Pos (12UL) /*!< UNDER_THR_FIFO0_STS (Bit 12) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_UNDER_THR_FIFO0_STS_Msk (0x1000UL) /*!< UNDER_THR_FIFO0_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_OVER_THR_FIFO3_STS_Pos (11UL) /*!< OVER_THR_FIFO3_STS (Bit 11) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_OVER_THR_FIFO3_STS_Msk (0x800UL) /*!< OVER_THR_FIFO3_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_OVER_THR_FIFO2_STS_Pos (10UL) /*!< OVER_THR_FIFO2_STS (Bit 10) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_OVER_THR_FIFO2_STS_Msk (0x400UL) /*!< OVER_THR_FIFO2_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_OVER_THR_FIFO1_STS_Pos (9UL) /*!< OVER_THR_FIFO1_STS (Bit 9) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_OVER_THR_FIFO1_STS_Msk (0x200UL) /*!< OVER_THR_FIFO1_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_OVER_THR_FIFO0_STS_Pos (8UL) /*!< OVER_THR_FIFO0_STS (Bit 8) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_OVER_THR_FIFO0_STS_Msk (0x100UL) /*!< OVER_THR_FIFO0_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_FL_FIFO3_STS_Pos (7UL) /*!< FL_FIFO3_STS (Bit 7) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_FL_FIFO3_STS_Msk (0x80UL) /*!< FL_FIFO3_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_FL_FIFO2_STS_Pos (6UL) /*!< FL_FIFO2_STS (Bit 6) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_FL_FIFO2_STS_Msk (0x40UL) /*!< FL_FIFO2_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_FL_FIFO1_STS_Pos (5UL) /*!< FL_FIFO1_STS (Bit 5) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_FL_FIFO1_STS_Msk (0x20UL) /*!< FL_FIFO1_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_FL_FIFO0_STS_Pos (4UL) /*!< FL_FIFO0_STS (Bit 4) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_FL_FIFO0_STS_Msk (0x10UL) /*!< FL_FIFO0_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_HL_FIFO3_STS_Pos (3UL) /*!< HL_FIFO3_STS (Bit 3) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_HL_FIFO3_STS_Msk (0x8UL) /*!< HL_FIFO3_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_HL_FIFO2_STS_Pos (2UL) /*!< HL_FIFO2_STS (Bit 2) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_HL_FIFO2_STS_Msk (0x4UL) /*!< HL_FIFO2_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_HL_FIFO1_STS_Pos (1UL) /*!< HL_FIFO1_STS (Bit 1) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_HL_FIFO1_STS_Msk (0x2UL) /*!< HL_FIFO1_STS (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_HL_FIFO0_STS_Pos (0UL) /*!< HL_FIFO0_STS (Bit 0) */ + #define AUXADC_XADC12B_INTR_STATUS_REG_HL_FIFO0_STS_Msk (0x1UL) /*!< HL_FIFO0_STS (Bitfield-Mask: 0x01) */ +/* =============================================== XADC12B_INT_THR_DIFF_REG ================================================ */ + #define AUXADC_XADC12B_INT_THR_DIFF_REG_DIFF_THR_VAL_Pos (1UL) /*!< DIFF_THR_VAL (Bit 1) */ + #define AUXADC_XADC12B_INT_THR_DIFF_REG_DIFF_THR_VAL_Msk (0xfffeUL) /*!< DIFF_THR_VAL (Bitfield-Mask: 0x7fff) */ + #define AUXADC_XADC12B_INT_THR_DIFF_REG_DIFF_THR_EN_Pos (0UL) /*!< DIFF_THR_EN (Bit 0) */ + #define AUXADC_XADC12B_INT_THR_DIFF_REG_DIFF_THR_EN_Msk (0x1UL) /*!< DIFF_THR_EN (Bitfield-Mask: 0x01) */ +/* =============================================== XADC12B_INT_THR_OVER_REG ================================================ */ + #define AUXADC_XADC12B_INT_THR_OVER_REG_OVER_THR_VAL_Pos (1UL) /*!< OVER_THR_VAL (Bit 1) */ + #define AUXADC_XADC12B_INT_THR_OVER_REG_OVER_THR_VAL_Msk (0xfffeUL) /*!< OVER_THR_VAL (Bitfield-Mask: 0x7fff) */ + #define AUXADC_XADC12B_INT_THR_OVER_REG_OVER_THR_EN_Pos (0UL) /*!< OVER_THR_EN (Bit 0) */ + #define AUXADC_XADC12B_INT_THR_OVER_REG_OVER_THR_EN_Msk (0x1UL) /*!< OVER_THR_EN (Bitfield-Mask: 0x01) */ +/* =============================================== XADC12B_INT_THR_UNDER_REG =============================================== */ + #define AUXADC_XADC12B_INT_THR_UNDER_REG_UNDER_THR_VAL_Pos (1UL) /*!< UNDER_THR_VAL (Bit 1) */ + #define AUXADC_XADC12B_INT_THR_UNDER_REG_UNDER_THR_VAL_Msk (0xfffeUL) /*!< UNDER_THR_VAL (Bitfield-Mask: 0x7fff) */ + #define AUXADC_XADC12B_INT_THR_UNDER_REG_UNDER_THR_EN_Pos (0UL) /*!< UNDER_THR_EN (Bit 0) */ + #define AUXADC_XADC12B_INT_THR_UNDER_REG_UNDER_THR_EN_Msk (0x1UL) /*!< UNDER_THR_EN (Bitfield-Mask: 0x01) */ +/* ================================================= XADC12B_RM_SAMPLE_REG ================================================= */ + #define AUXADC_XADC12B_RM_SAMPLE_REG_XADC12B_RM_SAMPLE_Pos (8UL) /*!< XADC12B_RM_SAMPLE (Bit 8) */ + #define AUXADC_XADC12B_RM_SAMPLE_REG_XADC12B_RM_SAMPLE_Msk (0xff00UL) /*!< XADC12B_RM_SAMPLE (Bitfield-Mask: 0xff) */ +/* ================================================= XADC12B_ST_SAMPLE_REG ================================================= */ + #define AUXADC_XADC12B_ST_SAMPLE_REG_XADC12B_SP_INTERVAL_Pos (4UL) /*!< XADC12B_SP_INTERVAL (Bit 4) */ + #define AUXADC_XADC12B_ST_SAMPLE_REG_XADC12B_SP_INTERVAL_Msk (0xf0UL) /*!< XADC12B_SP_INTERVAL (Bitfield-Mask: 0x0f) */ +/* =============================================== XADC12B_THR_INTR_CLR_REG ================================================ */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_DIFF_THR_FIFO3_CLR_Pos (11UL) /*!< DIFF_THR_FIFO3_CLR (Bit 11) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_DIFF_THR_FIFO3_CLR_Msk (0x800UL) /*!< DIFF_THR_FIFO3_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_DIFF_THR_FIFO2_CLR_Pos (10UL) /*!< DIFF_THR_FIFO2_CLR (Bit 10) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_DIFF_THR_FIFO2_CLR_Msk (0x400UL) /*!< DIFF_THR_FIFO2_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_DIFF_THR_FIFO1_CLR_Pos (9UL) /*!< DIFF_THR_FIFO1_CLR (Bit 9) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_DIFF_THR_FIFO1_CLR_Msk (0x200UL) /*!< DIFF_THR_FIFO1_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_DIFF_THR_FIFO0_CLR_Pos (8UL) /*!< DIFF_THR_FIFO0_CLR (Bit 8) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_DIFF_THR_FIFO0_CLR_Msk (0x100UL) /*!< DIFF_THR_FIFO0_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_UNDER_THR_FIFO3_CLR_Pos (7UL) /*!< UNDER_THR_FIFO3_CLR (Bit 7) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_UNDER_THR_FIFO3_CLR_Msk (0x80UL) /*!< UNDER_THR_FIFO3_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_UNDER_THR_FIFO2_CLR_Pos (6UL) /*!< UNDER_THR_FIFO2_CLR (Bit 6) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_UNDER_THR_FIFO2_CLR_Msk (0x40UL) /*!< UNDER_THR_FIFO2_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_UNDER_THR_FIFO1_CLR_Pos (5UL) /*!< UNDER_THR_FIFO1_CLR (Bit 5) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_UNDER_THR_FIFO1_CLR_Msk (0x20UL) /*!< UNDER_THR_FIFO1_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_UNDER_THR_FIFO0_CLR_Pos (4UL) /*!< UNDER_THR_FIFO0_CLR (Bit 4) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_UNDER_THR_FIFO0_CLR_Msk (0x10UL) /*!< UNDER_THR_FIFO0_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_OVER_THR_FIFO3_CLR_Pos (3UL) /*!< OVER_THR_FIFO3_CLR (Bit 3) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_OVER_THR_FIFO3_CLR_Msk (0x8UL) /*!< OVER_THR_FIFO3_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_OVER_THR_FIFO2_CLR_Pos (2UL) /*!< OVER_THR_FIFO2_CLR (Bit 2) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_OVER_THR_FIFO2_CLR_Msk (0x4UL) /*!< OVER_THR_FIFO2_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_OVER_THR_FIFO1_CLR_Pos (1UL) /*!< OVER_THR_FIFO1_CLR (Bit 1) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_OVER_THR_FIFO1_CLR_Msk (0x2UL) /*!< OVER_THR_FIFO1_CLR (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_OVER_THR_FIFO0_CLR_Pos (0UL) /*!< OVER_THR_FIFO0_CLR (Bit 0) */ + #define AUXADC_XADC12B_THR_INTR_CLR_REG_OVER_THR_FIFO0_CLR_Msk (0x1UL) /*!< OVER_THR_FIFO0_CLR (Bitfield-Mask: 0x01) */ +/* =============================================== XADC12B_THR_INTR_MASK_REG =============================================== */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_DIFF_THR_FIFO3_MASK_Pos (11UL) /*!< DIFF_THR_FIFO3_MASK (Bit 11) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_DIFF_THR_FIFO3_MASK_Msk (0x800UL) /*!< DIFF_THR_FIFO3_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_DIFF_THR_FIFO2_MASK_Pos (10UL) /*!< DIFF_THR_FIFO2_MASK (Bit 10) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_DIFF_THR_FIFO2_MASK_Msk (0x400UL) /*!< DIFF_THR_FIFO2_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_DIFF_THR_FIFO1_MASK_Pos (9UL) /*!< DIFF_THR_FIFO1_MASK (Bit 9) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_DIFF_THR_FIFO1_MASK_Msk (0x200UL) /*!< DIFF_THR_FIFO1_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_DIFF_THR_FIFO0_MASK_Pos (8UL) /*!< DIFF_THR_FIFO0_MASK (Bit 8) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_DIFF_THR_FIFO0_MASK_Msk (0x100UL) /*!< DIFF_THR_FIFO0_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_UNDER_THR_FIFO3_MASK_Pos (7UL) /*!< UNDER_THR_FIFO3_MASK (Bit 7) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_UNDER_THR_FIFO3_MASK_Msk (0x80UL) /*!< UNDER_THR_FIFO3_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_UNDER_THR_FIFO2_MASK_Pos (6UL) /*!< UNDER_THR_FIFO2_MASK (Bit 6) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_UNDER_THR_FIFO2_MASK_Msk (0x40UL) /*!< UNDER_THR_FIFO2_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_UNDER_THR_FIFO1_MASK_Pos (5UL) /*!< UNDER_THR_FIFO1_MASK (Bit 5) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_UNDER_THR_FIFO1_MASK_Msk (0x20UL) /*!< UNDER_THR_FIFO1_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_UNDER_THR_FIFO0_MASK_Pos (4UL) /*!< UNDER_THR_FIFO0_MASK (Bit 4) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_UNDER_THR_FIFO0_MASK_Msk (0x10UL) /*!< UNDER_THR_FIFO0_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_OVER_THR_FIFO3_MASK_Pos (3UL) /*!< OVER_THR_FIFO3_MASK (Bit 3) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_OVER_THR_FIFO3_MASK_Msk (0x8UL) /*!< OVER_THR_FIFO3_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_OVER_THR_FIFO2_MASK_Pos (2UL) /*!< OVER_THR_FIFO2_MASK (Bit 2) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_OVER_THR_FIFO2_MASK_Msk (0x4UL) /*!< OVER_THR_FIFO2_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_OVER_THR_FIFO1_MASK_Pos (1UL) /*!< OVER_THR_FIFO1_MASK (Bit 1) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_OVER_THR_FIFO1_MASK_Msk (0x2UL) /*!< OVER_THR_FIFO1_MASK (Bitfield-Mask: 0x01) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_OVER_THR_FIFO0_MASK_Pos (0UL) /*!< OVER_THR_FIFO0_MASK (Bit 0) */ + #define AUXADC_XADC12B_THR_INTR_MASK_REG_OVER_THR_FIFO0_MASK_Msk (0x1UL) /*!< OVER_THR_FIFO0_MASK (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ CACHE ================ */ +/* =========================================================================================================================== */ + +/* ================================================== CACHE_ASSOCCFG_REG =================================================== */ + #define CACHE_CACHE_ASSOCCFG_REG_CACHE_ASSOC_Pos (0UL) /*!< CACHE_ASSOC (Bit 0) */ + #define CACHE_CACHE_ASSOCCFG_REG_CACHE_ASSOC_Msk (0x3UL) /*!< CACHE_ASSOC (Bitfield-Mask: 0x03) */ +/* ================================================= CACHE_CPU_M_HADDR_REG ================================================= */ + #define CACHE_CACHE_CPU_M_HADDR_REG_CACHE_CPU_M_HADDR_Pos (0UL) /*!< CACHE_CPU_M_HADDR (Bit 0) */ + #define CACHE_CACHE_CPU_M_HADDR_REG_CACHE_CPU_M_HADDR_Msk (0xffffffffUL) /*!< CACHE_CPU_M_HADDR (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== CACHE_CTRL1_REG ==================================================== */ + #define CACHE_CACHE_CTRL1_REG_CACHE_RES1_Pos (1UL) /*!< CACHE_RES1 (Bit 1) */ + #define CACHE_CACHE_CTRL1_REG_CACHE_RES1_Msk (0x2UL) /*!< CACHE_RES1 (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL1_REG_CACHE_FLUSH_Pos (0UL) /*!< CACHE_FLUSH (Bit 0) */ + #define CACHE_CACHE_CTRL1_REG_CACHE_FLUSH_Msk (0x1UL) /*!< CACHE_FLUSH (Bitfield-Mask: 0x01) */ +/* ==================================================== CACHE_CTRL2_REG ==================================================== */ + #define CACHE_CACHE_CTRL2_REG_CACHE_ROM_REGION_EN_Pos (22UL) /*!< CACHE_ROM_REGION_EN (Bit 22) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_ROM_REGION_EN_Msk (0x400000UL) /*!< CACHE_ROM_REGION_EN (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_READY_Pos (21UL) /*!< CACHE_READY (Bit 21) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_READY_Msk (0x200000UL) /*!< CACHE_READY (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_RAM_INIT_Pos (20UL) /*!< CACHE_RAM_INIT (Bit 20) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_RAM_INIT_Msk (0x100000UL) /*!< CACHE_RAM_INIT (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_FLUSHED_Pos (19UL) /*!< CACHE_FLUSHED (Bit 19) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_FLUSHED_Msk (0x80000UL) /*!< CACHE_FLUSHED (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_FLUSH_DISABLE_Pos (18UL) /*!< CACHE_FLUSH_DISABLE (Bit 18) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_FLUSH_DISABLE_Msk (0x40000UL) /*!< CACHE_FLUSH_DISABLE (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_USE_FULL_DB_RANGE_Pos (16UL) /*!< CACHE_USE_FULL_DB_RANGE (Bit 16) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_USE_FULL_DB_RANGE_Msk (0x30000UL) /*!< CACHE_USE_FULL_DB_RANGE (Bitfield-Mask: 0x03) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_MHCLKEN_DISABLE_Pos (15UL) /*!< CACHE_MHCLKEN_DISABLE (Bit 15) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_MHCLKEN_DISABLE_Msk (0x8000UL) /*!< CACHE_MHCLKEN_DISABLE (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_CWF_DISABLE_Pos (14UL) /*!< CACHE_CWF_DISABLE (Bit 14) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_CWF_DISABLE_Msk (0x4000UL) /*!< CACHE_CWF_DISABLE (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_CGEN_Pos (13UL) /*!< CACHE_CGEN (Bit 13) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_CGEN_Msk (0x2000UL) /*!< CACHE_CGEN (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_WEN_Pos (12UL) /*!< CACHE_WEN (Bit 12) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_WEN_Msk (0x1000UL) /*!< CACHE_WEN (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_LEN_Pos (0UL) /*!< CACHE_LEN (Bit 0) */ + #define CACHE_CACHE_CTRL2_REG_CACHE_LEN_Msk (0xfffUL) /*!< CACHE_LEN (Bitfield-Mask: 0xfff) */ +/* ==================================================== CACHE_CTRL3_REG ==================================================== */ + #define CACHE_CACHE_CTRL3_REG_CACHE_TM_CBUS_SLOW_PERIPH_FOR_SBUS_Pos (8UL) /*!< CACHE_TM_CBUS_SLOW_PERIPH_FOR_SBUS (Bit 8) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_TM_CBUS_SLOW_PERIPH_FOR_SBUS_Msk (0x100UL) /*!< CACHE_TM_CBUS_SLOW_PERIPH_FOR_SBUS (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_CONTROLLER_RESET_Pos (7UL) /*!< CACHE_CONTROLLER_RESET (Bit 7) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_CONTROLLER_RESET_Msk (0x80UL) /*!< CACHE_CONTROLLER_RESET (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_RAM_SIZE_RESET_VALUE_Pos (4UL) /*!< CACHE_RAM_SIZE_RESET_VALUE (Bit 4) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_RAM_SIZE_RESET_VALUE_Msk (0x70UL) /*!< CACHE_RAM_SIZE_RESET_VALUE (Bitfield-Mask: 0x07) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_LINE_SIZE_RESET_VALUE_Pos (2UL) /*!< CACHE_LINE_SIZE_RESET_VALUE (Bit 2) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_LINE_SIZE_RESET_VALUE_Msk (0xcUL) /*!< CACHE_LINE_SIZE_RESET_VALUE (Bitfield-Mask: 0x03) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_ASSOCIATIVITY_RESET_VALUE_Pos (0UL) /*!< CACHE_ASSOCIATIVITY_RESET_VALUE (Bit 0) */ + #define CACHE_CACHE_CTRL3_REG_CACHE_ASSOCIATIVITY_RESET_VALUE_Msk (0x3UL) /*!< CACHE_ASSOCIATIVITY_RESET_VALUE (Bitfield-Mask: 0x03) */ +/* ================================================ CACHE_CTRLR_M_HADDR_REG ================================================ */ + #define CACHE_CACHE_CTRLR_M_HADDR_REG_CACHE_CTRLR_M_HADDR_Pos (0UL) /*!< CACHE_CTRLR_M_HADDR (Bit 0) */ + #define CACHE_CACHE_CTRLR_M_HADDR_REG_CACHE_CTRLR_M_HADDR_Msk (0xffffffffUL) /*!< CACHE_CTRLR_M_HADDR (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== CACHE_FLASH_REG ==================================================== */ + #define CACHE_CACHE_FLASH_REG_FLASH_REGION_BASE_Pos (16UL) /*!< FLASH_REGION_BASE (Bit 16) */ + #define CACHE_CACHE_FLASH_REG_FLASH_REGION_BASE_Msk (0xffff0000UL) /*!< FLASH_REGION_BASE (Bitfield-Mask: 0xffff) */ + #define CACHE_CACHE_FLASH_REG_FLASH_REGION_OFFSET_Pos (4UL) /*!< FLASH_REGION_OFFSET (Bit 4) */ + #define CACHE_CACHE_FLASH_REG_FLASH_REGION_OFFSET_Msk (0xfff0UL) /*!< FLASH_REGION_OFFSET (Bitfield-Mask: 0xfff) */ + #define CACHE_CACHE_FLASH_REG_FLASH_REGION_SIZE_Pos (0UL) /*!< FLASH_REGION_SIZE (Bit 0) */ + #define CACHE_CACHE_FLASH_REG_FLASH_REGION_SIZE_Msk (0xfUL) /*!< FLASH_REGION_SIZE (Bitfield-Mask: 0x0f) */ +/* ================================================== CACHE_LNSIZECFG_REG ================================================== */ + #define CACHE_CACHE_LNSIZECFG_REG_CACHE_LINE_Pos (0UL) /*!< CACHE_LINE (Bit 0) */ + #define CACHE_CACHE_LNSIZECFG_REG_CACHE_LINE_Msk (0x3UL) /*!< CACHE_LINE (Bitfield-Mask: 0x03) */ +/* ================================================== CACHE_MRM_CTRL_REG =================================================== */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_IRQ_HITS_THRES_STATUS_Pos (4UL) /*!< MRM_IRQ_HITS_THRES_STATUS (Bit 4) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_IRQ_HITS_THRES_STATUS_Msk (0x10UL) /*!< MRM_IRQ_HITS_THRES_STATUS (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_IRQ_MISSES_THRES_STATUS_Pos (3UL) /*!< MRM_IRQ_MISSES_THRES_STATUS (Bit 3) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_IRQ_MISSES_THRES_STATUS_Msk (0x8UL) /*!< MRM_IRQ_MISSES_THRES_STATUS (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_IRQ_TINT_STATUS_Pos (2UL) /*!< MRM_IRQ_TINT_STATUS (Bit 2) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_IRQ_TINT_STATUS_Msk (0x4UL) /*!< MRM_IRQ_TINT_STATUS (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_IRQ_MASK_Pos (1UL) /*!< MRM_IRQ_MASK (Bit 1) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_IRQ_MASK_Msk (0x2UL) /*!< MRM_IRQ_MASK (Bitfield-Mask: 0x01) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_START_Pos (0UL) /*!< MRM_START (Bit 0) */ + #define CACHE_CACHE_MRM_CTRL_REG_MRM_START_Msk (0x1UL) /*!< MRM_START (Bitfield-Mask: 0x01) */ +/* ================================================= CACHE_MRM_HITS1WS_REG ================================================= */ + #define CACHE_CACHE_MRM_HITS1WS_REG_MRM_HITS1WS_Pos (0UL) /*!< MRM_HITS1WS (Bit 0) */ + #define CACHE_CACHE_MRM_HITS1WS_REG_MRM_HITS1WS_Msk (0xffffffffUL) /*!< MRM_HITS1WS (Bitfield-Mask: 0xffffffff) */ +/* ================================================== CACHE_MRM_HITS_REG =================================================== */ + #define CACHE_CACHE_MRM_HITS_REG_MRM_HITS_Pos (0UL) /*!< MRM_HITS (Bit 0) */ + #define CACHE_CACHE_MRM_HITS_REG_MRM_HITS_Msk (0xffffffffUL) /*!< MRM_HITS (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CACHE_MRM_HITS_THRES_REG ================================================ */ + #define CACHE_CACHE_MRM_HITS_THRES_REG_MRM_HITS_THRES_Pos (0UL) /*!< MRM_HITS_THRES (Bit 0) */ + #define CACHE_CACHE_MRM_HITS_THRES_REG_MRM_HITS_THRES_Msk (0xffffffffUL) /*!< MRM_HITS_THRES (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CACHE_MRM_MISSES_REG ================================================== */ + #define CACHE_CACHE_MRM_MISSES_REG_MRM_MISSES_Pos (0UL) /*!< MRM_MISSES (Bit 0) */ + #define CACHE_CACHE_MRM_MISSES_REG_MRM_MISSES_Msk (0xffffffffUL) /*!< MRM_MISSES (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CACHE_MRM_MISSES_THRES_REG =============================================== */ + #define CACHE_CACHE_MRM_MISSES_THRES_REG_MRM_MISSES_THRES_Pos (0UL) /*!< MRM_MISSES_THRES (Bit 0) */ + #define CACHE_CACHE_MRM_MISSES_THRES_REG_MRM_MISSES_THRES_Msk (0xffffffffUL) /*!< MRM_MISSES_THRES (Bitfield-Mask: 0xffffffff) */ +/* ================================================== CACHE_MRM_TINT_REG =================================================== */ + #define CACHE_CACHE_MRM_TINT_REG_MRM_TINT_Pos (0UL) /*!< MRM_TINT (Bit 0) */ + #define CACHE_CACHE_MRM_TINT_REG_MRM_TINT_Msk (0x7ffffUL) /*!< MRM_TINT (Bitfield-Mask: 0x7ffff) */ +/* ================================================ CACHE_M_HADDR_MAP0_REG ================================================= */ + #define CACHE_CACHE_M_HADDR_MAP0_REG_CACHE_M_HADDR_MAP0_Pos (0UL) /*!< CACHE_M_HADDR_MAP0 (Bit 0) */ + #define CACHE_CACHE_M_HADDR_MAP0_REG_CACHE_M_HADDR_MAP0_Msk (0xffffffffUL) /*!< CACHE_M_HADDR_MAP0 (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== SWD_RESET_REG ===================================================== */ + #define CACHE_SWD_RESET_REG_SWD_HW_RESET_REQ_Pos (0UL) /*!< SWD_HW_RESET_REQ (Bit 0) */ + #define CACHE_SWD_RESET_REG_SWD_HW_RESET_REQ_Msk (0x1UL) /*!< SWD_HW_RESET_REQ (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ CC312 ================ */ +/* =========================================================================================================================== */ + +/* ================================================== CC312_AES_BUSY_REG =================================================== */ + #define CC312_CC312_AES_BUSY_REG_CC312_AES_BUSY_Pos (0UL) /*!< CC312_AES_BUSY (Bit 0) */ + #define CC312_CC312_AES_BUSY_REG_CC312_AES_BUSY_Msk (0x1UL) /*!< CC312_AES_BUSY (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_AES_CLK_ENABLE_REG ================================================ */ + #define CC312_CC312_AES_CLK_ENABLE_REG_CC312_AES_CLK_EN_Pos (0UL) /*!< CC312_AES_CLK_EN (Bit 0) */ + #define CC312_CC312_AES_CLK_ENABLE_REG_CC312_AES_CLK_EN_Msk (0x1UL) /*!< CC312_AES_CLK_EN (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_AES_CMAC_INIT_REG ================================================ */ + #define CC312_CC312_AES_CMAC_INIT_REG_CC312_AES_CMAC_INIT_Pos (0UL) /*!< CC312_AES_CMAC_INIT (Bit 0) */ + #define CC312_CC312_AES_CMAC_INIT_REG_CC312_AES_CMAC_INIT_Msk (0x1UL) /*!< CC312_AES_CMAC_INIT (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_AES_CMAC_SIZE0_KICK_REG ============================================= */ + #define CC312_CC312_AES_CMAC_SIZE0_KICK_REG_CC312_AES_CMAC_SIZE0_KICK_Pos (0UL) /*!< CC312_AES_CMAC_SIZE0_KICK (Bit 0) */ + #define CC312_CC312_AES_CMAC_SIZE0_KICK_REG_CC312_AES_CMAC_SIZE0_KICK_Msk (0x1UL) /*!< CC312_AES_CMAC_SIZE0_KICK (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_AES_CONTROL_REG ================================================= */ + #define CC312_CC312_AES_CONTROL_REG_CC312_DIRECT_ACCESS_Pos (31UL) /*!< CC312_DIRECT_ACCESS (Bit 31) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_DIRECT_ACCESS_Msk (0x80000000UL) /*!< CC312_DIRECT_ACCESS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_XOR_CRYPTOKEY_Pos (29UL) /*!< CC312_AES_XOR_CRYPTOKEY (Bit 29) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_XOR_CRYPTOKEY_Msk (0x20000000UL) /*!< CC312_AES_XOR_CRYPTOKEY (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_OUT_MID_TUN_TO_HASH_Pos (28UL) /*!< CC312_AES_OUT_MID_TUN_TO_HASH (Bit 28) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_OUT_MID_TUN_TO_HASH_Msk (0x10000000UL) /*!< CC312_AES_OUT_MID_TUN_TO_HASH (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUNNEL_B1_PAD_EN_Pos (26UL) /*!< CC312_AES_TUNNEL_B1_PAD_EN (Bit 26) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUNNEL_B1_PAD_EN_Msk (0x4000000UL) /*!< CC312_AES_TUNNEL_B1_PAD_EN (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_OUTPUT_MID_TUNNEL_DATA_Pos (25UL) /*!< CC312_AES_OUTPUT_MID_TUNNEL_DATA (Bit 25) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_OUTPUT_MID_TUNNEL_DATA_Msk (0x2000000UL) /*!< CC312_AES_OUTPUT_MID_TUNNEL_DATA (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUNNEL0_ENCRYPT_Pos (24UL) /*!< CC312_AES_TUNNEL0_ENCRYPT (Bit 24) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUNNEL0_ENCRYPT_Msk (0x1000000UL) /*!< CC312_AES_TUNNEL0_ENCRYPT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUN_B1_USES_PADDED_DATA_IN_Pos (23UL) /*!< CC312_AES_TUN_B1_USES_PADDED_DATA_IN (Bit 23) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUN_B1_USES_PADDED_DATA_IN_Msk (0x800000UL) /*!< CC312_AES_TUN_B1_USES_PADDED_DATA_IN (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUNNEL1_DECRYPT_Pos (22UL) /*!< CC312_AES_TUNNEL1_DECRYPT (Bit 22) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUNNEL1_DECRYPT_Msk (0x400000UL) /*!< CC312_AES_TUNNEL1_DECRYPT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_NK_KEY1_Pos (14UL) /*!< CC312_NK_KEY1 (Bit 14) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_NK_KEY1_Msk (0xc000UL) /*!< CC312_NK_KEY1 (Bitfield-Mask: 0x03) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_NK_KEY0_Pos (12UL) /*!< CC312_NK_KEY0 (Bit 12) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_NK_KEY0_Msk (0x3000UL) /*!< CC312_NK_KEY0 (Bitfield-Mask: 0x03) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_CBC_IS_BITLOCKER_Pos (11UL) /*!< CC312_CBC_IS_BITLOCKER (Bit 11) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_CBC_IS_BITLOCKER_Msk (0x800UL) /*!< CC312_CBC_IS_BITLOCKER (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUNNEL_IS_ON_Pos (10UL) /*!< CC312_AES_TUNNEL_IS_ON (Bit 10) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_AES_TUNNEL_IS_ON_Msk (0x400UL) /*!< CC312_AES_TUNNEL_IS_ON (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_CBC_IS_ESSIV_Pos (8UL) /*!< CC312_CBC_IS_ESSIV (Bit 8) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_CBC_IS_ESSIV_Msk (0x100UL) /*!< CC312_CBC_IS_ESSIV (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_MODE_KEY1_Pos (5UL) /*!< CC312_MODE_KEY1 (Bit 5) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_MODE_KEY1_Msk (0xe0UL) /*!< CC312_MODE_KEY1 (Bitfield-Mask: 0x07) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_MODE_KEY0_Pos (2UL) /*!< CC312_MODE_KEY0 (Bit 2) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_MODE_KEY0_Msk (0x1cUL) /*!< CC312_MODE_KEY0 (Bitfield-Mask: 0x07) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_MODE0_IS_CBC_CTS_Pos (1UL) /*!< CC312_MODE0_IS_CBC_CTS (Bit 1) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_MODE0_IS_CBC_CTS_Msk (0x2UL) /*!< CC312_MODE0_IS_CBC_CTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_DEC_KEY0_Pos (0UL) /*!< CC312_DEC_KEY0 (Bit 0) */ + #define CC312_CC312_AES_CONTROL_REG_CC312_DEC_KEY0_Msk (0x1UL) /*!< CC312_DEC_KEY0 (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_AES_CTR_0_0_REG ================================================= */ + #define CC312_CC312_AES_CTR_0_0_REG_CC312_AES_CTR_0_0_Pos (0UL) /*!< CC312_AES_CTR_0_0 (Bit 0) */ + #define CC312_CC312_AES_CTR_0_0_REG_CC312_AES_CTR_0_0_Msk (0xffffffffUL) /*!< CC312_AES_CTR_0_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_CTR_0_1_REG ================================================= */ + #define CC312_CC312_AES_CTR_0_1_REG_CC312_AES_CTR_0_1_Pos (0UL) /*!< CC312_AES_CTR_0_1 (Bit 0) */ + #define CC312_CC312_AES_CTR_0_1_REG_CC312_AES_CTR_0_1_Msk (0xffffffffUL) /*!< CC312_AES_CTR_0_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_CTR_0_2_REG ================================================= */ + #define CC312_CC312_AES_CTR_0_2_REG_CC312_AES_CTR_0_2_Pos (0UL) /*!< CC312_AES_CTR_0_2 (Bit 0) */ + #define CC312_CC312_AES_CTR_0_2_REG_CC312_AES_CTR_0_2_Msk (0xffffffffUL) /*!< CC312_AES_CTR_0_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_CTR_0_3_REG ================================================= */ + #define CC312_CC312_AES_CTR_0_3_REG_CC312_AES_CTR_0_3_Pos (0UL) /*!< CC312_AES_CTR_0_3 (Bit 0) */ + #define CC312_CC312_AES_CTR_0_3_REG_CC312_AES_CTR_0_3_Msk (0xffffffffUL) /*!< CC312_AES_CTR_0_3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_AES_CTR_NO_INCREMENT_REG ============================================= */ + #define CC312_CC312_AES_CTR_NO_INCREMENT_REG_CC312_AES_CTR_NO_INCREMENT_Pos (0UL) /*!< CC312_AES_CTR_NO_INCREMENT (Bit 0) */ + #define CC312_CC312_AES_CTR_NO_INCREMENT_REG_CC312_AES_CTR_NO_INCREMENT_Msk (0x1UL) /*!< CC312_AES_CTR_NO_INCREMENT (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_AES_DFA_ERR_STATUS_REG ============================================== */ + #define CC312_CC312_AES_DFA_ERR_STATUS_REG_CC312_AES_DFA_ERR_STATUS_Pos (0UL) /*!< CC312_AES_DFA_ERR_STATUS (Bit 0) */ + #define CC312_CC312_AES_DFA_ERR_STATUS_REG_CC312_AES_DFA_ERR_STATUS_Msk (0x1UL) /*!< CC312_AES_DFA_ERR_STATUS (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_AES_DFA_IS_ON_REG ================================================ */ + #define CC312_CC312_AES_DFA_IS_ON_REG_CC312_AES_DFA_IS_ON_Pos (0UL) /*!< CC312_AES_DFA_IS_ON (Bit 0) */ + #define CC312_CC312_AES_DFA_IS_ON_REG_CC312_AES_DFA_IS_ON_Msk (0x1UL) /*!< CC312_AES_DFA_IS_ON (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_AES_HW_FLAGS_REG ================================================= */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_DFA_CNTRMSR_EXIST_Pos (12UL) /*!< CC312_DFA_CNTRMSR_EXIST (Bit 12) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_DFA_CNTRMSR_EXIST_Msk (0x1000UL) /*!< CC312_DFA_CNTRMSR_EXIST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_SECOND_REGS_SET_EXIST_Pos (11UL) /*!< CC312_SECOND_REGS_SET_EXIST (Bit 11) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_SECOND_REGS_SET_EXIST_Msk (0x800UL) /*!< CC312_SECOND_REGS_SET_EXIST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_aes_tunnel_exists_Pos (10UL) /*!< CC312_aes_tunnel_exists (Bit 10) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_aes_tunnel_exists_Msk (0x400UL) /*!< CC312_aes_tunnel_exists (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_AES_SUPPORT_PREV_IV_Pos (9UL) /*!< CC312_AES_SUPPORT_PREV_IV (Bit 9) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_AES_SUPPORT_PREV_IV_Msk (0x200UL) /*!< CC312_AES_SUPPORT_PREV_IV (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_USE_5_SBOXES_Pos (8UL) /*!< CC312_USE_5_SBOXES (Bit 8) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_USE_5_SBOXES_Msk (0x100UL) /*!< CC312_USE_5_SBOXES (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_USE_SBOX_TABLE_Pos (5UL) /*!< CC312_USE_SBOX_TABLE (Bit 5) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_USE_SBOX_TABLE_Msk (0x20UL) /*!< CC312_USE_SBOX_TABLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_ONLY_ENCRYPT_Pos (4UL) /*!< CC312_ONLY_ENCRYPT (Bit 4) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_ONLY_ENCRYPT_Msk (0x10UL) /*!< CC312_ONLY_ENCRYPT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_CTR_EXIST_Pos (3UL) /*!< CC312_CTR_EXIST (Bit 3) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_CTR_EXIST_Msk (0x8UL) /*!< CC312_CTR_EXIST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_DPA_CNTRMSR_EXIST_Pos (2UL) /*!< CC312_DPA_CNTRMSR_EXIST (Bit 2) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_DPA_CNTRMSR_EXIST_Msk (0x4UL) /*!< CC312_DPA_CNTRMSR_EXIST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_AES_LARGE_RKEK_Pos (1UL) /*!< CC312_AES_LARGE_RKEK (Bit 1) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_AES_LARGE_RKEK_Msk (0x2UL) /*!< CC312_AES_LARGE_RKEK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_SUPPORT_256_192_KEY_Pos (0UL) /*!< CC312_SUPPORT_256_192_KEY (Bit 0) */ + #define CC312_CC312_AES_HW_FLAGS_REG_CC312_SUPPORT_256_192_KEY_Msk (0x1UL) /*!< CC312_SUPPORT_256_192_KEY (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_AES_IV_0_0_REG ================================================== */ + #define CC312_CC312_AES_IV_0_0_REG_CC312_AES_IV_0_0_Pos (0UL) /*!< CC312_AES_IV_0_0 (Bit 0) */ + #define CC312_CC312_AES_IV_0_0_REG_CC312_AES_IV_0_0_Msk (0xffffffffUL) /*!< CC312_AES_IV_0_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_IV_0_1_REG ================================================== */ + #define CC312_CC312_AES_IV_0_1_REG_CC312_AES_IV_0_1_Pos (0UL) /*!< CC312_AES_IV_0_1 (Bit 0) */ + #define CC312_CC312_AES_IV_0_1_REG_CC312_AES_IV_0_1_Msk (0xffffffffUL) /*!< CC312_AES_IV_0_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_IV_0_2_REG ================================================== */ + #define CC312_CC312_AES_IV_0_2_REG_CC312_AES_IV_0_2_Pos (0UL) /*!< CC312_AES_IV_0_2 (Bit 0) */ + #define CC312_CC312_AES_IV_0_2_REG_CC312_AES_IV_0_2_Msk (0xffffffffUL) /*!< CC312_AES_IV_0_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_IV_0_3_REG ================================================== */ + #define CC312_CC312_AES_IV_0_3_REG_CC312_AES_IV_0_3_Pos (0UL) /*!< CC312_AES_IV_0_3 (Bit 0) */ + #define CC312_CC312_AES_IV_0_3_REG_CC312_AES_IV_0_3_Msk (0xffffffffUL) /*!< CC312_AES_IV_0_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_IV_1_0_REG ================================================== */ + #define CC312_CC312_AES_IV_1_0_REG_CC312_AES_IV_1_0_Pos (0UL) /*!< CC312_AES_IV_1_0 (Bit 0) */ + #define CC312_CC312_AES_IV_1_0_REG_CC312_AES_IV_1_0_Msk (0xffffffffUL) /*!< CC312_AES_IV_1_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_IV_1_1_REG ================================================== */ + #define CC312_CC312_AES_IV_1_1_REG_CC312_AES_IV_1_1_Pos (0UL) /*!< CC312_AES_IV_1_1 (Bit 0) */ + #define CC312_CC312_AES_IV_1_1_REG_CC312_AES_IV_1_1_Msk (0xffffffffUL) /*!< CC312_AES_IV_1_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_IV_1_2_REG ================================================== */ + #define CC312_CC312_AES_IV_1_2_REG_CC312_AES_IV_1_2_Pos (0UL) /*!< CC312_AES_IV_1_2 (Bit 0) */ + #define CC312_CC312_AES_IV_1_2_REG_CC312_AES_IV_1_2_Msk (0xffffffffUL) /*!< CC312_AES_IV_1_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_IV_1_3_REG ================================================== */ + #define CC312_CC312_AES_IV_1_3_REG_CC312_AES_IV_1_3_Pos (0UL) /*!< CC312_AES_IV_1_3 (Bit 0) */ + #define CC312_CC312_AES_IV_1_3_REG_CC312_AES_IV_1_3_Msk (0xffffffffUL) /*!< CC312_AES_IV_1_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_0_0_REG ================================================= */ + #define CC312_CC312_AES_KEY_0_0_REG_CC312_AES_KEY_0_0_Pos (0UL) /*!< CC312_AES_KEY_0_0 (Bit 0) */ + #define CC312_CC312_AES_KEY_0_0_REG_CC312_AES_KEY_0_0_Msk (0xffffffffUL) /*!< CC312_AES_KEY_0_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_0_1_REG ================================================= */ + #define CC312_CC312_AES_KEY_0_1_REG_CC312_AES_KEY_0_1_Pos (0UL) /*!< CC312_AES_KEY_0_1 (Bit 0) */ + #define CC312_CC312_AES_KEY_0_1_REG_CC312_AES_KEY_0_1_Msk (0xffffffffUL) /*!< CC312_AES_KEY_0_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_0_2_REG ================================================= */ + #define CC312_CC312_AES_KEY_0_2_REG_CC312_AES_KEY_0_2_Pos (0UL) /*!< CC312_AES_KEY_0_2 (Bit 0) */ + #define CC312_CC312_AES_KEY_0_2_REG_CC312_AES_KEY_0_2_Msk (0xffffffffUL) /*!< CC312_AES_KEY_0_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_0_3_REG ================================================= */ + #define CC312_CC312_AES_KEY_0_3_REG_CC312_AES_KEY_0_3_Pos (0UL) /*!< CC312_AES_KEY_0_3 (Bit 0) */ + #define CC312_CC312_AES_KEY_0_3_REG_CC312_AES_KEY_0_3_Msk (0xffffffffUL) /*!< CC312_AES_KEY_0_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_0_4_REG ================================================= */ + #define CC312_CC312_AES_KEY_0_4_REG_CC312_AES_KEY_0_4_Pos (0UL) /*!< CC312_AES_KEY_0_4 (Bit 0) */ + #define CC312_CC312_AES_KEY_0_4_REG_CC312_AES_KEY_0_4_Msk (0xffffffffUL) /*!< CC312_AES_KEY_0_4 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_0_5_REG ================================================= */ + #define CC312_CC312_AES_KEY_0_5_REG_CC312_AES_KEY_0_5_Pos (0UL) /*!< CC312_AES_KEY_0_5 (Bit 0) */ + #define CC312_CC312_AES_KEY_0_5_REG_CC312_AES_KEY_0_5_Msk (0xffffffffUL) /*!< CC312_AES_KEY_0_5 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_0_6_REG ================================================= */ + #define CC312_CC312_AES_KEY_0_6_REG_CC312_AES_KEY_0_6_Pos (0UL) /*!< CC312_AES_KEY_0_6 (Bit 0) */ + #define CC312_CC312_AES_KEY_0_6_REG_CC312_AES_KEY_0_6_Msk (0xffffffffUL) /*!< CC312_AES_KEY_0_6 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_0_7_REG ================================================= */ + #define CC312_CC312_AES_KEY_0_7_REG_CC312_AES_KEY_0_7_Pos (0UL) /*!< CC312_AES_KEY_0_7 (Bit 0) */ + #define CC312_CC312_AES_KEY_0_7_REG_CC312_AES_KEY_0_7_Msk (0xffffffffUL) /*!< CC312_AES_KEY_0_7 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_1_0_REG ================================================= */ + #define CC312_CC312_AES_KEY_1_0_REG_CC312_AES_KEY_1_0_Pos (0UL) /*!< CC312_AES_KEY_1_0 (Bit 0) */ + #define CC312_CC312_AES_KEY_1_0_REG_CC312_AES_KEY_1_0_Msk (0xffffffffUL) /*!< CC312_AES_KEY_1_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_1_1_REG ================================================= */ + #define CC312_CC312_AES_KEY_1_1_REG_CC312_AES_KEY_1_1_Pos (0UL) /*!< CC312_AES_KEY_1_1 (Bit 0) */ + #define CC312_CC312_AES_KEY_1_1_REG_CC312_AES_KEY_1_1_Msk (0xffffffffUL) /*!< CC312_AES_KEY_1_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_1_2_REG ================================================= */ + #define CC312_CC312_AES_KEY_1_2_REG_CC312_AES_KEY_1_2_Pos (0UL) /*!< CC312_AES_KEY_1_2 (Bit 0) */ + #define CC312_CC312_AES_KEY_1_2_REG_CC312_AES_KEY_1_2_Msk (0xffffffffUL) /*!< CC312_AES_KEY_1_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_1_3_REG ================================================= */ + #define CC312_CC312_AES_KEY_1_3_REG_CC312_AES_KEY_1_3_Pos (0UL) /*!< CC312_AES_KEY_1_3 (Bit 0) */ + #define CC312_CC312_AES_KEY_1_3_REG_CC312_AES_KEY_1_3_Msk (0xffffffffUL) /*!< CC312_AES_KEY_1_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_1_4_REG ================================================= */ + #define CC312_CC312_AES_KEY_1_4_REG_CC312_AES_KEY_1_4_Pos (0UL) /*!< CC312_AES_KEY_1_4 (Bit 0) */ + #define CC312_CC312_AES_KEY_1_4_REG_CC312_AES_KEY_1_4_Msk (0xffffffffUL) /*!< CC312_AES_KEY_1_4 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_1_5_REG ================================================= */ + #define CC312_CC312_AES_KEY_1_5_REG_CC312_AES_KEY_1_5_Pos (0UL) /*!< CC312_AES_KEY_1_5 (Bit 0) */ + #define CC312_CC312_AES_KEY_1_5_REG_CC312_AES_KEY_1_5_Msk (0xffffffffUL) /*!< CC312_AES_KEY_1_5 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_1_6_REG ================================================= */ + #define CC312_CC312_AES_KEY_1_6_REG_CC312_AES_KEY_1_6_Pos (0UL) /*!< CC312_AES_KEY_1_6 (Bit 0) */ + #define CC312_CC312_AES_KEY_1_6_REG_CC312_AES_KEY_1_6_Msk (0xffffffffUL) /*!< CC312_AES_KEY_1_6 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_AES_KEY_1_7_REG ================================================= */ + #define CC312_CC312_AES_KEY_1_7_REG_CC312_AES_KEY_1_7_Pos (0UL) /*!< CC312_AES_KEY_1_7 (Bit 0) */ + #define CC312_CC312_AES_KEY_1_7_REG_CC312_AES_KEY_1_7_Msk (0xffffffffUL) /*!< CC312_AES_KEY_1_7 (Bitfield-Mask: 0xffffffff) */ +/* ============================================= CC312_AES_REMAINING_BYTES_REG ============================================= */ + #define CC312_CC312_AES_REMAINING_BYTES_REG_CC312_AES_REMAINING_BYTES_Pos (0UL) /*!< CC312_AES_REMAINING_BYTES (Bit 0) */ + #define CC312_CC312_AES_REMAINING_BYTES_REG_CC312_AES_REMAINING_BYTES_Msk (0xffffffffUL) /*!< CC312_AES_REMAINING_BYTES (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_AES_SK1_REG =================================================== */ + #define CC312_CC312_AES_SK1_REG_CC312_AES_SK1_Pos (0UL) /*!< CC312_AES_SK1 (Bit 0) */ + #define CC312_CC312_AES_SK1_REG_CC312_AES_SK1_Msk (0x1UL) /*!< CC312_AES_SK1 (Bitfield-Mask: 0x01) */ +/* =================================================== CC312_AES_SK_REG ==================================================== */ + #define CC312_CC312_AES_SK_REG_CC312_AES_SK_Pos (0UL) /*!< CC312_AES_SK (Bit 0) */ + #define CC312_CC312_AES_SK_REG_CC312_AES_SK_Msk (0x1UL) /*!< CC312_AES_SK (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_AHBM_HMASTLOCK_REG ================================================ */ + #define CC312_CC312_AHBM_HMASTLOCK_REG_CC312_AHB_HMASTLOCK_Pos (0UL) /*!< CC312_AHB_HMASTLOCK (Bit 0) */ + #define CC312_CC312_AHBM_HMASTLOCK_REG_CC312_AHB_HMASTLOCK_Msk (0x1UL) /*!< CC312_AHB_HMASTLOCK (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_AHBM_HNONSEC_REG ================================================= */ + #define CC312_CC312_AHBM_HNONSEC_REG_CC312_AHB_READ_HNONSEC_Pos (1UL) /*!< CC312_AHB_READ_HNONSEC (Bit 1) */ + #define CC312_CC312_AHBM_HNONSEC_REG_CC312_AHB_READ_HNONSEC_Msk (0x2UL) /*!< CC312_AHB_READ_HNONSEC (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AHBM_HNONSEC_REG_CC312_AHB_WRITE_HNONSEC_Pos (0UL) /*!< CC312_AHB_WRITE_HNONSEC (Bit 0) */ + #define CC312_CC312_AHBM_HNONSEC_REG_CC312_AHB_WRITE_HNONSEC_Msk (0x1UL) /*!< CC312_AHB_WRITE_HNONSEC (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_AHBM_HPROT_REG ================================================== */ + #define CC312_CC312_AHBM_HPROT_REG_CC312_AHB_PROT_Pos (0UL) /*!< CC312_AHB_PROT (Bit 0) */ + #define CC312_CC312_AHBM_HPROT_REG_CC312_AHB_PROT_Msk (0xfUL) /*!< CC312_AHB_PROT (Bitfield-Mask: 0x0f) */ +/* ================================================ CC312_AHBM_SINGLES_REG ================================================= */ + #define CC312_CC312_AHBM_SINGLES_REG_CC312_AHB_SINGLES_Pos (0UL) /*!< CC312_AHB_SINGLES (Bit 0) */ + #define CC312_CC312_AHBM_SINGLES_REG_CC312_AHB_SINGLES_Msk (0x1UL) /*!< CC312_AHB_SINGLES (Bitfield-Mask: 0x01) */ +/* =========================================== CC312_AIB_FUSE_PROG_COMPLETED_REG =========================================== */ + #define CC312_CC312_AIB_FUSE_PROG_COMPLETED_REG_CC312_AIB_FUSE_PROG_COMPLETED_Pos (0UL) /*!< CC312_AIB_FUSE_PROG_COMPLETED (Bit 0) */ + #define CC312_CC312_AIB_FUSE_PROG_COMPLETED_REG_CC312_AIB_FUSE_PROG_COMPLETED_Msk (0x1UL) /*!< CC312_AIB_FUSE_PROG_COMPLETED (Bitfield-Mask: 0x01) */ +/* ============================================== CC312_AO_APB_FILTERING_REG =============================================== */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_INST_ACCESS_ALLOW_LOCK_Pos (9UL) /*!< CC312_APBC_ONLY_INST_ACCESS_ALLOW_LOCK (Bit 9) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_INST_ACCESS_ALLOW_LOCK_Msk (0x200UL) /*!< CC312_APBC_ONLY_INST_ACCESS_ALLOW_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_INST_ACCESS_ALLOW_Pos (8UL) /*!< CC312_APBC_ONLY_INST_ACCESS_ALLOW (Bit 8) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_INST_ACCESS_ALLOW_Msk (0x100UL) /*!< CC312_APBC_ONLY_INST_ACCESS_ALLOW (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_PRIV_ACCESS_ALLOW_LOCK_Pos (7UL) /*!< CC312_APBC_ONLY_PRIV_ACCESS_ALLOW_LOCK (Bit 7) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_PRIV_ACCESS_ALLOW_LOCK_Msk (0x80UL) /*!< CC312_APBC_ONLY_PRIV_ACCESS_ALLOW_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_PRIV_ACCESS_ALLOW_Pos (6UL) /*!< CC312_APBC_ONLY_PRIV_ACCESS_ALLOW (Bit 6) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_PRIV_ACCESS_ALLOW_Msk (0x40UL) /*!< CC312_APBC_ONLY_PRIV_ACCESS_ALLOW (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_SEC_ACCESS_ALLOW_LOCK_Pos (5UL) /*!< CC312_APBC_ONLY_SEC_ACCESS_ALLOW_LOCK (Bit 5) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_SEC_ACCESS_ALLOW_LOCK_Msk (0x20UL) /*!< CC312_APBC_ONLY_SEC_ACCESS_ALLOW_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_SEC_ACCESS_ALLOW_Pos (4UL) /*!< CC312_APBC_ONLY_SEC_ACCESS_ALLOW (Bit 4) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_APBC_ONLY_SEC_ACCESS_ALLOW_Msk (0x10UL) /*!< CC312_APBC_ONLY_SEC_ACCESS_ALLOW (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_ONLY_PRIV_ACCESS_ALLOW_LOCK_Pos (3UL) /*!< CC312_ONLY_PRIV_ACCESS_ALLOW_LOCK (Bit 3) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_ONLY_PRIV_ACCESS_ALLOW_LOCK_Msk (0x8UL) /*!< CC312_ONLY_PRIV_ACCESS_ALLOW_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_ONLY_PRIV_ACCESS_ALLOW_Pos (2UL) /*!< CC312_ONLY_PRIV_ACCESS_ALLOW (Bit 2) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_ONLY_PRIV_ACCESS_ALLOW_Msk (0x4UL) /*!< CC312_ONLY_PRIV_ACCESS_ALLOW (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_ONLY_SEC_ACCESS_ALLOW_LOCK_Pos (1UL) /*!< CC312_ONLY_SEC_ACCESS_ALLOW_LOCK (Bit 1) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_ONLY_SEC_ACCESS_ALLOW_LOCK_Msk (0x2UL) /*!< CC312_ONLY_SEC_ACCESS_ALLOW_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_ONLY_SEC_ACCESS_ALLOW_Pos (0UL) /*!< CC312_ONLY_SEC_ACCESS_ALLOW (Bit 0) */ + #define CC312_CC312_AO_APB_FILTERING_REG_CC312_ONLY_SEC_ACCESS_ALLOW_Msk (0x1UL) /*!< CC312_ONLY_SEC_ACCESS_ALLOW (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_AO_CC_GPPC_REG ================================================== */ + #define CC312_CC312_AO_CC_GPPC_REG_CC312_AO_CC_GPPC_Pos (0UL) /*!< CC312_AO_CC_GPPC (Bit 0) */ + #define CC312_CC312_AO_CC_GPPC_REG_CC312_AO_CC_GPPC_Msk (0xffUL) /*!< CC312_AO_CC_GPPC (Bitfield-Mask: 0xff) */ +/* ============================================ CC312_AO_CC_SEC_DEBUG_RESET_REG ============================================ */ + #define CC312_CC312_AO_CC_SEC_DEBUG_RESET_REG_CC312_AO_CC_SEC_DEBUG_RESET_Pos (0UL) /*!< CC312_AO_CC_SEC_DEBUG_RESET (Bit 0) */ + #define CC312_CC312_AO_CC_SEC_DEBUG_RESET_REG_CC312_AO_CC_SEC_DEBUG_RESET_Msk (0x1UL) /*!< CC312_AO_CC_SEC_DEBUG_RESET (Bitfield-Mask: 0x01) */ +/* ======================================== CC312_AO_ICV_DCU_RESTRICTION_MASK0_REG ========================================= */ + #define CC312_CC312_AO_ICV_DCU_RESTRICTION_MASK0_REG_CC312_AO_ICV_DCU_RESTRICTION_MASK0_Pos (0UL) /*!< CC312_AO_ICV_DCU_RESTRICTION_MASK0 (Bit 0) */ + #define CC312_CC312_AO_ICV_DCU_RESTRICTION_MASK0_REG_CC312_AO_ICV_DCU_RESTRICTION_MASK0_Msk (0xffffffffUL) /*!< CC312_AO_ICV_DCU_RESTRICTION_MASK0 (Bitfield-Mask: 0xffffffff) */ +/* ======================================== CC312_AO_ICV_DCU_RESTRICTION_MASK1_REG ========================================= */ + #define CC312_CC312_AO_ICV_DCU_RESTRICTION_MASK1_REG_CC312_AO_ICV_DCU_RESTRICTION_MASK1_Pos (0UL) /*!< CC312_AO_ICV_DCU_RESTRICTION_MASK1 (Bit 0) */ + #define CC312_CC312_AO_ICV_DCU_RESTRICTION_MASK1_REG_CC312_AO_ICV_DCU_RESTRICTION_MASK1_Msk (0xffffffffUL) /*!< CC312_AO_ICV_DCU_RESTRICTION_MASK1 (Bitfield-Mask: 0xffffffff) */ +/* ======================================== CC312_AO_ICV_DCU_RESTRICTION_MASK2_REG ========================================= */ + #define CC312_CC312_AO_ICV_DCU_RESTRICTION_MASK2_REG_CC312_AO_ICV_DCU_RESTRICTION_MASK2_Pos (0UL) /*!< CC312_AO_ICV_DCU_RESTRICTION_MASK2 (Bit 0) */ + #define CC312_CC312_AO_ICV_DCU_RESTRICTION_MASK2_REG_CC312_AO_ICV_DCU_RESTRICTION_MASK2_Msk (0xffffffffUL) /*!< CC312_AO_ICV_DCU_RESTRICTION_MASK2 (Bitfield-Mask: 0xffffffff) */ +/* ======================================== CC312_AO_ICV_DCU_RESTRICTION_MASK3_REG ========================================= */ + #define CC312_CC312_AO_ICV_DCU_RESTRICTION_MASK3_REG_CC312_AO_ICV_DCU_RESTRICTION_MASK3_Pos (0UL) /*!< CC312_AO_ICV_DCU_RESTRICTION_MASK3 (Bit 0) */ + #define CC312_CC312_AO_ICV_DCU_RESTRICTION_MASK3_REG_CC312_AO_ICV_DCU_RESTRICTION_MASK3_Msk (0xffffffffUL) /*!< CC312_AO_ICV_DCU_RESTRICTION_MASK3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================= CC312_AUTOCORR_STATISTIC_REG ============================================== */ + #define CC312_CC312_AUTOCORR_STATISTIC_REG_CC312_AUTOCORR_FAILS_Pos (14UL) /*!< CC312_AUTOCORR_FAILS (Bit 14) */ + #define CC312_CC312_AUTOCORR_STATISTIC_REG_CC312_AUTOCORR_FAILS_Msk (0x3fc000UL) /*!< CC312_AUTOCORR_FAILS (Bitfield-Mask: 0xff) */ + #define CC312_CC312_AUTOCORR_STATISTIC_REG_CC312_AUTOCORR_TRYS_Pos (0UL) /*!< CC312_AUTOCORR_TRYS (Bit 0) */ + #define CC312_CC312_AUTOCORR_STATISTIC_REG_CC312_AUTOCORR_TRYS_Msk (0x3fffUL) /*!< CC312_AUTOCORR_TRYS (Bitfield-Mask: 0x3fff) */ +/* =============================================== CC312_AUTO_HW_PADDING_REG =============================================== */ + #define CC312_CC312_AUTO_HW_PADDING_REG_CC312_AUTO_HW_PADDING_EN_Pos (0UL) /*!< CC312_AUTO_HW_PADDING_EN (Bit 0) */ + #define CC312_CC312_AUTO_HW_PADDING_REG_CC312_AUTO_HW_PADDING_EN_Msk (0x1UL) /*!< CC312_AUTO_HW_PADDING_EN (Bitfield-Mask: 0x01) */ +/* ============================================ CC312_CHACHA_BLOCK_CNT_LSB_REG ============================================= */ + #define CC312_CC312_CHACHA_BLOCK_CNT_LSB_REG_CC312_CHACHA_BLOCK_CNT_LSB_Pos (0UL) /*!< CC312_CHACHA_BLOCK_CNT_LSB (Bit 0) */ + #define CC312_CC312_CHACHA_BLOCK_CNT_LSB_REG_CC312_CHACHA_BLOCK_CNT_LSB_Msk (0xffffffffUL) /*!< CC312_CHACHA_BLOCK_CNT_LSB (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_CHACHA_BLOCK_CNT_MSB_REG ============================================= */ + #define CC312_CC312_CHACHA_BLOCK_CNT_MSB_REG_CC312_CHACHA_BLOCK_CNT_MSB_Pos (0UL) /*!< CC312_CHACHA_BLOCK_CNT_MSB (Bit 0) */ + #define CC312_CC312_CHACHA_BLOCK_CNT_MSB_REG_CC312_CHACHA_BLOCK_CNT_MSB_Msk (0xffffffffUL) /*!< CC312_CHACHA_BLOCK_CNT_MSB (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_BUSY_REG ================================================= */ + #define CC312_CC312_CHACHA_BUSY_REG_CC312_CHACHA_BUSY_Pos (0UL) /*!< CC312_CHACHA_BUSY (Bit 0) */ + #define CC312_CC312_CHACHA_BUSY_REG_CC312_CHACHA_BUSY_Msk (0x1UL) /*!< CC312_CHACHA_BUSY (Bitfield-Mask: 0x01) */ +/* ======================================= CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG ======================================= */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_DOUT_BYTE_ORDER_Pos (4UL) /*!< CC312_CHACHA_DOUT_BYTE_ORDER (Bit 4) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_DOUT_BYTE_ORDER_Msk (0x10UL) /*!< CC312_CHACHA_DOUT_BYTE_ORDER (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_DOUT_WORD_ORDER_Pos (3UL) /*!< CC312_CHACHA_DOUT_WORD_ORDER (Bit 3) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_DOUT_WORD_ORDER_Msk (0x8UL) /*!< CC312_CHACHA_DOUT_WORD_ORDER (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_CORE_MATRIX_LBE_ORDER_Pos (2UL) /*!< CC312_CHACHA_CORE_MATRIX_LBE_ORDER (Bit 2) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_CORE_MATRIX_LBE_ORDER_Msk (0x4UL) /*!< CC312_CHACHA_CORE_MATRIX_LBE_ORDER (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_DIN_BYTE_ORDER_Pos (1UL) /*!< CC312_CHACHA_DIN_BYTE_ORDER (Bit 1) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_DIN_BYTE_ORDER_Msk (0x2UL) /*!< CC312_CHACHA_DIN_BYTE_ORDER (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_DIN_WORD_ORDER_Pos (0UL) /*!< CC312_CHACHA_DIN_WORD_ORDER (Bit 0) */ + #define CC312_CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG_CC312_CHACHA_DIN_WORD_ORDER_Msk (0x1UL) /*!< CC312_CHACHA_DIN_WORD_ORDER (Bitfield-Mask: 0x01) */ +/* ============================================== CC312_CHACHA_CLK_ENABLE_REG ============================================== */ + #define CC312_CC312_CHACHA_CLK_ENABLE_REG_CC312_CHACHA_CLK_EN_Pos (0UL) /*!< CC312_CHACHA_CLK_EN (Bit 0) */ + #define CC312_CC312_CHACHA_CLK_ENABLE_REG_CC312_CHACHA_CLK_EN_Msk (0x1UL) /*!< CC312_CHACHA_CLK_EN (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_CHACHA_CONTROL_REG_REG ============================================== */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_USE_IV_96BIT_Pos (10UL) /*!< CC312_USE_IV_96BIT (Bit 10) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_USE_IV_96BIT_Msk (0x400UL) /*!< CC312_USE_IV_96BIT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_RESET_BLOCK_CNT_Pos (9UL) /*!< CC312_RESET_BLOCK_CNT (Bit 9) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_RESET_BLOCK_CNT_Msk (0x200UL) /*!< CC312_RESET_BLOCK_CNT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_NUM_OF_ROUNDS_Pos (4UL) /*!< CC312_NUM_OF_ROUNDS (Bit 4) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_NUM_OF_ROUNDS_Msk (0x30UL) /*!< CC312_NUM_OF_ROUNDS (Bitfield-Mask: 0x03) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_KEY_LEN_Pos (3UL) /*!< CC312_KEY_LEN (Bit 3) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_KEY_LEN_Msk (0x8UL) /*!< CC312_KEY_LEN (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_CALC_KEY_FOR_POLY1305_Pos (2UL) /*!< CC312_CALC_KEY_FOR_POLY1305 (Bit 2) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_CALC_KEY_FOR_POLY1305_Msk (0x4UL) /*!< CC312_CALC_KEY_FOR_POLY1305 (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_INIT_FROM_HOST_Pos (1UL) /*!< CC312_INIT_FROM_HOST (Bit 1) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_INIT_FROM_HOST_Msk (0x2UL) /*!< CC312_INIT_FROM_HOST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_CHACHA_OR_SALSA_Pos (0UL) /*!< CC312_CHACHA_OR_SALSA (Bit 0) */ + #define CC312_CC312_CHACHA_CONTROL_REG_REG_CC312_CHACHA_OR_SALSA_Msk (0x1UL) /*!< CC312_CHACHA_OR_SALSA (Bitfield-Mask: 0x01) */ +/* ============================================== CC312_CHACHA_DEBUG_REG_REG =============================================== */ + #define CC312_CC312_CHACHA_DEBUG_REG_REG_CC312_CHACHA_DEBUG_FSM_STATE_Pos (0UL) /*!< CC312_CHACHA_DEBUG_FSM_STATE (Bit 0) */ + #define CC312_CC312_CHACHA_DEBUG_REG_REG_CC312_CHACHA_DEBUG_FSM_STATE_Msk (0x3UL) /*!< CC312_CHACHA_DEBUG_FSM_STATE (Bitfield-Mask: 0x03) */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY0_REG ============================================= */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY0_REG_CC312_CHACHA_FOR_POLY_KEY0_Pos (0UL) /*!< CC312_CHACHA_FOR_POLY_KEY0 (Bit 0) */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY0_REG_CC312_CHACHA_FOR_POLY_KEY0_Msk (0xffffffffUL) /*!< CC312_CHACHA_FOR_POLY_KEY0 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY1_REG ============================================= */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY1_REG_CC312_CHACHA_FOR_POLY_KEY1_Pos (0UL) /*!< CC312_CHACHA_FOR_POLY_KEY1 (Bit 0) */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY1_REG_CC312_CHACHA_FOR_POLY_KEY1_Msk (0xffffffffUL) /*!< CC312_CHACHA_FOR_POLY_KEY1 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY2_REG ============================================= */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY2_REG_CC312_CHACHA_FOR_POLY_KEY2_Pos (0UL) /*!< CC312_CHACHA_FOR_POLY_KEY2 (Bit 0) */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY2_REG_CC312_CHACHA_FOR_POLY_KEY2_Msk (0xffffffffUL) /*!< CC312_CHACHA_FOR_POLY_KEY2 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY3_REG ============================================= */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY3_REG_CC312_CHACHA_FOR_POLY_KEY3_Pos (0UL) /*!< CC312_CHACHA_FOR_POLY_KEY3 (Bit 0) */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY3_REG_CC312_CHACHA_FOR_POLY_KEY3_Msk (0xffffffffUL) /*!< CC312_CHACHA_FOR_POLY_KEY3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY4_REG ============================================= */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY4_REG_CC312_CHACHA_FOR_POLY_KEY4_Pos (0UL) /*!< CC312_CHACHA_FOR_POLY_KEY4 (Bit 0) */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY4_REG_CC312_CHACHA_FOR_POLY_KEY4_Msk (0xffffffffUL) /*!< CC312_CHACHA_FOR_POLY_KEY4 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY5_REG ============================================= */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY5_REG_CC312_CHACHA_FOR_POLY_KEY5_Pos (0UL) /*!< CC312_CHACHA_FOR_POLY_KEY5 (Bit 0) */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY5_REG_CC312_CHACHA_FOR_POLY_KEY5_Msk (0xffffffffUL) /*!< CC312_CHACHA_FOR_POLY_KEY5 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY6_REG ============================================= */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY6_REG_CC312_CHACHA_FOR_POLY_KEY6_Pos (0UL) /*!< CC312_CHACHA_FOR_POLY_KEY6 (Bit 0) */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY6_REG_CC312_CHACHA_FOR_POLY_KEY6_Msk (0xffffffffUL) /*!< CC312_CHACHA_FOR_POLY_KEY6 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY7_REG ============================================= */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY7_REG_CC312_CHACHA_FOR_POLY_KEY7_Pos (0UL) /*!< CC312_CHACHA_FOR_POLY_KEY7 (Bit 0) */ + #define CC312_CC312_CHACHA_FOR_POLY_KEY7_REG_CC312_CHACHA_FOR_POLY_KEY7_Msk (0xffffffffUL) /*!< CC312_CHACHA_FOR_POLY_KEY7 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_CHACHA_HW_FLAGS_REG =============================================== */ + #define CC312_CC312_CHACHA_HW_FLAGS_REG_CC312_FAST_CHACHA_Pos (2UL) /*!< CC312_FAST_CHACHA (Bit 2) */ + #define CC312_CC312_CHACHA_HW_FLAGS_REG_CC312_FAST_CHACHA_Msk (0x4UL) /*!< CC312_FAST_CHACHA (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_HW_FLAGS_REG_CC312_SALSA_EXISTS_Pos (1UL) /*!< CC312_SALSA_EXISTS (Bit 1) */ + #define CC312_CC312_CHACHA_HW_FLAGS_REG_CC312_SALSA_EXISTS_Msk (0x2UL) /*!< CC312_SALSA_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CHACHA_HW_FLAGS_REG_CC312_CHACHA_EXISTS_Pos (0UL) /*!< CC312_CHACHA_EXISTS (Bit 0) */ + #define CC312_CC312_CHACHA_HW_FLAGS_REG_CC312_CHACHA_EXISTS_Msk (0x1UL) /*!< CC312_CHACHA_EXISTS (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_CHACHA_IV_0_REG ================================================= */ + #define CC312_CC312_CHACHA_IV_0_REG_CC312_CHACHA_IV_0_Pos (0UL) /*!< CC312_CHACHA_IV_0 (Bit 0) */ + #define CC312_CC312_CHACHA_IV_0_REG_CC312_CHACHA_IV_0_Msk (0xffffffffUL) /*!< CC312_CHACHA_IV_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_IV_1_REG ================================================= */ + #define CC312_CC312_CHACHA_IV_1_REG_CC312_CHACHA_IV_1_Pos (0UL) /*!< CC312_CHACHA_IV_1 (Bit 0) */ + #define CC312_CC312_CHACHA_IV_1_REG_CC312_CHACHA_IV_1_Msk (0xffffffffUL) /*!< CC312_CHACHA_IV_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_KEY0_REG ================================================= */ + #define CC312_CC312_CHACHA_KEY0_REG_CC312_CHACHA_KEY0_Pos (0UL) /*!< CC312_CHACHA_KEY0 (Bit 0) */ + #define CC312_CC312_CHACHA_KEY0_REG_CC312_CHACHA_KEY0_Msk (0xffffffffUL) /*!< CC312_CHACHA_KEY0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_KEY1_REG ================================================= */ + #define CC312_CC312_CHACHA_KEY1_REG_CC312_CHACHA_KEY1_Pos (0UL) /*!< CC312_CHACHA_KEY1 (Bit 0) */ + #define CC312_CC312_CHACHA_KEY1_REG_CC312_CHACHA_KEY1_Msk (0xffffffffUL) /*!< CC312_CHACHA_KEY1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_KEY2_REG ================================================= */ + #define CC312_CC312_CHACHA_KEY2_REG_CC312_CHACHA_KEY2_Pos (0UL) /*!< CC312_CHACHA_KEY2 (Bit 0) */ + #define CC312_CC312_CHACHA_KEY2_REG_CC312_CHACHA_KEY2_Msk (0xffffffffUL) /*!< CC312_CHACHA_KEY2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_KEY3_REG ================================================= */ + #define CC312_CC312_CHACHA_KEY3_REG_CC312_CHACHA_KEY3_Pos (0UL) /*!< CC312_CHACHA_KEY3 (Bit 0) */ + #define CC312_CC312_CHACHA_KEY3_REG_CC312_CHACHA_KEY3_Msk (0xffffffffUL) /*!< CC312_CHACHA_KEY3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_KEY4_REG ================================================= */ + #define CC312_CC312_CHACHA_KEY4_REG_CC312_CHACHA_KEY4_Pos (0UL) /*!< CC312_CHACHA_KEY4 (Bit 0) */ + #define CC312_CC312_CHACHA_KEY4_REG_CC312_CHACHA_KEY4_Msk (0xffffffffUL) /*!< CC312_CHACHA_KEY4 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_KEY5_REG ================================================= */ + #define CC312_CC312_CHACHA_KEY5_REG_CC312_CHACHA_KEY5_Pos (0UL) /*!< CC312_CHACHA_KEY5 (Bit 0) */ + #define CC312_CC312_CHACHA_KEY5_REG_CC312_CHACHA_KEY5_Msk (0xffffffffUL) /*!< CC312_CHACHA_KEY5 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_KEY6_REG ================================================= */ + #define CC312_CC312_CHACHA_KEY6_REG_CC312_CHACHA_KEY6_Pos (0UL) /*!< CC312_CHACHA_KEY6 (Bit 0) */ + #define CC312_CC312_CHACHA_KEY6_REG_CC312_CHACHA_KEY6_Msk (0xffffffffUL) /*!< CC312_CHACHA_KEY6 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CHACHA_KEY7_REG ================================================= */ + #define CC312_CC312_CHACHA_KEY7_REG_CC312_CHACHA_KEY7_Pos (0UL) /*!< CC312_CHACHA_KEY7 (Bit 0) */ + #define CC312_CC312_CHACHA_KEY7_REG_CC312_CHACHA_KEY7_Msk (0xffffffffUL) /*!< CC312_CHACHA_KEY7 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_CHACHA_SW_RESET_REG =============================================== */ + #define CC312_CC312_CHACHA_SW_RESET_REG_CC312_CHACH_SW_RESET_Pos (0UL) /*!< CC312_CHACH_SW_RESET (Bit 0) */ + #define CC312_CC312_CHACHA_SW_RESET_REG_CC312_CHACH_SW_RESET_Msk (0x1UL) /*!< CC312_CHACH_SW_RESET (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_CHACHA_VERSION_REG ================================================ */ + #define CC312_CC312_CHACHA_VERSION_REG_CC312_CHACHA_VERSION_Pos (0UL) /*!< CC312_CHACHA_VERSION (Bit 0) */ + #define CC312_CC312_CHACHA_VERSION_REG_CC312_CHACHA_VERSION_Msk (0xffffffffUL) /*!< CC312_CHACHA_VERSION (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_CLK_STATUS_REG ================================================== */ + #define CC312_CC312_CLK_STATUS_REG_CC312_DMA_CLK_STATUS_Pos (8UL) /*!< CC312_DMA_CLK_STATUS (Bit 8) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_DMA_CLK_STATUS_Msk (0x100UL) /*!< CC312_DMA_CLK_STATUS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_CHACHA_CLK_STATUS_Pos (7UL) /*!< CC312_CHACHA_CLK_STATUS (Bit 7) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_CHACHA_CLK_STATUS_Msk (0x80UL) /*!< CC312_CHACHA_CLK_STATUS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_PKA_CLK_STATUS_Pos (3UL) /*!< CC312_PKA_CLK_STATUS (Bit 3) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_PKA_CLK_STATUS_Msk (0x8UL) /*!< CC312_PKA_CLK_STATUS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_HASH_CLK_STATUS_Pos (2UL) /*!< CC312_HASH_CLK_STATUS (Bit 2) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_HASH_CLK_STATUS_Msk (0x4UL) /*!< CC312_HASH_CLK_STATUS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_AES_CLK_STATUS_Pos (0UL) /*!< CC312_AES_CLK_STATUS (Bit 0) */ + #define CC312_CC312_CLK_STATUS_REG_CC312_AES_CLK_STATUS_Msk (0x1UL) /*!< CC312_AES_CLK_STATUS (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_COMPONENT_ID_0_REG ================================================ */ + #define CC312_CC312_COMPONENT_ID_0_REG_CC312_PRMBL_0_Pos (0UL) /*!< CC312_PRMBL_0 (Bit 0) */ + #define CC312_CC312_COMPONENT_ID_0_REG_CC312_PRMBL_0_Msk (0xffUL) /*!< CC312_PRMBL_0 (Bitfield-Mask: 0xff) */ +/* =============================================== CC312_COMPONENT_ID_1_REG ================================================ */ + #define CC312_CC312_COMPONENT_ID_1_REG_CC312_CLASS_Pos (4UL) /*!< CC312_CLASS (Bit 4) */ + #define CC312_CC312_COMPONENT_ID_1_REG_CC312_CLASS_Msk (0xf0UL) /*!< CC312_CLASS (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_COMPONENT_ID_1_REG_CC312_PRMBL_1_Pos (0UL) /*!< CC312_PRMBL_1 (Bit 0) */ + #define CC312_CC312_COMPONENT_ID_1_REG_CC312_PRMBL_1_Msk (0xfUL) /*!< CC312_PRMBL_1 (Bitfield-Mask: 0x0f) */ +/* =============================================== CC312_COMPONENT_ID_2_REG ================================================ */ + #define CC312_CC312_COMPONENT_ID_2_REG_CC312_PRMBL_2_Pos (0UL) /*!< CC312_PRMBL_2 (Bit 0) */ + #define CC312_CC312_COMPONENT_ID_2_REG_CC312_PRMBL_2_Msk (0xffUL) /*!< CC312_PRMBL_2 (Bitfield-Mask: 0xff) */ +/* =============================================== CC312_COMPONENT_ID_3_REG ================================================ */ + #define CC312_CC312_COMPONENT_ID_3_REG_CC312_PRMBL_3_Pos (0UL) /*!< CC312_PRMBL_3 (Bit 0) */ + #define CC312_CC312_COMPONENT_ID_3_REG_CC312_PRMBL_3_Msk (0xffUL) /*!< CC312_PRMBL_3 (Bitfield-Mask: 0xff) */ +/* ================================================= CC312_CONTEXT_ID_REG ================================================== */ + #define CC312_CC312_CONTEXT_ID_REG_CC312_CONTEXT_ID_Pos (0UL) /*!< CC312_CONTEXT_ID (Bit 0) */ + #define CC312_CC312_CONTEXT_ID_REG_CC312_CONTEXT_ID_Msk (0xffUL) /*!< CC312_CONTEXT_ID (Bitfield-Mask: 0xff) */ +/* ================================================= CC312_CRYPTO_BUSY_REG ================================================= */ + #define CC312_CC312_CRYPTO_BUSY_REG_CC312_CRYPTO_BUSY_Pos (0UL) /*!< CC312_CRYPTO_BUSY (Bit 0) */ + #define CC312_CC312_CRYPTO_BUSY_REG_CC312_CRYPTO_BUSY_Msk (0x1UL) /*!< CC312_CRYPTO_BUSY (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_CRYPTO_CTL_REG ================================================== */ + #define CC312_CC312_CRYPTO_CTL_REG_CC312_MODE_Pos (0UL) /*!< CC312_MODE (Bit 0) */ + #define CC312_CC312_CRYPTO_CTL_REG_CC312_MODE_Msk (0x1fUL) /*!< CC312_MODE (Bitfield-Mask: 0x1f) */ +/* ================================================= CC312_DIN_BUFFER_REG ================================================== */ + #define CC312_CC312_DIN_BUFFER_REG_CC312_DIN_BUFFER_DATA_Pos (0UL) /*!< CC312_DIN_BUFFER_DATA (Bit 0) */ + #define CC312_CC312_DIN_BUFFER_REG_CC312_DIN_BUFFER_DATA_Msk (0xffffffffUL) /*!< CC312_DIN_BUFFER_DATA (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_DIN_CPU_DATA_SIZE_REG ============================================== */ + #define CC312_CC312_DIN_CPU_DATA_SIZE_REG_CC312_CPU_DIN_SIZE_Pos (0UL) /*!< CC312_CPU_DIN_SIZE (Bit 0) */ + #define CC312_CC312_DIN_CPU_DATA_SIZE_REG_CC312_CPU_DIN_SIZE_Msk (0xffffUL) /*!< CC312_CPU_DIN_SIZE (Bitfield-Mask: 0xffff) */ +/* ============================================== CC312_DIN_FIFO_RST_PNTR_REG ============================================== */ + #define CC312_CC312_DIN_FIFO_RST_PNTR_REG_CC312_RST_Pos (0UL) /*!< CC312_RST (Bit 0) */ + #define CC312_CC312_DIN_FIFO_RST_PNTR_REG_CC312_RST_Msk (0x1UL) /*!< CC312_RST (Bitfield-Mask: 0x01) */ +/* ============================================== CC312_DIN_MEM_DMA_BUSY_REG =============================================== */ + #define CC312_CC312_DIN_MEM_DMA_BUSY_REG_CC312_DIN_MEM_DMA_BUSY_Pos (0UL) /*!< CC312_DIN_MEM_DMA_BUSY (Bit 0) */ + #define CC312_CC312_DIN_MEM_DMA_BUSY_REG_CC312_DIN_MEM_DMA_BUSY_Msk (0x1UL) /*!< CC312_DIN_MEM_DMA_BUSY (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_DIN_SRAM_BYTES_LEN_REG ============================================== */ + #define CC312_CC312_DIN_SRAM_BYTES_LEN_REG_CC312_DIN_SRAM_BYTES_LEN_Pos (0UL) /*!< CC312_DIN_SRAM_BYTES_LEN (Bit 0) */ + #define CC312_CC312_DIN_SRAM_BYTES_LEN_REG_CC312_DIN_SRAM_BYTES_LEN_Msk (0xffffffffUL) /*!< CC312_DIN_SRAM_BYTES_LEN (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_DIN_SRAM_DMA_BUSY_REG ============================================== */ + #define CC312_CC312_DIN_SRAM_DMA_BUSY_REG_CC312_DIN_SRAM_BUSY_Pos (0UL) /*!< CC312_DIN_SRAM_BUSY (Bit 0) */ + #define CC312_CC312_DIN_SRAM_DMA_BUSY_REG_CC312_DIN_SRAM_BUSY_Msk (0x1UL) /*!< CC312_DIN_SRAM_BUSY (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_DIN_SRAM_ENDIANNESS_REG ============================================= */ + #define CC312_CC312_DIN_SRAM_ENDIANNESS_REG_CC312_SRAM_DIN_ENDIANNESS_Pos (0UL) /*!< CC312_SRAM_DIN_ENDIANNESS (Bit 0) */ + #define CC312_CC312_DIN_SRAM_ENDIANNESS_REG_CC312_SRAM_DIN_ENDIANNESS_Msk (0x1UL) /*!< CC312_SRAM_DIN_ENDIANNESS (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_DMA_CLK_ENABLE_REG ================================================ */ + #define CC312_CC312_DMA_CLK_ENABLE_REG_CC312_DMA_CLK_EN_Pos (0UL) /*!< CC312_DMA_CLK_EN (Bit 0) */ + #define CC312_CC312_DMA_CLK_ENABLE_REG_CC312_DMA_CLK_EN_Msk (0x1UL) /*!< CC312_DMA_CLK_EN (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_DOUT_BUFFER_REG ================================================= */ + #define CC312_CC312_DOUT_BUFFER_REG_CC312_DOUT_BUFFER_DATA_Pos (0UL) /*!< CC312_DOUT_BUFFER_DATA (Bit 0) */ + #define CC312_CC312_DOUT_BUFFER_REG_CC312_DOUT_BUFFER_DATA_Msk (0xffffffffUL) /*!< CC312_DOUT_BUFFER_DATA (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_DOUT_FIFO_EMPTY_REG =============================================== */ + #define CC312_CC312_DOUT_FIFO_EMPTY_REG_CC312_DOUT_FIFO_EMPTY_Pos (0UL) /*!< CC312_DOUT_FIFO_EMPTY (Bit 0) */ + #define CC312_CC312_DOUT_FIFO_EMPTY_REG_CC312_DOUT_FIFO_EMPTY_Msk (0x1UL) /*!< CC312_DOUT_FIFO_EMPTY (Bitfield-Mask: 0x01) */ +/* ============================================== CC312_DOUT_MEM_DMA_BUSY_REG ============================================== */ + #define CC312_CC312_DOUT_MEM_DMA_BUSY_REG_CC312_DOUT_MEM_DMA_BUSY_Pos (0UL) /*!< CC312_DOUT_MEM_DMA_BUSY (Bit 0) */ + #define CC312_CC312_DOUT_MEM_DMA_BUSY_REG_CC312_DOUT_MEM_DMA_BUSY_Msk (0x1UL) /*!< CC312_DOUT_MEM_DMA_BUSY (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_DOUT_SRAM_BYTES_LEN_REG ============================================= */ + #define CC312_CC312_DOUT_SRAM_BYTES_LEN_REG_CC312_DOUT_SRAM_BYTES_LEN_Pos (0UL) /*!< CC312_DOUT_SRAM_BYTES_LEN (Bit 0) */ + #define CC312_CC312_DOUT_SRAM_BYTES_LEN_REG_CC312_DOUT_SRAM_BYTES_LEN_Msk (0xffffffffUL) /*!< CC312_DOUT_SRAM_BYTES_LEN (Bitfield-Mask: 0xffffffff) */ +/* ============================================= CC312_DOUT_SRAM_DMA_BUSY_REG ============================================== */ + #define CC312_CC312_DOUT_SRAM_DMA_BUSY_REG_CC312_DOUT_SRAM_BUSY_Pos (0UL) /*!< CC312_DOUT_SRAM_BUSY (Bit 0) */ + #define CC312_CC312_DOUT_SRAM_DMA_BUSY_REG_CC312_DOUT_SRAM_BUSY_Msk (0x1UL) /*!< CC312_DOUT_SRAM_BUSY (Bitfield-Mask: 0x01) */ +/* ============================================ CC312_DOUT_SRAM_ENDIANNESS_REG ============================================= */ + #define CC312_CC312_DOUT_SRAM_ENDIANNESS_REG_CC312_DOUT_SRAM_ENDIANNESS_Pos (0UL) /*!< CC312_DOUT_SRAM_ENDIANNESS (Bit 0) */ + #define CC312_CC312_DOUT_SRAM_ENDIANNESS_REG_CC312_DOUT_SRAM_ENDIANNESS_Msk (0x1UL) /*!< CC312_DOUT_SRAM_ENDIANNESS (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_DST_LLI_WORD0_REG ================================================ */ + #define CC312_CC312_DST_LLI_WORD0_REG_CC312_DST_LLI_WORD0_Pos (0UL) /*!< CC312_DST_LLI_WORD0 (Bit 0) */ + #define CC312_CC312_DST_LLI_WORD0_REG_CC312_DST_LLI_WORD0_Msk (0xffffffffUL) /*!< CC312_DST_LLI_WORD0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_DST_LLI_WORD1_REG ================================================ */ + #define CC312_CC312_DST_LLI_WORD1_REG_CC312_DST_LLI_LAST_Pos (31UL) /*!< CC312_DST_LLI_LAST (Bit 31) */ + #define CC312_CC312_DST_LLI_WORD1_REG_CC312_DST_LLI_LAST_Msk (0x80000000UL) /*!< CC312_DST_LLI_LAST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_DST_LLI_WORD1_REG_CC312_DST_LLI_FIRST_Pos (30UL) /*!< CC312_DST_LLI_FIRST (Bit 30) */ + #define CC312_CC312_DST_LLI_WORD1_REG_CC312_DST_LLI_FIRST_Msk (0x40000000UL) /*!< CC312_DST_LLI_FIRST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_DST_LLI_WORD1_REG_CC312_DST_LLI_BYTES_NUM_Pos (0UL) /*!< CC312_DST_LLI_BYTES_NUM (Bit 0) */ + #define CC312_CC312_DST_LLI_WORD1_REG_CC312_DST_LLI_BYTES_NUM_Msk (0x3fffffffUL) /*!< CC312_DST_LLI_BYTES_NUM (Bitfield-Mask: 0x3fffffff) */ +/* ================================================= CC312_EHR_DATA_0_REG ================================================== */ + #define CC312_CC312_EHR_DATA_0_REG_CC312_EHR_DATA_0_Pos (0UL) /*!< CC312_EHR_DATA_0 (Bit 0) */ + #define CC312_CC312_EHR_DATA_0_REG_CC312_EHR_DATA_0_Msk (0xffffffffUL) /*!< CC312_EHR_DATA_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_EHR_DATA_1_REG ================================================== */ + #define CC312_CC312_EHR_DATA_1_REG_CC312_EHR_DATA_1_Pos (0UL) /*!< CC312_EHR_DATA_1 (Bit 0) */ + #define CC312_CC312_EHR_DATA_1_REG_CC312_EHR_DATA_1_Msk (0xffffffffUL) /*!< CC312_EHR_DATA_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_EHR_DATA_2_REG ================================================== */ + #define CC312_CC312_EHR_DATA_2_REG_CC312_EHR_DATA_2_Pos (0UL) /*!< CC312_EHR_DATA_2 (Bit 0) */ + #define CC312_CC312_EHR_DATA_2_REG_CC312_EHR_DATA_2_Msk (0xffffffffUL) /*!< CC312_EHR_DATA_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_EHR_DATA_3_REG ================================================== */ + #define CC312_CC312_EHR_DATA_3_REG_CC312_EHR_DATA_3_Pos (0UL) /*!< CC312_EHR_DATA_3 (Bit 0) */ + #define CC312_CC312_EHR_DATA_3_REG_CC312_EHR_DATA_3_Msk (0xffffffffUL) /*!< CC312_EHR_DATA_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_EHR_DATA_4_REG ================================================== */ + #define CC312_CC312_EHR_DATA_4_REG_CC312_EHR_DATA_4_Pos (0UL) /*!< CC312_EHR_DATA_4 (Bit 0) */ + #define CC312_CC312_EHR_DATA_4_REG_CC312_EHR_DATA_4_Msk (0xffffffffUL) /*!< CC312_EHR_DATA_4 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_EHR_DATA_5_REG ================================================== */ + #define CC312_CC312_EHR_DATA_5_REG_CC312_EHR_DATA_5_Pos (0UL) /*!< CC312_EHR_DATA_5 (Bit 0) */ + #define CC312_CC312_EHR_DATA_5_REG_CC312_EHR_DATA_5_Msk (0xffffffffUL) /*!< CC312_EHR_DATA_5 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_FIFO_IN_EMPTY_REG ================================================ */ + #define CC312_CC312_FIFO_IN_EMPTY_REG_CC312_EMPTY_Pos (0UL) /*!< CC312_EMPTY (Bit 0) */ + #define CC312_CC312_FIFO_IN_EMPTY_REG_CC312_EMPTY_Msk (0x1UL) /*!< CC312_EMPTY (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_GHASH_BUSY_REG ================================================== */ + #define CC312_CC312_GHASH_BUSY_REG_CC312_GHASH_BUSY_Pos (0UL) /*!< CC312_GHASH_BUSY (Bit 0) */ + #define CC312_CC312_GHASH_BUSY_REG_CC312_GHASH_BUSY_Msk (0x1UL) /*!< CC312_GHASH_BUSY (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_GHASH_INIT_REG ================================================== */ + #define CC312_CC312_GHASH_INIT_REG_CC312_GHASH_INIT_Pos (0UL) /*!< CC312_GHASH_INIT (Bit 0) */ + #define CC312_CC312_GHASH_INIT_REG_CC312_GHASH_INIT_Msk (0x1UL) /*!< CC312_GHASH_INIT (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_GHASH_IV_0_0_REG ================================================= */ + #define CC312_CC312_GHASH_IV_0_0_REG_CC312_GHASH_IV_0_0_Pos (0UL) /*!< CC312_GHASH_IV_0_0 (Bit 0) */ + #define CC312_CC312_GHASH_IV_0_0_REG_CC312_GHASH_IV_0_0_Msk (0xffffffffUL) /*!< CC312_GHASH_IV_0_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_GHASH_IV_0_1_REG ================================================= */ + #define CC312_CC312_GHASH_IV_0_1_REG_CC312_GHASH_IV_0_1_Pos (0UL) /*!< CC312_GHASH_IV_0_1 (Bit 0) */ + #define CC312_CC312_GHASH_IV_0_1_REG_CC312_GHASH_IV_0_1_Msk (0xffffffffUL) /*!< CC312_GHASH_IV_0_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_GHASH_IV_0_2_REG ================================================= */ + #define CC312_CC312_GHASH_IV_0_2_REG_CC312_GHASH_IV_0_2_Pos (0UL) /*!< CC312_GHASH_IV_0_2 (Bit 0) */ + #define CC312_CC312_GHASH_IV_0_2_REG_CC312_GHASH_IV_0_2_Msk (0xffffffffUL) /*!< CC312_GHASH_IV_0_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_GHASH_IV_0_3_REG ================================================= */ + #define CC312_CC312_GHASH_IV_0_3_REG_CC312_GHASH_IV_0_3_Pos (0UL) /*!< CC312_GHASH_IV_0_3 (Bit 0) */ + #define CC312_CC312_GHASH_IV_0_3_REG_CC312_GHASH_IV_0_3_Msk (0xffffffffUL) /*!< CC312_GHASH_IV_0_3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_GHASH_SUBKEY_0_0_REG =============================================== */ + #define CC312_CC312_GHASH_SUBKEY_0_0_REG_CC312_GHASH_SUBKEY_0_0_Pos (0UL) /*!< CC312_GHASH_SUBKEY_0_0 (Bit 0) */ + #define CC312_CC312_GHASH_SUBKEY_0_0_REG_CC312_GHASH_SUBKEY_0_0_Msk (0xffffffffUL) /*!< CC312_GHASH_SUBKEY_0_0 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_GHASH_SUBKEY_0_1_REG =============================================== */ + #define CC312_CC312_GHASH_SUBKEY_0_1_REG_CC312_GHASH_SUBKEY_0_1_Pos (0UL) /*!< CC312_GHASH_SUBKEY_0_1 (Bit 0) */ + #define CC312_CC312_GHASH_SUBKEY_0_1_REG_CC312_GHASH_SUBKEY_0_1_Msk (0xffffffffUL) /*!< CC312_GHASH_SUBKEY_0_1 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_GHASH_SUBKEY_0_2_REG =============================================== */ + #define CC312_CC312_GHASH_SUBKEY_0_2_REG_CC312_GHASH_SUBKEY_0_2_Pos (0UL) /*!< CC312_GHASH_SUBKEY_0_2 (Bit 0) */ + #define CC312_CC312_GHASH_SUBKEY_0_2_REG_CC312_GHASH_SUBKEY_0_2_Msk (0xffffffffUL) /*!< CC312_GHASH_SUBKEY_0_2 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_GHASH_SUBKEY_0_3_REG =============================================== */ + #define CC312_CC312_GHASH_SUBKEY_0_3_REG_CC312_GHASH_SUBKEY_0_3_Pos (0UL) /*!< CC312_GHASH_SUBKEY_0_3 (Bit 0) */ + #define CC312_CC312_GHASH_SUBKEY_0_3_REG_CC312_GHASH_SUBKEY_0_3_Msk (0xffffffffUL) /*!< CC312_GHASH_SUBKEY_0_3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_HASH_AES_SW_RESET_REG ============================================== */ + #define CC312_CC312_HASH_AES_SW_RESET_REG_CC312_HASH_AES_SW_RESET_Pos (0UL) /*!< CC312_HASH_AES_SW_RESET (Bit 0) */ + #define CC312_CC312_HASH_AES_SW_RESET_REG_CC312_HASH_AES_SW_RESET_Msk (0x1UL) /*!< CC312_HASH_AES_SW_RESET (Bitfield-Mask: 0x01) */ +/* ================================================== CC312_HASH_BUSY_REG ================================================== */ + #define CC312_CC312_HASH_BUSY_REG_CC312_HASH_BUSY_Pos (0UL) /*!< CC312_HASH_BUSY (Bit 0) */ + #define CC312_CC312_HASH_BUSY_REG_CC312_HASH_BUSY_Msk (0x1UL) /*!< CC312_HASH_BUSY (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_HASH_CLK_ENABLE_REG =============================================== */ + #define CC312_CC312_HASH_CLK_ENABLE_REG_CC312_HASH_CLK_EN_Pos (0UL) /*!< CC312_HASH_CLK_EN (Bit 0) */ + #define CC312_CC312_HASH_CLK_ENABLE_REG_CC312_HASH_CLK_EN_Msk (0x1UL) /*!< CC312_HASH_CLK_EN (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_HASH_CONTROL_REG ================================================= */ + #define CC312_CC312_HASH_CONTROL_REG_CC312_MODE_3_Pos (3UL) /*!< CC312_MODE_3 (Bit 3) */ + #define CC312_CC312_HASH_CONTROL_REG_CC312_MODE_3_Msk (0x8UL) /*!< CC312_MODE_3 (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_CONTROL_REG_CC312_MODE_0_1_Pos (0UL) /*!< CC312_MODE_0_1 (Bit 0) */ + #define CC312_CC312_HASH_CONTROL_REG_CC312_MODE_0_1_Msk (0x3UL) /*!< CC312_MODE_0_1 (Bitfield-Mask: 0x03) */ +/* =============================================== CC312_HASH_CUR_LEN_0_REG ================================================ */ + #define CC312_CC312_HASH_CUR_LEN_0_REG_CC312_HASH_CUR_LEN_0_Pos (0UL) /*!< CC312_HASH_CUR_LEN_0 (Bit 0) */ + #define CC312_CC312_HASH_CUR_LEN_0_REG_CC312_HASH_CUR_LEN_0_Msk (0xffffffffUL) /*!< CC312_HASH_CUR_LEN_0 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_HASH_CUR_LEN_1_REG ================================================ */ + #define CC312_CC312_HASH_CUR_LEN_1_REG_CC312_HASH_CUR_LEN_1_Pos (0UL) /*!< CC312_HASH_CUR_LEN_1 (Bit 0) */ + #define CC312_CC312_HASH_CUR_LEN_1_REG_CC312_HASH_CUR_LEN_1_Msk (0xffffffffUL) /*!< CC312_HASH_CUR_LEN_1 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_HASH_ENDIANESS_REG ================================================ */ + #define CC312_CC312_HASH_ENDIANESS_REG_CC312_ENDIAN_Pos (0UL) /*!< CC312_ENDIAN (Bit 0) */ + #define CC312_CC312_HASH_ENDIANESS_REG_CC312_ENDIAN_Msk (0x1UL) /*!< CC312_ENDIAN (Bitfield-Mask: 0x01) */ +/* =================================================== CC312_HASH_H0_REG =================================================== */ + #define CC312_CC312_HASH_H0_REG_CC312_HASH_H0_Pos (0UL) /*!< CC312_HASH_H0 (Bit 0) */ + #define CC312_CC312_HASH_H0_REG_CC312_HASH_H0_Msk (0xffffffffUL) /*!< CC312_HASH_H0 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_HASH_H1_REG =================================================== */ + #define CC312_CC312_HASH_H1_REG_CC312_HASH_H1_Pos (0UL) /*!< CC312_HASH_H1 (Bit 0) */ + #define CC312_CC312_HASH_H1_REG_CC312_HASH_H1_Msk (0xffffffffUL) /*!< CC312_HASH_H1 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_HASH_H2_REG =================================================== */ + #define CC312_CC312_HASH_H2_REG_CC312_HASH_H2_Pos (0UL) /*!< CC312_HASH_H2 (Bit 0) */ + #define CC312_CC312_HASH_H2_REG_CC312_HASH_H2_Msk (0xffffffffUL) /*!< CC312_HASH_H2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_HASH_H3_REG =================================================== */ + #define CC312_CC312_HASH_H3_REG_CC312_HASH_H3_Pos (0UL) /*!< CC312_HASH_H3 (Bit 0) */ + #define CC312_CC312_HASH_H3_REG_CC312_HASH_H3_Msk (0xffffffffUL) /*!< CC312_HASH_H3 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_HASH_H4_REG =================================================== */ + #define CC312_CC312_HASH_H4_REG_CC312_HASH_H4_Pos (0UL) /*!< CC312_HASH_H4 (Bit 0) */ + #define CC312_CC312_HASH_H4_REG_CC312_HASH_H4_Msk (0xffffffffUL) /*!< CC312_HASH_H4 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_HASH_H5_REG =================================================== */ + #define CC312_CC312_HASH_H5_REG_CC312_HASH_H5_Pos (0UL) /*!< CC312_HASH_H5 (Bit 0) */ + #define CC312_CC312_HASH_H5_REG_CC312_HASH_H5_Msk (0xffffffffUL) /*!< CC312_HASH_H5 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_HASH_H6_REG =================================================== */ + #define CC312_CC312_HASH_H6_REG_CC312_HASH_H6_Pos (0UL) /*!< CC312_HASH_H6 (Bit 0) */ + #define CC312_CC312_HASH_H6_REG_CC312_HASH_H6_Msk (0xffffffffUL) /*!< CC312_HASH_H6 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_HASH_H7_REG =================================================== */ + #define CC312_CC312_HASH_H7_REG_CC312_HASH_H7_Pos (0UL) /*!< CC312_HASH_H7 (Bit 0) */ + #define CC312_CC312_HASH_H7_REG_CC312_HASH_H7_Msk (0xffffffffUL) /*!< CC312_HASH_H7 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CC312_HASH_H8_REG =================================================== */ + #define CC312_CC312_HASH_H8_REG_CC312_HASH_H8_Pos (0UL) /*!< CC312_HASH_H8 (Bit 0) */ + #define CC312_CC312_HASH_H8_REG_CC312_HASH_H8_Msk (0xffffffffUL) /*!< CC312_HASH_H8 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_HASH_PAD_CFG_REG ================================================= */ + #define CC312_CC312_HASH_PAD_CFG_REG_CC312_DO_PAD_Pos (2UL) /*!< CC312_DO_PAD (Bit 2) */ + #define CC312_CC312_HASH_PAD_CFG_REG_CC312_DO_PAD_Msk (0x4UL) /*!< CC312_DO_PAD (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_HASH_PAD_EN_REG ================================================= */ + #define CC312_CC312_HASH_PAD_EN_REG_CC312_HASH_PAD_EN_Pos (0UL) /*!< CC312_HASH_PAD_EN (Bit 0) */ + #define CC312_CC312_HASH_PAD_EN_REG_CC312_HASH_PAD_EN_Msk (0x1UL) /*!< CC312_HASH_PAD_EN (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_HASH_PARAM_REG ================================================== */ + #define CC312_CC312_HASH_PARAM_REG_CC312_DUMP_HASH_TO_DOUT_EXISTS_Pos (18UL) /*!< CC312_DUMP_HASH_TO_DOUT_EXISTS (Bit 18) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_DUMP_HASH_TO_DOUT_EXISTS_Msk (0x40000UL) /*!< CC312_DUMP_HASH_TO_DOUT_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_HASH_COMPARE_EXISTS_Pos (17UL) /*!< CC312_HASH_COMPARE_EXISTS (Bit 17) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_HASH_COMPARE_EXISTS_Msk (0x20000UL) /*!< CC312_HASH_COMPARE_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_SHA_256_EXISTS_Pos (16UL) /*!< CC312_SHA_256_EXISTS (Bit 16) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_SHA_256_EXISTS_Msk (0x10000UL) /*!< CC312_SHA_256_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_HMAC_EXISTS_Pos (15UL) /*!< CC312_HMAC_EXISTS (Bit 15) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_HMAC_EXISTS_Msk (0x8000UL) /*!< CC312_HMAC_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_MD5_EXISTS_Pos (14UL) /*!< CC312_MD5_EXISTS (Bit 14) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_MD5_EXISTS_Msk (0x4000UL) /*!< CC312_MD5_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_PAD_EXISTS_Pos (13UL) /*!< CC312_PAD_EXISTS (Bit 13) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_PAD_EXISTS_Msk (0x2000UL) /*!< CC312_PAD_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_SHA_512_EXISTS_Pos (12UL) /*!< CC312_SHA_512_EXISTS (Bit 12) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_SHA_512_EXISTS_Msk (0x1000UL) /*!< CC312_SHA_512_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_DW_Pos (8UL) /*!< CC312_DW (Bit 8) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_DW_Msk (0xf00UL) /*!< CC312_DW (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_CH_Pos (4UL) /*!< CC312_CH (Bit 4) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_CH_Msk (0xf0UL) /*!< CC312_CH (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_CW_Pos (0UL) /*!< CC312_CW (Bit 0) */ + #define CC312_CC312_HASH_PARAM_REG_CC312_CW_Msk (0xfUL) /*!< CC312_CW (Bitfield-Mask: 0x0f) */ +/* ============================================== CC312_HASH_SEL_AES_MAC_REG =============================================== */ + #define CC312_CC312_HASH_SEL_AES_MAC_REG_CC312_GHASH_SEL_Pos (1UL) /*!< CC312_GHASH_SEL (Bit 1) */ + #define CC312_CC312_HASH_SEL_AES_MAC_REG_CC312_GHASH_SEL_Msk (0x2UL) /*!< CC312_GHASH_SEL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HASH_SEL_AES_MAC_REG_CC312_HASH_SEL_AES_MAC_Pos (0UL) /*!< CC312_HASH_SEL_AES_MAC (Bit 0) */ + #define CC312_CC312_HASH_SEL_AES_MAC_REG_CC312_HASH_SEL_AES_MAC_Msk (0x1UL) /*!< CC312_HASH_SEL_AES_MAC (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_HASH_VERSION_REG ================================================= */ + #define CC312_CC312_HASH_VERSION_REG_CC312_MAJOR_VERSION_NUMBER_Pos (12UL) /*!< CC312_MAJOR_VERSION_NUMBER (Bit 12) */ + #define CC312_CC312_HASH_VERSION_REG_CC312_MAJOR_VERSION_NUMBER_Msk (0xf000UL) /*!< CC312_MAJOR_VERSION_NUMBER (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_HASH_VERSION_REG_CC312_MINOR_VERSION_NUMBER_Pos (8UL) /*!< CC312_MINOR_VERSION_NUMBER (Bit 8) */ + #define CC312_CC312_HASH_VERSION_REG_CC312_MINOR_VERSION_NUMBER_Msk (0xf00UL) /*!< CC312_MINOR_VERSION_NUMBER (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_HASH_VERSION_REG_CC312_FIXES_Pos (0UL) /*!< CC312_FIXES (Bit 0) */ + #define CC312_CC312_HASH_VERSION_REG_CC312_FIXES_Msk (0xffUL) /*!< CC312_FIXES (Bitfield-Mask: 0xff) */ +/* ================================================ CC312_HASH_XOR_DIN_REG ================================================= */ + #define CC312_CC312_HASH_XOR_DIN_REG_CC312_HASH_XOR_DATA_Pos (0UL) /*!< CC312_HASH_XOR_DATA (Bit 0) */ + #define CC312_CC312_HASH_XOR_DIN_REG_CC312_HASH_XOR_DATA_Msk (0xffffffffUL) /*!< CC312_HASH_XOR_DATA (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_HOST_AO_LOCK_BITS_REG ============================================== */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_DFA_ENABLE_LOCK_Pos (8UL) /*!< CC312_HOST_DFA_ENABLE_LOCK (Bit 8) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_DFA_ENABLE_LOCK_Msk (0x100UL) /*!< CC312_HOST_DFA_ENABLE_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_FORCE_DFA_ENABLE_Pos (7UL) /*!< CC312_HOST_FORCE_DFA_ENABLE (Bit 7) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_FORCE_DFA_ENABLE_Msk (0x80UL) /*!< CC312_HOST_FORCE_DFA_ENABLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_RESET_UPON_DEBUG_DISABLE_Pos (6UL) /*!< CC312_RESET_UPON_DEBUG_DISABLE (Bit 6) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_RESET_UPON_DEBUG_DISABLE_Msk (0x40UL) /*!< CC312_RESET_UPON_DEBUG_DISABLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_ICV_RMA_LOCK_Pos (5UL) /*!< CC312_HOST_ICV_RMA_LOCK (Bit 5) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_ICV_RMA_LOCK_Msk (0x20UL) /*!< CC312_HOST_ICV_RMA_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_KCE_LOCK_Pos (4UL) /*!< CC312_HOST_KCE_LOCK (Bit 4) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_KCE_LOCK_Msk (0x10UL) /*!< CC312_HOST_KCE_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_KCP_LOCK_Pos (3UL) /*!< CC312_HOST_KCP_LOCK (Bit 3) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_KCP_LOCK_Msk (0x8UL) /*!< CC312_HOST_KCP_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_KCEICV_LOCK_Pos (2UL) /*!< CC312_HOST_KCEICV_LOCK (Bit 2) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_KCEICV_LOCK_Msk (0x4UL) /*!< CC312_HOST_KCEICV_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_KPICV_LOCK_Pos (1UL) /*!< CC312_HOST_KPICV_LOCK (Bit 1) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_KPICV_LOCK_Msk (0x2UL) /*!< CC312_HOST_KPICV_LOCK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_FATAL_ERR_Pos (0UL) /*!< CC312_HOST_FATAL_ERR (Bit 0) */ + #define CC312_CC312_HOST_AO_LOCK_BITS_REG_CC312_HOST_FATAL_ERR_Msk (0x1UL) /*!< CC312_HOST_FATAL_ERR (Bitfield-Mask: 0x01) */ +/* ================================================== CC312_HOST_BOOT_REG ================================================== */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_EXISTS_LOCAL_Pos (30UL) /*!< CC312_AES_EXISTS_LOCAL (Bit 30) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_EXISTS_LOCAL_Msk (0x40000000UL) /*!< CC312_AES_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_ONLY_ENCRYPT_LOCAL_Pos (29UL) /*!< CC312_ONLY_ENCRYPT_LOCAL (Bit 29) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_ONLY_ENCRYPT_LOCAL_Msk (0x20000000UL) /*!< CC312_ONLY_ENCRYPT_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SUPPORT_256_192_KEY_LOCAL_Pos (28UL) /*!< CC312_SUPPORT_256_192_KEY_LOCAL (Bit 28) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SUPPORT_256_192_KEY_LOCAL_Msk (0x10000000UL) /*!< CC312_SUPPORT_256_192_KEY_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_TUNNELING_ENB_LOCAL_Pos (27UL) /*!< CC312_TUNNELING_ENB_LOCAL (Bit 27) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_TUNNELING_ENB_LOCAL_Msk (0x8000000UL) /*!< CC312_TUNNELING_ENB_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_DIN_BYTE_RESOLUTION_LOCAL_Pos (26UL) /*!< CC312_AES_DIN_BYTE_RESOLUTION_LOCAL (Bit 26) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_DIN_BYTE_RESOLUTION_LOCAL_Msk (0x4000000UL) /*!< CC312_AES_DIN_BYTE_RESOLUTION_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_CTR_EXISTS_LOCAL_Pos (25UL) /*!< CC312_CTR_EXISTS_LOCAL (Bit 25) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_CTR_EXISTS_LOCAL_Msk (0x2000000UL) /*!< CC312_CTR_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_XEX_EXISTS_LOCAL_Pos (24UL) /*!< CC312_AES_XEX_EXISTS_LOCAL (Bit 24) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_XEX_EXISTS_LOCAL_Msk (0x1000000UL) /*!< CC312_AES_XEX_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_XEX_HW_T_CALC_LOCAL_Pos (23UL) /*!< CC312_AES_XEX_HW_T_CALC_LOCAL (Bit 23) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_XEX_HW_T_CALC_LOCAL_Msk (0x800000UL) /*!< CC312_AES_XEX_HW_T_CALC_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_CCM_EXISTS_LOCAL_Pos (22UL) /*!< CC312_AES_CCM_EXISTS_LOCAL (Bit 22) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_CCM_EXISTS_LOCAL_Msk (0x400000UL) /*!< CC312_AES_CCM_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_CMAC_EXISTS_LOCAL_Pos (21UL) /*!< CC312_AES_CMAC_EXISTS_LOCAL (Bit 21) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_CMAC_EXISTS_LOCAL_Msk (0x200000UL) /*!< CC312_AES_CMAC_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_XCBC_MAC_EXISTS_LOCAL_Pos (20UL) /*!< CC312_AES_XCBC_MAC_EXISTS_LOCAL (Bit 20) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_AES_XCBC_MAC_EXISTS_LOCAL_Msk (0x100000UL) /*!< CC312_AES_XCBC_MAC_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_DES_EXISTS_LOCAL_Pos (19UL) /*!< CC312_DES_EXISTS_LOCAL (Bit 19) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_DES_EXISTS_LOCAL_Msk (0x80000UL) /*!< CC312_DES_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_C2_EXISTS_LOCAL_Pos (18UL) /*!< CC312_C2_EXISTS_LOCAL (Bit 18) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_C2_EXISTS_LOCAL_Msk (0x40000UL) /*!< CC312_C2_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_HASH_EXISTS_LOCAL_Pos (17UL) /*!< CC312_HASH_EXISTS_LOCAL (Bit 17) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_HASH_EXISTS_LOCAL_Msk (0x20000UL) /*!< CC312_HASH_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_MD5_PRSNT_LOCAL_Pos (16UL) /*!< CC312_MD5_PRSNT_LOCAL (Bit 16) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_MD5_PRSNT_LOCAL_Msk (0x10000UL) /*!< CC312_MD5_PRSNT_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SHA_256_PRSNT_LOCAL_Pos (15UL) /*!< CC312_SHA_256_PRSNT_LOCAL (Bit 15) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SHA_256_PRSNT_LOCAL_Msk (0x8000UL) /*!< CC312_SHA_256_PRSNT_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SHA_512_PRSNT_LOCAL_Pos (14UL) /*!< CC312_SHA_512_PRSNT_LOCAL (Bit 14) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SHA_512_PRSNT_LOCAL_Msk (0x4000UL) /*!< CC312_SHA_512_PRSNT_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_RC4_EXISTS_LOCAL_Pos (13UL) /*!< CC312_RC4_EXISTS_LOCAL (Bit 13) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_RC4_EXISTS_LOCAL_Msk (0x2000UL) /*!< CC312_RC4_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_PKA_EXISTS_LOCAL_Pos (12UL) /*!< CC312_PKA_EXISTS_LOCAL (Bit 12) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_PKA_EXISTS_LOCAL_Msk (0x1000UL) /*!< CC312_PKA_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_RNG_EXISTS_LOCAL_Pos (11UL) /*!< CC312_RNG_EXISTS_LOCAL (Bit 11) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_RNG_EXISTS_LOCAL_Msk (0x800UL) /*!< CC312_RNG_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_PAU_EXISTS_LOCAL_Pos (10UL) /*!< CC312_PAU_EXISTS_LOCAL (Bit 10) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_PAU_EXISTS_LOCAL_Msk (0x400UL) /*!< CC312_PAU_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_DSCRPTR_EXISTS_LOCAL_Pos (9UL) /*!< CC312_DSCRPTR_EXISTS_LOCAL (Bit 9) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_DSCRPTR_EXISTS_LOCAL_Msk (0x200UL) /*!< CC312_DSCRPTR_EXISTS_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SRAM_SIZE_LOCAL_Pos (6UL) /*!< CC312_SRAM_SIZE_LOCAL (Bit 6) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SRAM_SIZE_LOCAL_Msk (0x1c0UL) /*!< CC312_SRAM_SIZE_LOCAL (Bitfield-Mask: 0x07) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_RKEK_ECC_EXISTS_LOCAL_N_Pos (5UL) /*!< CC312_RKEK_ECC_EXISTS_LOCAL_N (Bit 5) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_RKEK_ECC_EXISTS_LOCAL_N_Msk (0x20UL) /*!< CC312_RKEK_ECC_EXISTS_LOCAL_N (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_EXT_MEM_SECURED_LOCAL_Pos (3UL) /*!< CC312_EXT_MEM_SECURED_LOCAL (Bit 3) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_EXT_MEM_SECURED_LOCAL_Msk (0x8UL) /*!< CC312_EXT_MEM_SECURED_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_HASH_IN_FUSES_LOCAL_Pos (2UL) /*!< CC312_HASH_IN_FUSES_LOCAL (Bit 2) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_HASH_IN_FUSES_LOCAL_Msk (0x4UL) /*!< CC312_HASH_IN_FUSES_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_LARGE_RKEK_LOCAL_Pos (1UL) /*!< CC312_LARGE_RKEK_LOCAL (Bit 1) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_LARGE_RKEK_LOCAL_Msk (0x2UL) /*!< CC312_LARGE_RKEK_LOCAL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SYNTHESIS_CONFIG_Pos (0UL) /*!< CC312_SYNTHESIS_CONFIG (Bit 0) */ + #define CC312_CC312_HOST_BOOT_REG_CC312_SYNTHESIS_CONFIG_Msk (0x1UL) /*!< CC312_SYNTHESIS_CONFIG (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_HOST_CC_IS_IDLE_REG =============================================== */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_CRYPTO_IS_IDLE_Pos (9UL) /*!< CC312_CRYPTO_IS_IDLE (Bit 9) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_CRYPTO_IS_IDLE_Msk (0x200UL) /*!< CC312_CRYPTO_IS_IDLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_PKA_IS_IDLE_Pos (8UL) /*!< CC312_PKA_IS_IDLE (Bit 8) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_PKA_IS_IDLE_Msk (0x100UL) /*!< CC312_PKA_IS_IDLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_RNG_IS_IDLE_Pos (7UL) /*!< CC312_RNG_IS_IDLE (Bit 7) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_RNG_IS_IDLE_Msk (0x80UL) /*!< CC312_RNG_IS_IDLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_FATAL_WR_Pos (6UL) /*!< CC312_FATAL_WR (Bit 6) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_FATAL_WR_Msk (0x40UL) /*!< CC312_FATAL_WR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_NVM_IS_IDLE_Pos (5UL) /*!< CC312_NVM_IS_IDLE (Bit 5) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_NVM_IS_IDLE_Msk (0x20UL) /*!< CC312_NVM_IS_IDLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_NVM_ARB_IS_IDLE_Pos (4UL) /*!< CC312_NVM_ARB_IS_IDLE (Bit 4) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_NVM_ARB_IS_IDLE_Msk (0x10UL) /*!< CC312_NVM_ARB_IS_IDLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_AHB_IS_IDLE_Pos (3UL) /*!< CC312_AHB_IS_IDLE (Bit 3) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_AHB_IS_IDLE_Msk (0x8UL) /*!< CC312_AHB_IS_IDLE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_SYM_IS_BUSY_Pos (2UL) /*!< CC312_SYM_IS_BUSY (Bit 2) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_SYM_IS_BUSY_Msk (0x4UL) /*!< CC312_SYM_IS_BUSY (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_HOST_CC_IS_IDLE_EVENT_Pos (1UL) /*!< CC312_HOST_CC_IS_IDLE_EVENT (Bit 1) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_HOST_CC_IS_IDLE_EVENT_Msk (0x2UL) /*!< CC312_HOST_CC_IS_IDLE_EVENT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_HOST_CC_IS_IDLE_Pos (0UL) /*!< CC312_HOST_CC_IS_IDLE (Bit 0) */ + #define CC312_CC312_HOST_CC_IS_IDLE_REG_CC312_HOST_CC_IS_IDLE_Msk (0x1UL) /*!< CC312_HOST_CC_IS_IDLE (Bitfield-Mask: 0x01) */ +/* ========================================= CC312_HOST_CORE_CLK_GATING_ENABLE_REG ========================================= */ + #define CC312_CC312_HOST_CORE_CLK_GATING_ENABLE_REG_CC312_HOST_CORE_CLK_GATING_ENABLE_Pos (0UL) /*!< CC312_HOST_CORE_CLK_GATING_ENABLE (Bit 0) */ + #define CC312_CC312_HOST_CORE_CLK_GATING_ENABLE_REG_CC312_HOST_CORE_CLK_GATING_ENABLE_Msk (0x1UL) /*!< CC312_HOST_CORE_CLK_GATING_ENABLE (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_HOST_CRYPTOKEY_SEL_REG ============================================== */ + #define CC312_CC312_HOST_CRYPTOKEY_SEL_REG_CC312_SEL_CRYPTO_KEY_Pos (0UL) /*!< CC312_SEL_CRYPTO_KEY (Bit 0) */ + #define CC312_CC312_HOST_CRYPTOKEY_SEL_REG_CC312_SEL_CRYPTO_KEY_Msk (0x7UL) /*!< CC312_SEL_CRYPTO_KEY (Bitfield-Mask: 0x07) */ +/* ================================================ CC312_HOST_DCU_EN0_REG ================================================= */ + #define CC312_CC312_HOST_DCU_EN0_REG_CC312_HOST_DCU_EN0_Pos (0UL) /*!< CC312_HOST_DCU_EN0 (Bit 0) */ + #define CC312_CC312_HOST_DCU_EN0_REG_CC312_HOST_DCU_EN0_Msk (0xffffffffUL) /*!< CC312_HOST_DCU_EN0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_HOST_DCU_EN1_REG ================================================= */ + #define CC312_CC312_HOST_DCU_EN1_REG_CC312_HOST_DCU_EN1_Pos (0UL) /*!< CC312_HOST_DCU_EN1 (Bit 0) */ + #define CC312_CC312_HOST_DCU_EN1_REG_CC312_HOST_DCU_EN1_Msk (0xffffffffUL) /*!< CC312_HOST_DCU_EN1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_HOST_DCU_EN2_REG ================================================= */ + #define CC312_CC312_HOST_DCU_EN2_REG_CC312_HOST_DCU_EN2_Pos (0UL) /*!< CC312_HOST_DCU_EN2 (Bit 0) */ + #define CC312_CC312_HOST_DCU_EN2_REG_CC312_HOST_DCU_EN2_Msk (0xffffffffUL) /*!< CC312_HOST_DCU_EN2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_HOST_DCU_EN3_REG ================================================= */ + #define CC312_CC312_HOST_DCU_EN3_REG_CC312_HOST_DCU_EN3_Pos (0UL) /*!< CC312_HOST_DCU_EN3 (Bit 0) */ + #define CC312_CC312_HOST_DCU_EN3_REG_CC312_HOST_DCU_EN3_Msk (0xffffffffUL) /*!< CC312_HOST_DCU_EN3 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_HOST_DCU_LOCK0_REG ================================================ */ + #define CC312_CC312_HOST_DCU_LOCK0_REG_CC312_HOST_DCU_LOCK0_Pos (0UL) /*!< CC312_HOST_DCU_LOCK0 (Bit 0) */ + #define CC312_CC312_HOST_DCU_LOCK0_REG_CC312_HOST_DCU_LOCK0_Msk (0xffffffffUL) /*!< CC312_HOST_DCU_LOCK0 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_HOST_DCU_LOCK1_REG ================================================ */ + #define CC312_CC312_HOST_DCU_LOCK1_REG_CC312_HOST_DCU_LOCK1_Pos (0UL) /*!< CC312_HOST_DCU_LOCK1 (Bit 0) */ + #define CC312_CC312_HOST_DCU_LOCK1_REG_CC312_HOST_DCU_LOCK1_Msk (0xffffffffUL) /*!< CC312_HOST_DCU_LOCK1 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_HOST_DCU_LOCK2_REG ================================================ */ + #define CC312_CC312_HOST_DCU_LOCK2_REG_CC312_HOST_DCU_LOCK2_Pos (0UL) /*!< CC312_HOST_DCU_LOCK2 (Bit 0) */ + #define CC312_CC312_HOST_DCU_LOCK2_REG_CC312_HOST_DCU_LOCK2_Msk (0xffffffffUL) /*!< CC312_HOST_DCU_LOCK2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_HOST_DCU_LOCK3_REG ================================================ */ + #define CC312_CC312_HOST_DCU_LOCK3_REG_CC312_HOST_DCU_LOCK3_Pos (0UL) /*!< CC312_HOST_DCU_LOCK3 (Bit 0) */ + #define CC312_CC312_HOST_DCU_LOCK3_REG_CC312_HOST_DCU_LOCK3_Msk (0xffffffffUL) /*!< CC312_HOST_DCU_LOCK3 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_HOST_POWERDOWN_REG ================================================ */ + #define CC312_CC312_HOST_POWERDOWN_REG_CC312_HOST_POWERDOWN_Pos (0UL) /*!< CC312_HOST_POWERDOWN (Bit 0) */ + #define CC312_CC312_HOST_POWERDOWN_REG_CC312_HOST_POWERDOWN_Msk (0x1UL) /*!< CC312_HOST_POWERDOWN (Bitfield-Mask: 0x01) */ +/* ========================================== CC312_HOST_REMOVE_CHACHA_ENGINE_REG ========================================== */ + #define CC312_CC312_HOST_REMOVE_CHACHA_ENGINE_REG_CC312_HOST_REMOVE_CHACHA_ENGINE_Pos (0UL) /*!< CC312_HOST_REMOVE_CHACHA_ENGINE (Bit 0) */ + #define CC312_CC312_HOST_REMOVE_CHACHA_ENGINE_REG_CC312_HOST_REMOVE_CHACHA_ENGINE_Msk (0x1UL) /*!< CC312_HOST_REMOVE_CHACHA_ENGINE (Bitfield-Mask: 0x01) */ +/* ========================================== CC312_HOST_REMOVE_GHASH_ENGINE_REG =========================================== */ + #define CC312_CC312_HOST_REMOVE_GHASH_ENGINE_REG_CC312_HOST_REMOVE_GHASH_ENGINE_Pos (0UL) /*!< CC312_HOST_REMOVE_GHASH_ENGINE (Bit 0) */ + #define CC312_CC312_HOST_REMOVE_GHASH_ENGINE_REG_CC312_HOST_REMOVE_GHASH_ENGINE_Msk (0x1UL) /*!< CC312_HOST_REMOVE_GHASH_ENGINE (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_HOST_RGF_CC_SW_RST_REG ============================================== */ + #define CC312_CC312_HOST_RGF_CC_SW_RST_REG_CC312_HOST_RGF_CC_SW_RST_Pos (0UL) /*!< CC312_HOST_RGF_CC_SW_RST (Bit 0) */ + #define CC312_CC312_HOST_RGF_CC_SW_RST_REG_CC312_HOST_RGF_CC_SW_RST_Msk (0x1UL) /*!< CC312_HOST_RGF_CC_SW_RST (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_HOST_RGF_ENDIAN_REG =============================================== */ + #define CC312_CC312_HOST_RGF_ENDIAN_REG_CC312_DIN_RD_WBG_Pos (15UL) /*!< CC312_DIN_RD_WBG (Bit 15) */ + #define CC312_CC312_HOST_RGF_ENDIAN_REG_CC312_DIN_RD_WBG_Msk (0x8000UL) /*!< CC312_DIN_RD_WBG (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ENDIAN_REG_CC312_DOUT_WR_WBG_Pos (11UL) /*!< CC312_DOUT_WR_WBG (Bit 11) */ + #define CC312_CC312_HOST_RGF_ENDIAN_REG_CC312_DOUT_WR_WBG_Msk (0x800UL) /*!< CC312_DOUT_WR_WBG (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ENDIAN_REG_CC312_DIN_RD_BG_Pos (7UL) /*!< CC312_DIN_RD_BG (Bit 7) */ + #define CC312_CC312_HOST_RGF_ENDIAN_REG_CC312_DIN_RD_BG_Msk (0x80UL) /*!< CC312_DIN_RD_BG (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ENDIAN_REG_CC312_DOUT_WR_BG_Pos (3UL) /*!< CC312_DOUT_WR_BG (Bit 3) */ + #define CC312_CC312_HOST_RGF_ENDIAN_REG_CC312_DOUT_WR_BG_Msk (0x8UL) /*!< CC312_DOUT_WR_BG (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_HOST_RGF_ICR_REG ================================================= */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_SYM_DMA_COMPLETED_CLEAR_Pos (11UL) /*!< CC312_SYM_DMA_COMPLETED_CLEAR (Bit 11) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_SYM_DMA_COMPLETED_CLEAR_Msk (0x800UL) /*!< CC312_SYM_DMA_COMPLETED_CLEAR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_RNG_INT_CLEAR_Pos (10UL) /*!< CC312_RNG_INT_CLEAR (Bit 10) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_RNG_INT_CLEAR_Msk (0x400UL) /*!< CC312_RNG_INT_CLEAR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_PKA_EXP_CLEAR_Pos (9UL) /*!< CC312_PKA_EXP_CLEAR (Bit 9) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_PKA_EXP_CLEAR_Msk (0x200UL) /*!< CC312_PKA_EXP_CLEAR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_AXI_ERR_CLEAR_Pos (8UL) /*!< CC312_AXI_ERR_CLEAR (Bit 8) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_AXI_ERR_CLEAR_Msk (0x100UL) /*!< CC312_AXI_ERR_CLEAR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_DOUT_TO_MEM_CLEAR_Pos (7UL) /*!< CC312_DOUT_TO_MEM_CLEAR (Bit 7) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_DOUT_TO_MEM_CLEAR_Msk (0x80UL) /*!< CC312_DOUT_TO_MEM_CLEAR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_MEM_TO_DIN_CLEAR_Pos (6UL) /*!< CC312_MEM_TO_DIN_CLEAR (Bit 6) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_MEM_TO_DIN_CLEAR_Msk (0x40UL) /*!< CC312_MEM_TO_DIN_CLEAR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_DOUT_TO_SRAM_CLEAR_Pos (5UL) /*!< CC312_DOUT_TO_SRAM_CLEAR (Bit 5) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_DOUT_TO_SRAM_CLEAR_Msk (0x20UL) /*!< CC312_DOUT_TO_SRAM_CLEAR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_SRAM_TO_DIN_CLEAR_Pos (4UL) /*!< CC312_SRAM_TO_DIN_CLEAR (Bit 4) */ + #define CC312_CC312_HOST_RGF_ICR_REG_CC312_SRAM_TO_DIN_CLEAR_Msk (0x10UL) /*!< CC312_SRAM_TO_DIN_CLEAR (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_HOST_RGF_IMR_REG ================================================= */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_SYM_DMA_COMPLETED_MASK_Pos (11UL) /*!< CC312_SYM_DMA_COMPLETED_MASK (Bit 11) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_SYM_DMA_COMPLETED_MASK_Msk (0x800UL) /*!< CC312_SYM_DMA_COMPLETED_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_RNG_INT_MASK_Pos (10UL) /*!< CC312_RNG_INT_MASK (Bit 10) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_RNG_INT_MASK_Msk (0x400UL) /*!< CC312_RNG_INT_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_PKA_EXP_MASK_Pos (9UL) /*!< CC312_PKA_EXP_MASK (Bit 9) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_PKA_EXP_MASK_Msk (0x200UL) /*!< CC312_PKA_EXP_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_AXI_ERR_MASK_Pos (8UL) /*!< CC312_AXI_ERR_MASK (Bit 8) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_AXI_ERR_MASK_Msk (0x100UL) /*!< CC312_AXI_ERR_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_DOUT_TO_MEM_MASK_Pos (7UL) /*!< CC312_DOUT_TO_MEM_MASK (Bit 7) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_DOUT_TO_MEM_MASK_Msk (0x80UL) /*!< CC312_DOUT_TO_MEM_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_MEM_TO_DIN_MASK_Pos (6UL) /*!< CC312_MEM_TO_DIN_MASK (Bit 6) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_MEM_TO_DIN_MASK_Msk (0x40UL) /*!< CC312_MEM_TO_DIN_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_DOUT_TO_SRAM_MASK_Pos (5UL) /*!< CC312_DOUT_TO_SRAM_MASK (Bit 5) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_DOUT_TO_SRAM_MASK_Msk (0x20UL) /*!< CC312_DOUT_TO_SRAM_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_SRAM_TO_DIN_MASK_Pos (4UL) /*!< CC312_SRAM_TO_DIN_MASK (Bit 4) */ + #define CC312_CC312_HOST_RGF_IMR_REG_CC312_SRAM_TO_DIN_MASK_Msk (0x10UL) /*!< CC312_SRAM_TO_DIN_MASK (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_HOST_RGF_IRR_REG ================================================= */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_SYM_DMA_COMPLETED_Pos (11UL) /*!< CC312_SYM_DMA_COMPLETED (Bit 11) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_SYM_DMA_COMPLETED_Msk (0x800UL) /*!< CC312_SYM_DMA_COMPLETED (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_RNG_INT_Pos (10UL) /*!< CC312_RNG_INT (Bit 10) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_RNG_INT_Msk (0x400UL) /*!< CC312_RNG_INT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_PKA_EXP_INT_Pos (9UL) /*!< CC312_PKA_EXP_INT (Bit 9) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_PKA_EXP_INT_Msk (0x200UL) /*!< CC312_PKA_EXP_INT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_AHB_ERR_INT_Pos (8UL) /*!< CC312_AHB_ERR_INT (Bit 8) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_AHB_ERR_INT_Msk (0x100UL) /*!< CC312_AHB_ERR_INT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_DOUT_TO_MEM_INT_Pos (7UL) /*!< CC312_DOUT_TO_MEM_INT (Bit 7) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_DOUT_TO_MEM_INT_Msk (0x80UL) /*!< CC312_DOUT_TO_MEM_INT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_MEM_TO_DIN_INT_Pos (6UL) /*!< CC312_MEM_TO_DIN_INT (Bit 6) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_MEM_TO_DIN_INT_Msk (0x40UL) /*!< CC312_MEM_TO_DIN_INT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_DOUT_TO_SRAM_INT_Pos (5UL) /*!< CC312_DOUT_TO_SRAM_INT (Bit 5) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_DOUT_TO_SRAM_INT_Msk (0x20UL) /*!< CC312_DOUT_TO_SRAM_INT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_SRAM_TO_DIN_INT_Pos (4UL) /*!< CC312_SRAM_TO_DIN_INT (Bit 4) */ + #define CC312_CC312_HOST_RGF_IRR_REG_CC312_SRAM_TO_DIN_INT_Msk (0x10UL) /*!< CC312_SRAM_TO_DIN_INT (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_HOST_RGF_SIGNATURE_REG ============================================== */ + #define CC312_CC312_HOST_RGF_SIGNATURE_REG_CC312_HOST_SIGNATURE_Pos (0UL) /*!< CC312_HOST_SIGNATURE (Bit 0) */ + #define CC312_CC312_HOST_RGF_SIGNATURE_REG_CC312_HOST_SIGNATURE_Msk (0xffffffffUL) /*!< CC312_HOST_SIGNATURE (Bitfield-Mask: 0xffffffff) */ +/* =========================================== CC312_HOST_SHADOW_KCEICV_REG_REG ============================================ */ + #define CC312_CC312_HOST_SHADOW_KCEICV_REG_REG_CC312_HOST_SHADOW_KCEICV_REG_Pos (0UL) /*!< CC312_HOST_SHADOW_KCEICV_REG (Bit 0) */ + #define CC312_CC312_HOST_SHADOW_KCEICV_REG_REG_CC312_HOST_SHADOW_KCEICV_REG_Msk (0x1UL) /*!< CC312_HOST_SHADOW_KCEICV_REG (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_HOST_SHADOW_KCE_REG_REG ============================================= */ + #define CC312_CC312_HOST_SHADOW_KCE_REG_REG_CC312_HOST_SHADOW_KCE_REG_Pos (0UL) /*!< CC312_HOST_SHADOW_KCE_REG (Bit 0) */ + #define CC312_CC312_HOST_SHADOW_KCE_REG_REG_CC312_HOST_SHADOW_KCE_REG_Msk (0x1UL) /*!< CC312_HOST_SHADOW_KCE_REG (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_HOST_SHADOW_KCP_REG_REG ============================================= */ + #define CC312_CC312_HOST_SHADOW_KCP_REG_REG_CC312_HOST_SHADOW_KCP_REG_Pos (0UL) /*!< CC312_HOST_SHADOW_KCP_REG (Bit 0) */ + #define CC312_CC312_HOST_SHADOW_KCP_REG_REG_CC312_HOST_SHADOW_KCP_REG_Msk (0x1UL) /*!< CC312_HOST_SHADOW_KCP_REG (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_HOST_SHADOW_KDR_REG_REG ============================================= */ + #define CC312_CC312_HOST_SHADOW_KDR_REG_REG_CC312_HOST_SHADOW_KDR_REG_Pos (0UL) /*!< CC312_HOST_SHADOW_KDR_REG (Bit 0) */ + #define CC312_CC312_HOST_SHADOW_KDR_REG_REG_CC312_HOST_SHADOW_KDR_REG_Msk (0x1UL) /*!< CC312_HOST_SHADOW_KDR_REG (Bitfield-Mask: 0x01) */ +/* ============================================ CC312_HOST_SHADOW_KPICV_REG_REG ============================================ */ + #define CC312_CC312_HOST_SHADOW_KPICV_REG_REG_CC312_HOST_SHADOW_KPICV_REG_Pos (0UL) /*!< CC312_HOST_SHADOW_KPICV_REG (Bit 0) */ + #define CC312_CC312_HOST_SHADOW_KPICV_REG_REG_CC312_HOST_SHADOW_KPICV_REG_Msk (0x1UL) /*!< CC312_HOST_SHADOW_KPICV_REG (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_LCS_IS_VALID_REG ================================================= */ + #define CC312_CC312_LCS_IS_VALID_REG_CC312_LCS_IS_VALID_Pos (0UL) /*!< CC312_LCS_IS_VALID (Bit 0) */ + #define CC312_CC312_LCS_IS_VALID_REG_CC312_LCS_IS_VALID_Msk (0x1UL) /*!< CC312_LCS_IS_VALID (Bitfield-Mask: 0x01) */ +/* =================================================== CC312_LCS_REG_REG =================================================== */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_KCEICV_ZERO_CNT_Pos (12UL) /*!< CC312_ERROR_KCEICV_ZERO_CNT (Bit 12) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_KCEICV_ZERO_CNT_Msk (0x1000UL) /*!< CC312_ERROR_KCEICV_ZERO_CNT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_KPICV_ZERO_CNT_Pos (11UL) /*!< CC312_ERROR_KPICV_ZERO_CNT (Bit 11) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_KPICV_ZERO_CNT_Msk (0x800UL) /*!< CC312_ERROR_KPICV_ZERO_CNT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_KCE_ZERO_CNT_Pos (10UL) /*!< CC312_ERROR_KCE_ZERO_CNT (Bit 10) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_KCE_ZERO_CNT_Msk (0x400UL) /*!< CC312_ERROR_KCE_ZERO_CNT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_PROV_ZERO_CNT_Pos (9UL) /*!< CC312_ERROR_PROV_ZERO_CNT (Bit 9) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_PROV_ZERO_CNT_Msk (0x200UL) /*!< CC312_ERROR_PROV_ZERO_CNT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_KDR_ZERO_CNT_Pos (8UL) /*!< CC312_ERROR_KDR_ZERO_CNT (Bit 8) */ + #define CC312_CC312_LCS_REG_REG_CC312_ERROR_KDR_ZERO_CNT_Msk (0x100UL) /*!< CC312_ERROR_KDR_ZERO_CNT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_LCS_REG_REG_CC312_LCS_REG_Pos (0UL) /*!< CC312_LCS_REG (Bit 0) */ + #define CC312_CC312_LCS_REG_REG_CC312_LCS_REG_Msk (0x7UL) /*!< CC312_LCS_REG (Bitfield-Mask: 0x07) */ +/* =============================================== CC312_LOAD_INIT_STATE_REG =============================================== */ + #define CC312_CC312_LOAD_INIT_STATE_REG_CC312_LOAD_Pos (0UL) /*!< CC312_LOAD (Bit 0) */ + #define CC312_CC312_LOAD_INIT_STATE_REG_CC312_LOAD_Msk (0x1UL) /*!< CC312_LOAD (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_MEMORY_MAP0_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP0_REG_CC312_MEMORY_MAP0_Pos (1UL) /*!< CC312_MEMORY_MAP0 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP0_REG_CC312_MEMORY_MAP0_Msk (0x7feUL) /*!< CC312_MEMORY_MAP0 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP10_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP10_REG_CC312_MEMORY_MAP10_Pos (1UL) /*!< CC312_MEMORY_MAP10 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP10_REG_CC312_MEMORY_MAP10_Msk (0x7feUL) /*!< CC312_MEMORY_MAP10 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP11_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP11_REG_CC312_MEMORY_MAP11_Pos (1UL) /*!< CC312_MEMORY_MAP11 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP11_REG_CC312_MEMORY_MAP11_Msk (0x7feUL) /*!< CC312_MEMORY_MAP11 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP12_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP12_REG_CC312_MEMORY_MAP12_Pos (1UL) /*!< CC312_MEMORY_MAP12 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP12_REG_CC312_MEMORY_MAP12_Msk (0x7feUL) /*!< CC312_MEMORY_MAP12 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP13_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP13_REG_CC312_MEMORY_MAP13_Pos (1UL) /*!< CC312_MEMORY_MAP13 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP13_REG_CC312_MEMORY_MAP13_Msk (0x7feUL) /*!< CC312_MEMORY_MAP13 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP14_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP14_REG_CC312_MEMORY_MAP14_Pos (1UL) /*!< CC312_MEMORY_MAP14 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP14_REG_CC312_MEMORY_MAP14_Msk (0x7feUL) /*!< CC312_MEMORY_MAP14 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP15_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP15_REG_CC312_MEMORY_MAP15_Pos (1UL) /*!< CC312_MEMORY_MAP15 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP15_REG_CC312_MEMORY_MAP15_Msk (0x7feUL) /*!< CC312_MEMORY_MAP15 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP16_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP16_REG_CC312_MEMORY_MAP16_Pos (1UL) /*!< CC312_MEMORY_MAP16 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP16_REG_CC312_MEMORY_MAP16_Msk (0x7feUL) /*!< CC312_MEMORY_MAP16 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP17_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP17_REG_CC312_MEMORY_MAP17_Pos (1UL) /*!< CC312_MEMORY_MAP17 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP17_REG_CC312_MEMORY_MAP17_Msk (0x7feUL) /*!< CC312_MEMORY_MAP17 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP18_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP18_REG_CC312_MEMORY_MAP18_Pos (1UL) /*!< CC312_MEMORY_MAP18 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP18_REG_CC312_MEMORY_MAP18_Msk (0x7feUL) /*!< CC312_MEMORY_MAP18 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP19_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP19_REG_CC312_MEMORY_MAP19_Pos (1UL) /*!< CC312_MEMORY_MAP19 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP19_REG_CC312_MEMORY_MAP19_Msk (0x7feUL) /*!< CC312_MEMORY_MAP19 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP1_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP1_REG_CC312_MEMORY_MAP1_Pos (1UL) /*!< CC312_MEMORY_MAP1 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP1_REG_CC312_MEMORY_MAP1_Msk (0x7feUL) /*!< CC312_MEMORY_MAP1 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP20_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP20_REG_CC312_MEMORY_MAP20_Pos (1UL) /*!< CC312_MEMORY_MAP20 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP20_REG_CC312_MEMORY_MAP20_Msk (0x7feUL) /*!< CC312_MEMORY_MAP20 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP21_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP21_REG_CC312_MEMORY_MAP21_Pos (1UL) /*!< CC312_MEMORY_MAP21 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP21_REG_CC312_MEMORY_MAP21_Msk (0x7feUL) /*!< CC312_MEMORY_MAP21 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP22_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP22_REG_CC312_MEMORY_MAP22_Pos (1UL) /*!< CC312_MEMORY_MAP22 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP22_REG_CC312_MEMORY_MAP22_Msk (0x7feUL) /*!< CC312_MEMORY_MAP22 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP23_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP23_REG_CC312_MEMORY_MAP23_Pos (1UL) /*!< CC312_MEMORY_MAP23 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP23_REG_CC312_MEMORY_MAP23_Msk (0x7feUL) /*!< CC312_MEMORY_MAP23 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP24_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP24_REG_CC312_MEMORY_MAP24_Pos (1UL) /*!< CC312_MEMORY_MAP24 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP24_REG_CC312_MEMORY_MAP24_Msk (0x7feUL) /*!< CC312_MEMORY_MAP24 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP25_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP25_REG_CC312_MEMORY_MAP25_Pos (1UL) /*!< CC312_MEMORY_MAP25 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP25_REG_CC312_MEMORY_MAP25_Msk (0x7feUL) /*!< CC312_MEMORY_MAP25 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP26_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP26_REG_CC312_MEMORY_MAP26_Pos (1UL) /*!< CC312_MEMORY_MAP26 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP26_REG_CC312_MEMORY_MAP26_Msk (0x7feUL) /*!< CC312_MEMORY_MAP26 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP27_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP27_REG_CC312_MEMORY_MAP27_Pos (1UL) /*!< CC312_MEMORY_MAP27 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP27_REG_CC312_MEMORY_MAP27_Msk (0x7feUL) /*!< CC312_MEMORY_MAP27 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP28_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP28_REG_CC312_MEMORY_MAP28_Pos (1UL) /*!< CC312_MEMORY_MAP28 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP28_REG_CC312_MEMORY_MAP28_Msk (0x7feUL) /*!< CC312_MEMORY_MAP28 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP29_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP29_REG_CC312_MEMORY_MAP29_Pos (1UL) /*!< CC312_MEMORY_MAP29 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP29_REG_CC312_MEMORY_MAP29_Msk (0x7feUL) /*!< CC312_MEMORY_MAP29 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP2_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP2_REG_CC312_MEMORY_MAP2_Pos (1UL) /*!< CC312_MEMORY_MAP2 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP2_REG_CC312_MEMORY_MAP2_Msk (0x7feUL) /*!< CC312_MEMORY_MAP2 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP30_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP30_REG_CC312_MEMORY_MAP30_Pos (1UL) /*!< CC312_MEMORY_MAP30 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP30_REG_CC312_MEMORY_MAP30_Msk (0x7feUL) /*!< CC312_MEMORY_MAP30 (Bitfield-Mask: 0x3ff) */ +/* ================================================ CC312_MEMORY_MAP31_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP31_REG_CC312_MEMORY_MAP31_Pos (1UL) /*!< CC312_MEMORY_MAP31 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP31_REG_CC312_MEMORY_MAP31_Msk (0x7feUL) /*!< CC312_MEMORY_MAP31 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP3_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP3_REG_CC312_MEMORY_MAP3_Pos (1UL) /*!< CC312_MEMORY_MAP3 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP3_REG_CC312_MEMORY_MAP3_Msk (0x7feUL) /*!< CC312_MEMORY_MAP3 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP4_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP4_REG_CC312_MEMORY_MAP4_Pos (1UL) /*!< CC312_MEMORY_MAP4 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP4_REG_CC312_MEMORY_MAP4_Msk (0x7feUL) /*!< CC312_MEMORY_MAP4 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP5_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP5_REG_CC312_MEMORY_MAP5_Pos (1UL) /*!< CC312_MEMORY_MAP5 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP5_REG_CC312_MEMORY_MAP5_Msk (0x7feUL) /*!< CC312_MEMORY_MAP5 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP6_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP6_REG_CC312_MEMORY_MAP6_Pos (1UL) /*!< CC312_MEMORY_MAP6 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP6_REG_CC312_MEMORY_MAP6_Msk (0x7feUL) /*!< CC312_MEMORY_MAP6 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP7_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP7_REG_CC312_MEMORY_MAP7_Pos (1UL) /*!< CC312_MEMORY_MAP7 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP7_REG_CC312_MEMORY_MAP7_Msk (0x7feUL) /*!< CC312_MEMORY_MAP7 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP8_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP8_REG_CC312_MEMORY_MAP8_Pos (1UL) /*!< CC312_MEMORY_MAP8 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP8_REG_CC312_MEMORY_MAP8_Msk (0x7feUL) /*!< CC312_MEMORY_MAP8 (Bitfield-Mask: 0x3ff) */ +/* ================================================= CC312_MEMORY_MAP9_REG ================================================= */ + #define CC312_CC312_MEMORY_MAP9_REG_CC312_MEMORY_MAP9_Pos (1UL) /*!< CC312_MEMORY_MAP9 (Bit 1) */ + #define CC312_CC312_MEMORY_MAP9_REG_CC312_MEMORY_MAP9_Msk (0x7feUL) /*!< CC312_MEMORY_MAP9 (Bitfield-Mask: 0x3ff) */ +/* ============================================== CC312_NVM_DEBUG_STATUS_REG =============================================== */ + #define CC312_CC312_NVM_DEBUG_STATUS_REG_CC312_NVM_SM_Pos (1UL) /*!< CC312_NVM_SM (Bit 1) */ + #define CC312_CC312_NVM_DEBUG_STATUS_REG_CC312_NVM_SM_Msk (0xeUL) /*!< CC312_NVM_SM (Bitfield-Mask: 0x07) */ +/* ================================================= CC312_NVM_IS_IDLE_REG ================================================= */ + #define CC312_CC312_NVM_IS_IDLE_REG_CC312_NVM_IS_IDLE_STATUS_Pos (0UL) /*!< CC312_NVM_IS_IDLE_STATUS (Bit 0) */ + #define CC312_CC312_NVM_IS_IDLE_REG_CC312_NVM_IS_IDLE_STATUS_Msk (0x1UL) /*!< CC312_NVM_IS_IDLE_STATUS (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_N_NP_T0_T1_ADDR_REG =============================================== */ + #define CC312_CC312_N_NP_T0_T1_ADDR_REG_CC312_T1_VIRTUAL_ADDR_Pos (15UL) /*!< CC312_T1_VIRTUAL_ADDR (Bit 15) */ + #define CC312_CC312_N_NP_T0_T1_ADDR_REG_CC312_T1_VIRTUAL_ADDR_Msk (0xf8000UL) /*!< CC312_T1_VIRTUAL_ADDR (Bitfield-Mask: 0x1f) */ + #define CC312_CC312_N_NP_T0_T1_ADDR_REG_CC312_T0_VIRTUAL_ADDR_Pos (10UL) /*!< CC312_T0_VIRTUAL_ADDR (Bit 10) */ + #define CC312_CC312_N_NP_T0_T1_ADDR_REG_CC312_T0_VIRTUAL_ADDR_Msk (0x7c00UL) /*!< CC312_T0_VIRTUAL_ADDR (Bitfield-Mask: 0x1f) */ + #define CC312_CC312_N_NP_T0_T1_ADDR_REG_CC312_NP_VIRTUAL_ADDR_Pos (5UL) /*!< CC312_NP_VIRTUAL_ADDR (Bit 5) */ + #define CC312_CC312_N_NP_T0_T1_ADDR_REG_CC312_NP_VIRTUAL_ADDR_Msk (0x3e0UL) /*!< CC312_NP_VIRTUAL_ADDR (Bitfield-Mask: 0x1f) */ + #define CC312_CC312_N_NP_T0_T1_ADDR_REG_CC312_N_VIRTUAL_ADDR_Pos (0UL) /*!< CC312_N_VIRTUAL_ADDR (Bit 0) */ + #define CC312_CC312_N_NP_T0_T1_ADDR_REG_CC312_N_VIRTUAL_ADDR_Msk (0x1fUL) /*!< CC312_N_VIRTUAL_ADDR (Bitfield-Mask: 0x1f) */ +/* =================================================== CC312_OPCODE_REG ==================================================== */ + #define CC312_CC312_OPCODE_REG_CC312_PKA_OPCODE_Pos (27UL) /*!< CC312_PKA_OPCODE (Bit 27) */ + #define CC312_CC312_OPCODE_REG_CC312_PKA_OPCODE_Msk (0xf8000000UL) /*!< CC312_PKA_OPCODE (Bitfield-Mask: 0x1f) */ + #define CC312_CC312_OPCODE_REG_CC312_LEN_Pos (24UL) /*!< CC312_LEN (Bit 24) */ + #define CC312_CC312_OPCODE_REG_CC312_LEN_Msk (0x7000000UL) /*!< CC312_LEN (Bitfield-Mask: 0x07) */ + #define CC312_CC312_OPCODE_REG_CC312_REG_A_Pos (18UL) /*!< CC312_REG_A (Bit 18) */ + #define CC312_CC312_OPCODE_REG_CC312_REG_A_Msk (0xfc0000UL) /*!< CC312_REG_A (Bitfield-Mask: 0x3f) */ + #define CC312_CC312_OPCODE_REG_CC312_REG_B_Pos (12UL) /*!< CC312_REG_B (Bit 12) */ + #define CC312_CC312_OPCODE_REG_CC312_REG_B_Msk (0x3f000UL) /*!< CC312_REG_B (Bitfield-Mask: 0x3f) */ + #define CC312_CC312_OPCODE_REG_CC312_REG_R_Pos (6UL) /*!< CC312_REG_R (Bit 6) */ + #define CC312_CC312_OPCODE_REG_CC312_REG_R_Msk (0xfc0UL) /*!< CC312_REG_R (Bitfield-Mask: 0x3f) */ + #define CC312_CC312_OPCODE_REG_CC312_TAG_Pos (0UL) /*!< CC312_TAG (Bit 0) */ + #define CC312_CC312_OPCODE_REG_CC312_TAG_Msk (0x3fUL) /*!< CC312_TAG (Bitfield-Mask: 0x3f) */ +/* ============================================= CC312_OTP_ADDR_WIDTH_DEF_REG ============================================== */ + #define CC312_CC312_OTP_ADDR_WIDTH_DEF_REG_CC312_OTP_ADDR_WIDTH_DEF_Pos (0UL) /*!< CC312_OTP_ADDR_WIDTH_DEF (Bit 0) */ + #define CC312_CC312_OTP_ADDR_WIDTH_DEF_REG_CC312_OTP_ADDR_WIDTH_DEF_Msk (0xfUL) /*!< CC312_OTP_ADDR_WIDTH_DEF (Bitfield-Mask: 0x0f) */ +/* =============================================== CC312_PERIPHERAL_ID_0_REG =============================================== */ + #define CC312_CC312_PERIPHERAL_ID_0_REG_CC312_PART_0_Pos (0UL) /*!< CC312_PART_0 (Bit 0) */ + #define CC312_CC312_PERIPHERAL_ID_0_REG_CC312_PART_0_Msk (0xffUL) /*!< CC312_PART_0 (Bitfield-Mask: 0xff) */ +/* =============================================== CC312_PERIPHERAL_ID_1_REG =============================================== */ + #define CC312_CC312_PERIPHERAL_ID_1_REG_CC312_DES_0_JEP106_Pos (4UL) /*!< CC312_DES_0_JEP106 (Bit 4) */ + #define CC312_CC312_PERIPHERAL_ID_1_REG_CC312_DES_0_JEP106_Msk (0xf0UL) /*!< CC312_DES_0_JEP106 (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_PERIPHERAL_ID_1_REG_CC312_PART_1_Pos (0UL) /*!< CC312_PART_1 (Bit 0) */ + #define CC312_CC312_PERIPHERAL_ID_1_REG_CC312_PART_1_Msk (0xfUL) /*!< CC312_PART_1 (Bitfield-Mask: 0x0f) */ +/* =============================================== CC312_PERIPHERAL_ID_2_REG =============================================== */ + #define CC312_CC312_PERIPHERAL_ID_2_REG_CC312_REVISION_Pos (4UL) /*!< CC312_REVISION (Bit 4) */ + #define CC312_CC312_PERIPHERAL_ID_2_REG_CC312_REVISION_Msk (0xf0UL) /*!< CC312_REVISION (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_PERIPHERAL_ID_2_REG_CC312_JEDEC_Pos (3UL) /*!< CC312_JEDEC (Bit 3) */ + #define CC312_CC312_PERIPHERAL_ID_2_REG_CC312_JEDEC_Msk (0x8UL) /*!< CC312_JEDEC (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PERIPHERAL_ID_2_REG_CC312_DES_1_JEP106_Pos (0UL) /*!< CC312_DES_1_JEP106 (Bit 0) */ + #define CC312_CC312_PERIPHERAL_ID_2_REG_CC312_DES_1_JEP106_Msk (0x7UL) /*!< CC312_DES_1_JEP106 (Bitfield-Mask: 0x07) */ +/* =============================================== CC312_PERIPHERAL_ID_3_REG =============================================== */ + #define CC312_CC312_PERIPHERAL_ID_3_REG_CC312_REVAND_Pos (4UL) /*!< CC312_REVAND (Bit 4) */ + #define CC312_CC312_PERIPHERAL_ID_3_REG_CC312_REVAND_Msk (0xf0UL) /*!< CC312_REVAND (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_PERIPHERAL_ID_3_REG_CC312_CMOD_Pos (0UL) /*!< CC312_CMOD (Bit 0) */ + #define CC312_CC312_PERIPHERAL_ID_3_REG_CC312_CMOD_Msk (0xfUL) /*!< CC312_CMOD (Bitfield-Mask: 0x0f) */ +/* =============================================== CC312_PERIPHERAL_ID_4_REG =============================================== */ + #define CC312_CC312_PERIPHERAL_ID_4_REG_CC312_DES_2_JEP106_Pos (0UL) /*!< CC312_DES_2_JEP106 (Bit 0) */ + #define CC312_CC312_PERIPHERAL_ID_4_REG_CC312_DES_2_JEP106_Msk (0xfUL) /*!< CC312_DES_2_JEP106 (Bitfield-Mask: 0x0f) */ +/* ================================================ CC312_PIDRESERVED0_REG ================================================= */ +/* ================================================ CC312_PIDRESERVED1_REG ================================================= */ +/* ================================================ CC312_PIDRESERVED2_REG ================================================= */ +/* ================================================ CC312_PKA_BUFF_ADDR_REG ================================================ */ + #define CC312_CC312_PKA_BUFF_ADDR_REG_CC312_PKA_BUF_ADDR_Pos (0UL) /*!< CC312_PKA_BUF_ADDR (Bit 0) */ + #define CC312_CC312_PKA_BUFF_ADDR_REG_CC312_PKA_BUF_ADDR_Msk (0xfffUL) /*!< CC312_PKA_BUF_ADDR (Bitfield-Mask: 0xfff) */ +/* =============================================== CC312_PKA_CLK_ENABLE_REG ================================================ */ + #define CC312_CC312_PKA_CLK_ENABLE_REG_CC312_PKA_CLK_EN_Pos (0UL) /*!< CC312_PKA_CLK_EN (Bit 0) */ + #define CC312_CC312_PKA_CLK_ENABLE_REG_CC312_PKA_CLK_EN_Msk (0x1UL) /*!< CC312_PKA_CLK_EN (Bitfield-Mask: 0x01) */ +/* ================================================== CC312_PKA_DONE_REG =================================================== */ + #define CC312_CC312_PKA_DONE_REG_CC312_PKA_DONE_Pos (0UL) /*!< CC312_PKA_DONE (Bit 0) */ + #define CC312_CC312_PKA_DONE_REG_CC312_PKA_DONE_Msk (0x1UL) /*!< CC312_PKA_DONE (Bitfield-Mask: 0x01) */ +/* =================================================== CC312_PKA_L0_REG ==================================================== */ + #define CC312_CC312_PKA_L0_REG_CC312_PKA_L0_Pos (0UL) /*!< CC312_PKA_L0 (Bit 0) */ + #define CC312_CC312_PKA_L0_REG_CC312_PKA_L0_Msk (0x1fffUL) /*!< CC312_PKA_L0 (Bitfield-Mask: 0x1fff) */ +/* =================================================== CC312_PKA_L1_REG ==================================================== */ + #define CC312_CC312_PKA_L1_REG_CC312_PKA_L1_Pos (0UL) /*!< CC312_PKA_L1 (Bit 0) */ + #define CC312_CC312_PKA_L1_REG_CC312_PKA_L1_Msk (0x1fffUL) /*!< CC312_PKA_L1 (Bitfield-Mask: 0x1fff) */ +/* =================================================== CC312_PKA_L2_REG ==================================================== */ + #define CC312_CC312_PKA_L2_REG_CC312_PKA_L2_Pos (0UL) /*!< CC312_PKA_L2 (Bit 0) */ + #define CC312_CC312_PKA_L2_REG_CC312_PKA_L2_Msk (0x1fffUL) /*!< CC312_PKA_L2 (Bitfield-Mask: 0x1fff) */ +/* =================================================== CC312_PKA_L3_REG ==================================================== */ + #define CC312_CC312_PKA_L3_REG_CC312_PKA_L3_Pos (0UL) /*!< CC312_PKA_L3 (Bit 0) */ + #define CC312_CC312_PKA_L3_REG_CC312_PKA_L3_Msk (0x1fffUL) /*!< CC312_PKA_L3 (Bitfield-Mask: 0x1fff) */ +/* =================================================== CC312_PKA_L4_REG ==================================================== */ + #define CC312_CC312_PKA_L4_REG_CC312_PKA_L4_Pos (0UL) /*!< CC312_PKA_L4 (Bit 0) */ + #define CC312_CC312_PKA_L4_REG_CC312_PKA_L4_Msk (0x1fffUL) /*!< CC312_PKA_L4 (Bitfield-Mask: 0x1fff) */ +/* =================================================== CC312_PKA_L5_REG ==================================================== */ + #define CC312_CC312_PKA_L5_REG_CC312_PKA_L5_Pos (0UL) /*!< CC312_PKA_L5 (Bit 0) */ + #define CC312_CC312_PKA_L5_REG_CC312_PKA_L5_Msk (0x1fffUL) /*!< CC312_PKA_L5 (Bitfield-Mask: 0x1fff) */ +/* =================================================== CC312_PKA_L6_REG ==================================================== */ + #define CC312_CC312_PKA_L6_REG_CC312_PKA_L6_Pos (0UL) /*!< CC312_PKA_L6 (Bit 0) */ + #define CC312_CC312_PKA_L6_REG_CC312_PKA_L6_Msk (0x1fffUL) /*!< CC312_PKA_L6 (Bitfield-Mask: 0x1fff) */ +/* =================================================== CC312_PKA_L7_REG ==================================================== */ + #define CC312_CC312_PKA_L7_REG_CC312_PKA_L7_Pos (0UL) /*!< CC312_PKA_L7 (Bit 0) */ + #define CC312_CC312_PKA_L7_REG_CC312_PKA_L7_Msk (0x1fffUL) /*!< CC312_PKA_L7 (Bitfield-Mask: 0x1fff) */ +/* ================================================ CC312_PKA_MON_READ_REG ================================================= */ + #define CC312_CC312_PKA_MON_READ_REG_CC312_PKA_MON_READ_Pos (0UL) /*!< CC312_PKA_MON_READ (Bit 0) */ + #define CC312_CC312_PKA_MON_READ_REG_CC312_PKA_MON_READ_Msk (0xffffffffUL) /*!< CC312_PKA_MON_READ (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_PKA_MON_SELECT_REG ================================================ */ + #define CC312_CC312_PKA_MON_SELECT_REG_CC312_PKA_MON_SELECT_Pos (0UL) /*!< CC312_PKA_MON_SELECT (Bit 0) */ + #define CC312_CC312_PKA_MON_SELECT_REG_CC312_PKA_MON_SELECT_Msk (0xfUL) /*!< CC312_PKA_MON_SELECT (Bitfield-Mask: 0x0f) */ +/* ================================================ CC312_PKA_PIPE_RDY_REG ================================================= */ + #define CC312_CC312_PKA_PIPE_RDY_REG_CC312_PKA_PIPE_RDY_Pos (0UL) /*!< CC312_PKA_PIPE_RDY (Bit 0) */ + #define CC312_CC312_PKA_PIPE_RDY_REG_CC312_PKA_PIPE_RDY_Msk (0x1UL) /*!< CC312_PKA_PIPE_RDY (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_PKA_SRAM_ADDR_REG ================================================ */ + #define CC312_CC312_PKA_SRAM_ADDR_REG_CC312_PKA_SRAM_ADDR_Pos (0UL) /*!< CC312_PKA_SRAM_ADDR (Bit 0) */ + #define CC312_CC312_PKA_SRAM_ADDR_REG_CC312_PKA_SRAM_ADDR_Msk (0xffffffffUL) /*!< CC312_PKA_SRAM_ADDR (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_PKA_SRAM_RADDR_REG ================================================ */ + #define CC312_CC312_PKA_SRAM_RADDR_REG_CC312_PKA_SRAM_RADDR_Pos (0UL) /*!< CC312_PKA_SRAM_RADDR (Bit 0) */ + #define CC312_CC312_PKA_SRAM_RADDR_REG_CC312_PKA_SRAM_RADDR_Msk (0xffffffffUL) /*!< CC312_PKA_SRAM_RADDR (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_PKA_SRAM_RDATA_REG ================================================ */ + #define CC312_CC312_PKA_SRAM_RDATA_REG_CC312_PKA_SRAM_RDATA_Pos (0UL) /*!< CC312_PKA_SRAM_RDATA (Bit 0) */ + #define CC312_CC312_PKA_SRAM_RDATA_REG_CC312_PKA_SRAM_RDATA_Msk (0xffffffffUL) /*!< CC312_PKA_SRAM_RDATA (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_PKA_SRAM_WDATA_REG ================================================ */ + #define CC312_CC312_PKA_SRAM_WDATA_REG_CC312_PKA_SRAM_WDATA_Pos (0UL) /*!< CC312_PKA_SRAM_WDATA (Bit 0) */ + #define CC312_CC312_PKA_SRAM_WDATA_REG_CC312_PKA_SRAM_WDATA_Msk (0xffffffffUL) /*!< CC312_PKA_SRAM_WDATA (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_PKA_SRAM_WR_CLR_REG =============================================== */ + #define CC312_CC312_PKA_SRAM_WR_CLR_REG_CC312_PKA_SRAM_WR_CLR_Pos (0UL) /*!< CC312_PKA_SRAM_WR_CLR (Bit 0) */ + #define CC312_CC312_PKA_SRAM_WR_CLR_REG_CC312_PKA_SRAM_WR_CLR_Msk (0xffffffffUL) /*!< CC312_PKA_SRAM_WR_CLR (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CC312_PKA_STATUS_REG ================================================== */ + #define CC312_CC312_PKA_STATUS_REG_CC312_LAST_OPCODE_Pos (16UL) /*!< CC312_LAST_OPCODE (Bit 16) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_LAST_OPCODE_Msk (0x1f0000UL) /*!< CC312_LAST_OPCODE (Bitfield-Mask: 0x1f) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_MODINV_OF_ZERO_Pos (15UL) /*!< CC312_MODINV_OF_ZERO (Bit 15) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_MODINV_OF_ZERO_Msk (0x8000UL) /*!< CC312_MODINV_OF_ZERO (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_DIV_BY_ZERO_Pos (14UL) /*!< CC312_DIV_BY_ZERO (Bit 14) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_DIV_BY_ZERO_Msk (0x4000UL) /*!< CC312_DIV_BY_ZERO (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_MODOVRFLW_Pos (13UL) /*!< CC312_ALU_MODOVRFLW (Bit 13) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_MODOVRFLW_Msk (0x2000UL) /*!< CC312_ALU_MODOVRFLW (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_OUT_ZERO_Pos (12UL) /*!< CC312_ALU_OUT_ZERO (Bit 12) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_OUT_ZERO_Msk (0x1000UL) /*!< CC312_ALU_OUT_ZERO (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_SUB_IS_ZERO_Pos (11UL) /*!< CC312_ALU_SUB_IS_ZERO (Bit 11) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_SUB_IS_ZERO_Msk (0x800UL) /*!< CC312_ALU_SUB_IS_ZERO (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_CARRY_MOD_Pos (10UL) /*!< CC312_ALU_CARRY_MOD (Bit 10) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_CARRY_MOD_Msk (0x400UL) /*!< CC312_ALU_CARRY_MOD (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_CARRY_Pos (9UL) /*!< CC312_ALU_CARRY (Bit 9) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_CARRY_Msk (0x200UL) /*!< CC312_ALU_CARRY (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_SIGN_OUT_Pos (8UL) /*!< CC312_ALU_SIGN_OUT (Bit 8) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_SIGN_OUT_Msk (0x100UL) /*!< CC312_ALU_SIGN_OUT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_LSB_4BITS_Pos (4UL) /*!< CC312_ALU_LSB_4BITS (Bit 4) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_LSB_4BITS_Msk (0xf0UL) /*!< CC312_ALU_LSB_4BITS (Bitfield-Mask: 0x0f) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_MSB_4BITS_Pos (0UL) /*!< CC312_ALU_MSB_4BITS (Bit 0) */ + #define CC312_CC312_PKA_STATUS_REG_CC312_ALU_MSB_4BITS_Msk (0xfUL) /*!< CC312_ALU_MSB_4BITS (Bitfield-Mask: 0x0f) */ +/* ================================================ CC312_PKA_SW_RESET_REG ================================================= */ + #define CC312_CC312_PKA_SW_RESET_REG_CC312_PKA_SW_RESET_Pos (0UL) /*!< CC312_PKA_SW_RESET (Bit 0) */ + #define CC312_CC312_PKA_SW_RESET_REG_CC312_PKA_SW_RESET_Msk (0x1UL) /*!< CC312_PKA_SW_RESET (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_PKA_VERSION_REG ================================================= */ + #define CC312_CC312_PKA_VERSION_REG_CC312_PKA_VERSION_Pos (0UL) /*!< CC312_PKA_VERSION (Bit 0) */ + #define CC312_CC312_PKA_VERSION_REG_CC312_PKA_VERSION_Msk (0xffffffffUL) /*!< CC312_PKA_VERSION (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_PKA_WORD_ACCESS_REG =============================================== */ + #define CC312_CC312_PKA_WORD_ACCESS_REG_CC312_PKA_WORD_ACCESS_Pos (0UL) /*!< CC312_PKA_WORD_ACCESS (Bit 0) */ + #define CC312_CC312_PKA_WORD_ACCESS_REG_CC312_PKA_WORD_ACCESS_Msk (0xffffffffUL) /*!< CC312_PKA_WORD_ACCESS (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_READ_ALIGN_LAST_REG =============================================== */ + #define CC312_CC312_READ_ALIGN_LAST_REG_CC312_READ_ALIGN_LAST_Pos (0UL) /*!< CC312_READ_ALIGN_LAST (Bit 0) */ + #define CC312_CC312_READ_ALIGN_LAST_REG_CC312_READ_ALIGN_LAST_Msk (0x1UL) /*!< CC312_READ_ALIGN_LAST (Bitfield-Mask: 0x01) */ +/* ============================================== CC312_RND_SOURCE_ENABLE_REG ============================================== */ + #define CC312_CC312_RND_SOURCE_ENABLE_REG_CC312_RND_SRC_EN_Pos (0UL) /*!< CC312_RND_SRC_EN (Bit 0) */ + #define CC312_CC312_RND_SOURCE_ENABLE_REG_CC312_RND_SRC_EN_Msk (0x1UL) /*!< CC312_RND_SRC_EN (Bitfield-Mask: 0x01) */ +/* ================================================== CC312_RNG_BUSY_REG =================================================== */ + #define CC312_CC312_RNG_BUSY_REG_CC312_PRNG_BUSY_Pos (2UL) /*!< CC312_PRNG_BUSY (Bit 2) */ + #define CC312_CC312_RNG_BUSY_REG_CC312_PRNG_BUSY_Msk (0x4UL) /*!< CC312_PRNG_BUSY (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_BUSY_REG_CC312_TRNG_BUSY_Pos (1UL) /*!< CC312_TRNG_BUSY (Bit 1) */ + #define CC312_CC312_RNG_BUSY_REG_CC312_TRNG_BUSY_Msk (0x2UL) /*!< CC312_TRNG_BUSY (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_BUSY_REG_CC312_RNG_BUSY_Pos (0UL) /*!< CC312_RNG_BUSY (Bit 0) */ + #define CC312_CC312_RNG_BUSY_REG_CC312_RNG_BUSY_Msk (0x1UL) /*!< CC312_RNG_BUSY (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_RNG_CLK_ENABLE_REG ================================================ */ + #define CC312_CC312_RNG_CLK_ENABLE_REG_CC312_RNG_CLK_EN_Pos (0UL) /*!< CC312_RNG_CLK_EN (Bit 0) */ + #define CC312_CC312_RNG_CLK_ENABLE_REG_CC312_RNG_CLK_EN_Msk (0x1UL) /*!< CC312_RNG_CLK_EN (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_RNG_DEBUG_EN_INPUT_REG ============================================== */ + #define CC312_CC312_RNG_DEBUG_EN_INPUT_REG_CC312_RNG_DEBUG_EN_Pos (0UL) /*!< CC312_RNG_DEBUG_EN (Bit 0) */ + #define CC312_CC312_RNG_DEBUG_EN_INPUT_REG_CC312_RNG_DEBUG_EN_Msk (0x1UL) /*!< CC312_RNG_DEBUG_EN (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_RNG_DMA_ENABLE_REG ================================================ */ + #define CC312_CC312_RNG_DMA_ENABLE_REG_CC312_RNG_DMA_EN_Pos (0UL) /*!< CC312_RNG_DMA_EN (Bit 0) */ + #define CC312_CC312_RNG_DMA_ENABLE_REG_CC312_RNG_DMA_EN_Msk (0x1UL) /*!< CC312_RNG_DMA_EN (Bitfield-Mask: 0x01) */ +/* ============================================= CC312_RNG_DMA_SAMPLES_NUM_REG ============================================= */ + #define CC312_CC312_RNG_DMA_SAMPLES_NUM_REG_CC312_RNG_SAMPLES_NUM_Pos (0UL) /*!< CC312_RNG_SAMPLES_NUM (Bit 0) */ + #define CC312_CC312_RNG_DMA_SAMPLES_NUM_REG_CC312_RNG_SAMPLES_NUM_Msk (0xffUL) /*!< CC312_RNG_SAMPLES_NUM (Bitfield-Mask: 0xff) */ +/* ============================================== CC312_RNG_DMA_SRAM_ADDR_REG ============================================== */ + #define CC312_CC312_RNG_DMA_SRAM_ADDR_REG_CC312_RNG_SRAM_DMA_ADDR_Pos (0UL) /*!< CC312_RNG_SRAM_DMA_ADDR (Bit 0) */ + #define CC312_CC312_RNG_DMA_SRAM_ADDR_REG_CC312_RNG_SRAM_DMA_ADDR_Msk (0x7ffUL) /*!< CC312_RNG_SRAM_DMA_ADDR (Bitfield-Mask: 0x7ff) */ +/* ============================================== CC312_RNG_DMA_SRC_MASK_REG =============================================== */ + #define CC312_CC312_RNG_DMA_SRC_MASK_REG_CC312_EN_SRC_SEL3_Pos (3UL) /*!< CC312_EN_SRC_SEL3 (Bit 3) */ + #define CC312_CC312_RNG_DMA_SRC_MASK_REG_CC312_EN_SRC_SEL3_Msk (0x8UL) /*!< CC312_EN_SRC_SEL3 (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_DMA_SRC_MASK_REG_CC312_EN_SRC_SEL2_Pos (2UL) /*!< CC312_EN_SRC_SEL2 (Bit 2) */ + #define CC312_CC312_RNG_DMA_SRC_MASK_REG_CC312_EN_SRC_SEL2_Msk (0x4UL) /*!< CC312_EN_SRC_SEL2 (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_DMA_SRC_MASK_REG_CC312_EN_SRC_SEL1_Pos (1UL) /*!< CC312_EN_SRC_SEL1 (Bit 1) */ + #define CC312_CC312_RNG_DMA_SRC_MASK_REG_CC312_EN_SRC_SEL1_Msk (0x2UL) /*!< CC312_EN_SRC_SEL1 (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_DMA_SRC_MASK_REG_CC312_EN_SRC_SEL0_Pos (0UL) /*!< CC312_EN_SRC_SEL0 (Bit 0) */ + #define CC312_CC312_RNG_DMA_SRC_MASK_REG_CC312_EN_SRC_SEL0_Msk (0x1UL) /*!< CC312_EN_SRC_SEL0 (Bitfield-Mask: 0x01) */ +/* =============================================== CC312_RNG_DMA_STATUS_REG ================================================ */ + #define CC312_CC312_RNG_DMA_STATUS_REG_CC312_NUM_OF_SAMPLES_Pos (3UL) /*!< CC312_NUM_OF_SAMPLES (Bit 3) */ + #define CC312_CC312_RNG_DMA_STATUS_REG_CC312_NUM_OF_SAMPLES_Msk (0x7f8UL) /*!< CC312_NUM_OF_SAMPLES (Bitfield-Mask: 0xff) */ + #define CC312_CC312_RNG_DMA_STATUS_REG_CC312_DMA_SRC_SEL_Pos (1UL) /*!< CC312_DMA_SRC_SEL (Bit 1) */ + #define CC312_CC312_RNG_DMA_STATUS_REG_CC312_DMA_SRC_SEL_Msk (0x6UL) /*!< CC312_DMA_SRC_SEL (Bitfield-Mask: 0x03) */ + #define CC312_CC312_RNG_DMA_STATUS_REG_CC312_RNG_DMA_BUSY_Pos (0UL) /*!< CC312_RNG_DMA_BUSY (Bit 0) */ + #define CC312_CC312_RNG_DMA_STATUS_REG_CC312_RNG_DMA_BUSY_Msk (0x1UL) /*!< CC312_RNG_DMA_BUSY (Bitfield-Mask: 0x01) */ +/* =================================================== CC312_RNG_ICR_REG =================================================== */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_WHICH_KAT_ERR_Pos (25UL) /*!< CC312_RNG_ICR_WHICH_KAT_ERR (Bit 25) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_WHICH_KAT_ERR_Msk (0x6000000UL) /*!< CC312_RNG_ICR_WHICH_KAT_ERR (Bitfield-Mask: 0x03) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_KAT_ERR_Pos (24UL) /*!< CC312_RNG_ICR_KAT_ERR (Bit 24) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_KAT_ERR_Msk (0x1000000UL) /*!< CC312_RNG_ICR_KAT_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_REQ_SIZE_Pos (23UL) /*!< CC312_RNG_ICR_REQ_SIZE (Bit 23) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_REQ_SIZE_Msk (0x800000UL) /*!< CC312_RNG_ICR_REQ_SIZE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_PRNG_CRNGT_ERR_Pos (22UL) /*!< CC312_RNG_ICR_PRNG_CRNGT_ERR (Bit 22) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_PRNG_CRNGT_ERR_Msk (0x400000UL) /*!< CC312_RNG_ICR_PRNG_CRNGT_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RESEED_CNTR_TOP_40_Pos (21UL) /*!< CC312_RNG_ICR_RESEED_CNTR_TOP_40 (Bit 21) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RESEED_CNTR_TOP_40_Msk (0x200000UL) /*!< CC312_RNG_ICR_RESEED_CNTR_TOP_40 (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RESEED_CNTR_FULL_Pos (20UL) /*!< CC312_RNG_ICR_RESEED_CNTR_FULL (Bit 20) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RESEED_CNTR_FULL_Msk (0x100000UL) /*!< CC312_RNG_ICR_RESEED_CNTR_FULL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_OUTPUT_READY_Pos (19UL) /*!< CC312_RNG_ICR_OUTPUT_READY (Bit 19) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_OUTPUT_READY_Msk (0x80000UL) /*!< CC312_RNG_ICR_OUTPUT_READY (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_FINAL_UPDATE_DONE_Pos (18UL) /*!< CC312_RNG_ICR_FINAL_UPDATE_DONE (Bit 18) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_FINAL_UPDATE_DONE_Msk (0x40000UL) /*!< CC312_RNG_ICR_FINAL_UPDATE_DONE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_INSTANTIATION_DONE_Pos (17UL) /*!< CC312_RNG_ICR_INSTANTIATION_DONE (Bit 17) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_INSTANTIATION_DONE_Msk (0x20000UL) /*!< CC312_RNG_ICR_INSTANTIATION_DONE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RESEEDING_DONE_Pos (16UL) /*!< CC312_RNG_ICR_RESEEDING_DONE (Bit 16) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RESEEDING_DONE_Msk (0x10000UL) /*!< CC312_RNG_ICR_RESEEDING_DONE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RNG_DMA_DONE_Pos (5UL) /*!< CC312_RNG_ICR_RNG_DMA_DONE (Bit 5) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RNG_DMA_DONE_Msk (0x20UL) /*!< CC312_RNG_ICR_RNG_DMA_DONE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RNG_WATCHDOG_Pos (4UL) /*!< CC312_RNG_ICR_RNG_WATCHDOG (Bit 4) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_RNG_WATCHDOG_Msk (0x10UL) /*!< CC312_RNG_ICR_RNG_WATCHDOG (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_VN_ERR_Pos (3UL) /*!< CC312_RNG_ICR_VN_ERR (Bit 3) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_VN_ERR_Msk (0x8UL) /*!< CC312_RNG_ICR_VN_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_CRNGT_ERR_Pos (2UL) /*!< CC312_RNG_ICR_CRNGT_ERR (Bit 2) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_CRNGT_ERR_Msk (0x4UL) /*!< CC312_RNG_ICR_CRNGT_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_AUTOCORR_ERR_Pos (1UL) /*!< CC312_RNG_ICR_AUTOCORR_ERR (Bit 1) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_AUTOCORR_ERR_Msk (0x2UL) /*!< CC312_RNG_ICR_AUTOCORR_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_EHR_VALID_Pos (0UL) /*!< CC312_RNG_ICR_EHR_VALID (Bit 0) */ + #define CC312_CC312_RNG_ICR_REG_CC312_RNG_ICR_EHR_VALID_Msk (0x1UL) /*!< CC312_RNG_ICR_EHR_VALID (Bitfield-Mask: 0x01) */ +/* =================================================== CC312_RNG_IMR_REG =================================================== */ + #define CC312_CC312_RNG_IMR_REG_CC312_RNG_DMA_DONE_INT_Pos (5UL) /*!< CC312_RNG_DMA_DONE_INT (Bit 5) */ + #define CC312_CC312_RNG_IMR_REG_CC312_RNG_DMA_DONE_INT_Msk (0x20UL) /*!< CC312_RNG_DMA_DONE_INT (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_IMR_REG_CC312_WATCHDOG_INT_MASK_Pos (4UL) /*!< CC312_WATCHDOG_INT_MASK (Bit 4) */ + #define CC312_CC312_RNG_IMR_REG_CC312_WATCHDOG_INT_MASK_Msk (0x10UL) /*!< CC312_WATCHDOG_INT_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_IMR_REG_CC312_VN_ERR_INT_MASK_Pos (3UL) /*!< CC312_VN_ERR_INT_MASK (Bit 3) */ + #define CC312_CC312_RNG_IMR_REG_CC312_VN_ERR_INT_MASK_Msk (0x8UL) /*!< CC312_VN_ERR_INT_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_IMR_REG_CC312_CRNGT_ERR_INT_MASK_Pos (2UL) /*!< CC312_CRNGT_ERR_INT_MASK (Bit 2) */ + #define CC312_CC312_RNG_IMR_REG_CC312_CRNGT_ERR_INT_MASK_Msk (0x4UL) /*!< CC312_CRNGT_ERR_INT_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_IMR_REG_CC312_AUTOCORR_ERR_INT_MASK_Pos (1UL) /*!< CC312_AUTOCORR_ERR_INT_MASK (Bit 1) */ + #define CC312_CC312_RNG_IMR_REG_CC312_AUTOCORR_ERR_INT_MASK_Msk (0x2UL) /*!< CC312_AUTOCORR_ERR_INT_MASK (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_IMR_REG_CC312_EHR_VALID_INT_MASK_Pos (0UL) /*!< CC312_EHR_VALID_INT_MASK (Bit 0) */ + #define CC312_CC312_RNG_IMR_REG_CC312_EHR_VALID_INT_MASK_Msk (0x1UL) /*!< CC312_EHR_VALID_INT_MASK (Bitfield-Mask: 0x01) */ +/* =================================================== CC312_RNG_ISR_REG =================================================== */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_WHICH_KAT_ERR_Pos (25UL) /*!< CC312_RNG_ISR_WHICH_KAT_ERR (Bit 25) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_WHICH_KAT_ERR_Msk (0x6000000UL) /*!< CC312_RNG_ISR_WHICH_KAT_ERR (Bitfield-Mask: 0x03) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_KAT_ERR_Pos (24UL) /*!< CC312_RNG_ISR_KAT_ERR (Bit 24) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_KAT_ERR_Msk (0x1000000UL) /*!< CC312_RNG_ISR_KAT_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_REQ_SIZE_Pos (23UL) /*!< CC312_RNG_ISR_REQ_SIZE (Bit 23) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_REQ_SIZE_Msk (0x800000UL) /*!< CC312_RNG_ISR_REQ_SIZE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_PRNG_CRNGT_ERR_Pos (22UL) /*!< CC312_RNG_ISR_PRNG_CRNGT_ERR (Bit 22) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_PRNG_CRNGT_ERR_Msk (0x400000UL) /*!< CC312_RNG_ISR_PRNG_CRNGT_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_RESEED_CNTR_TOP_40_Pos (21UL) /*!< CC312_RNG_ISR_RESEED_CNTR_TOP_40 (Bit 21) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_RESEED_CNTR_TOP_40_Msk (0x200000UL) /*!< CC312_RNG_ISR_RESEED_CNTR_TOP_40 (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_RESEED_CNTR_FULL_Pos (20UL) /*!< CC312_RNG_ISR_RESEED_CNTR_FULL (Bit 20) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_RESEED_CNTR_FULL_Msk (0x100000UL) /*!< CC312_RNG_ISR_RESEED_CNTR_FULL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_OUTPUT_READY_Pos (19UL) /*!< CC312_RNG_ISR_OUTPUT_READY (Bit 19) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_OUTPUT_READY_Msk (0x80000UL) /*!< CC312_RNG_ISR_OUTPUT_READY (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_FINAL_UPDATE_DONE_Pos (18UL) /*!< CC312_RNG_ISR_FINAL_UPDATE_DONE (Bit 18) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_FINAL_UPDATE_DONE_Msk (0x40000UL) /*!< CC312_RNG_ISR_FINAL_UPDATE_DONE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_INSTANTIATION_DONE_Pos (17UL) /*!< CC312_RNG_ISR_INSTANTIATION_DONE (Bit 17) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_INSTANTIATION_DONE_Msk (0x20000UL) /*!< CC312_RNG_ISR_INSTANTIATION_DONE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_RESEEDING_DONE_Pos (16UL) /*!< CC312_RNG_ISR_RESEEDING_DONE (Bit 16) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_RESEEDING_DONE_Msk (0x10000UL) /*!< CC312_RNG_ISR_RESEEDING_DONE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_DMA_DONE_Pos (5UL) /*!< CC312_RNG_ISR_DMA_DONE (Bit 5) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_DMA_DONE_Msk (0x20UL) /*!< CC312_RNG_ISR_DMA_DONE (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_VN_ERR_Pos (3UL) /*!< CC312_RNG_ISR_VN_ERR (Bit 3) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_VN_ERR_Msk (0x8UL) /*!< CC312_RNG_ISR_VN_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_CRNGT_ERR_Pos (2UL) /*!< CC312_RNG_ISR_CRNGT_ERR (Bit 2) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_CRNGT_ERR_Msk (0x4UL) /*!< CC312_RNG_ISR_CRNGT_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_AUTOCORR_ERR_Pos (1UL) /*!< CC312_RNG_ISR_AUTOCORR_ERR (Bit 1) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_AUTOCORR_ERR_Msk (0x2UL) /*!< CC312_RNG_ISR_AUTOCORR_ERR (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_EHR_VALID_Pos (0UL) /*!< CC312_RNG_ISR_EHR_VALID (Bit 0) */ + #define CC312_CC312_RNG_ISR_REG_CC312_RNG_ISR_EHR_VALID_Msk (0x1UL) /*!< CC312_RNG_ISR_EHR_VALID (Bitfield-Mask: 0x01) */ +/* ================================================ CC312_RNG_SW_RESET_REG ================================================= */ + #define CC312_CC312_RNG_SW_RESET_REG_CC312_RNG_SW_RESET_Pos (0UL) /*!< CC312_RNG_SW_RESET (Bit 0) */ + #define CC312_CC312_RNG_SW_RESET_REG_CC312_RNG_SW_RESET_Msk (0x1UL) /*!< CC312_RNG_SW_RESET (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_RNG_VERSION_REG ================================================= */ + #define CC312_CC312_RNG_VERSION_REG_CC312_RNG_USE_5_SBOXES_Pos (7UL) /*!< CC312_RNG_USE_5_SBOXES (Bit 7) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_RNG_USE_5_SBOXES_Msk (0x80UL) /*!< CC312_RNG_USE_5_SBOXES (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_RESEEDING_EXISTS_Pos (6UL) /*!< CC312_RESEEDING_EXISTS (Bit 6) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_RESEEDING_EXISTS_Msk (0x40UL) /*!< CC312_RESEEDING_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_KAT_EXISTS_Pos (5UL) /*!< CC312_KAT_EXISTS (Bit 5) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_KAT_EXISTS_Msk (0x20UL) /*!< CC312_KAT_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_PRNG_EXISTS_Pos (4UL) /*!< CC312_PRNG_EXISTS (Bit 4) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_PRNG_EXISTS_Msk (0x10UL) /*!< CC312_PRNG_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_TRNG_TESTS_BYPASS_EN_Pos (3UL) /*!< CC312_TRNG_TESTS_BYPASS_EN (Bit 3) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_TRNG_TESTS_BYPASS_EN_Msk (0x8UL) /*!< CC312_TRNG_TESTS_BYPASS_EN (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_AUTOCORR_EXISTS_Pos (2UL) /*!< CC312_AUTOCORR_EXISTS (Bit 2) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_AUTOCORR_EXISTS_Msk (0x4UL) /*!< CC312_AUTOCORR_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_CRNGT_EXISTS_Pos (1UL) /*!< CC312_CRNGT_EXISTS (Bit 1) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_CRNGT_EXISTS_Msk (0x2UL) /*!< CC312_CRNGT_EXISTS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_EHR_WIDTH_192_Pos (0UL) /*!< CC312_EHR_WIDTH_192 (Bit 0) */ + #define CC312_CC312_RNG_VERSION_REG_CC312_EHR_WIDTH_192_Msk (0x1UL) /*!< CC312_EHR_WIDTH_192 (Bitfield-Mask: 0x01) */ +/* ============================================== CC312_RNG_WATCHDOG_VAL_REG =============================================== */ + #define CC312_CC312_RNG_WATCHDOG_VAL_REG_CC312_RNG_WATCHDOG_VAL_Pos (0UL) /*!< CC312_RNG_WATCHDOG_VAL (Bit 0) */ + #define CC312_CC312_RNG_WATCHDOG_VAL_REG_CC312_RNG_WATCHDOG_VAL_Msk (0xffffffffUL) /*!< CC312_RNG_WATCHDOG_VAL (Bitfield-Mask: 0xffffffff) */ +/* ============================================== CC312_RST_BITS_COUNTER_REG =============================================== */ + #define CC312_CC312_RST_BITS_COUNTER_REG_CC312_RST_BITS_COUNTER_Pos (0UL) /*!< CC312_RST_BITS_COUNTER (Bit 0) */ + #define CC312_CC312_RST_BITS_COUNTER_REG_CC312_RST_BITS_COUNTER_Msk (0x1UL) /*!< CC312_RST_BITS_COUNTER (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_SAMPLE_CNT1_REG ================================================= */ + #define CC312_CC312_SAMPLE_CNT1_REG_CC312_SAMPLE_CNTR1_Pos (0UL) /*!< CC312_SAMPLE_CNTR1 (Bit 0) */ + #define CC312_CC312_SAMPLE_CNT1_REG_CC312_SAMPLE_CNTR1_Msk (0xffffffffUL) /*!< CC312_SAMPLE_CNTR1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== CC312_SRAM_ADDR_REG ================================================== */ + #define CC312_CC312_SRAM_ADDR_REG_CC312_SRAM_ADDR_Pos (0UL) /*!< CC312_SRAM_ADDR (Bit 0) */ + #define CC312_CC312_SRAM_ADDR_REG_CC312_SRAM_ADDR_Msk (0x7fffUL) /*!< CC312_SRAM_ADDR (Bitfield-Mask: 0x7fff) */ +/* =============================================== CC312_SRAM_DATA_READY_REG =============================================== */ + #define CC312_CC312_SRAM_DATA_READY_REG_CC312_SRAM_READY_Pos (0UL) /*!< CC312_SRAM_READY (Bit 0) */ + #define CC312_CC312_SRAM_DATA_READY_REG_CC312_SRAM_READY_Msk (0x1UL) /*!< CC312_SRAM_READY (Bitfield-Mask: 0x01) */ +/* ================================================== CC312_SRAM_DATA_REG ================================================== */ + #define CC312_CC312_SRAM_DATA_REG_CC312_SRAM_DATA_Pos (0UL) /*!< CC312_SRAM_DATA (Bit 0) */ + #define CC312_CC312_SRAM_DATA_REG_CC312_SRAM_DATA_Msk (0xffffffffUL) /*!< CC312_SRAM_DATA (Bitfield-Mask: 0xffffffff) */ +/* =============================================== CC312_SRAM_DEST_ADDR_REG ================================================ */ + #define CC312_CC312_SRAM_DEST_ADDR_REG_CC312_SRAM_DEST_Pos (0UL) /*!< CC312_SRAM_DEST (Bit 0) */ + #define CC312_CC312_SRAM_DEST_ADDR_REG_CC312_SRAM_DEST_Msk (0xffffffffUL) /*!< CC312_SRAM_DEST (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_SRAM_SRC_ADDR_REG ================================================ */ + #define CC312_CC312_SRAM_SRC_ADDR_REG_CC312_SRAM_SRC_ADDR_Pos (0UL) /*!< CC312_SRAM_SRC_ADDR (Bit 0) */ + #define CC312_CC312_SRAM_SRC_ADDR_REG_CC312_SRAM_SRC_ADDR_Msk (0xffffffffUL) /*!< CC312_SRAM_SRC_ADDR (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_SRC_LLI_WORD0_REG ================================================ */ + #define CC312_CC312_SRC_LLI_WORD0_REG_CC312_SRC_LLI_WORD0_Pos (0UL) /*!< CC312_SRC_LLI_WORD0 (Bit 0) */ + #define CC312_CC312_SRC_LLI_WORD0_REG_CC312_SRC_LLI_WORD0_Msk (0xffffffffUL) /*!< CC312_SRC_LLI_WORD0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ CC312_SRC_LLI_WORD1_REG ================================================ */ + #define CC312_CC312_SRC_LLI_WORD1_REG_CC312_SRC_LLI_LAST_Pos (31UL) /*!< CC312_SRC_LLI_LAST (Bit 31) */ + #define CC312_CC312_SRC_LLI_WORD1_REG_CC312_SRC_LLI_LAST_Msk (0x80000000UL) /*!< CC312_SRC_LLI_LAST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_SRC_LLI_WORD1_REG_CC312_SRC_LLI_FIRST_Pos (30UL) /*!< CC312_SRC_LLI_FIRST (Bit 30) */ + #define CC312_CC312_SRC_LLI_WORD1_REG_CC312_SRC_LLI_FIRST_Msk (0x40000000UL) /*!< CC312_SRC_LLI_FIRST (Bitfield-Mask: 0x01) */ + #define CC312_CC312_SRC_LLI_WORD1_REG_CC312_SRC_LLI_BYTES_NUM_Pos (0UL) /*!< CC312_SRC_LLI_BYTES_NUM (Bit 0) */ + #define CC312_CC312_SRC_LLI_WORD1_REG_CC312_SRC_LLI_BYTES_NUM_Msk (0x3fffffffUL) /*!< CC312_SRC_LLI_BYTES_NUM (Bitfield-Mask: 0x3fffffff) */ +/* ================================================= CC312_TRNG_CONFIG_REG ================================================= */ + #define CC312_CC312_TRNG_CONFIG_REG_CC312_SOP_SEL_Pos (2UL) /*!< CC312_SOP_SEL (Bit 2) */ + #define CC312_CC312_TRNG_CONFIG_REG_CC312_SOP_SEL_Msk (0x4UL) /*!< CC312_SOP_SEL (Bitfield-Mask: 0x01) */ + #define CC312_CC312_TRNG_CONFIG_REG_CC312_RND_SRC_SEL_Pos (0UL) /*!< CC312_RND_SRC_SEL (Bit 0) */ + #define CC312_CC312_TRNG_CONFIG_REG_CC312_RND_SRC_SEL_Msk (0x3UL) /*!< CC312_RND_SRC_SEL (Bitfield-Mask: 0x03) */ +/* ============================================= CC312_TRNG_DEBUG_CONTROL_REG ============================================== */ + #define CC312_CC312_TRNG_DEBUG_CONTROL_REG_CC312_AUTO_CORRELATE_BYPASS_Pos (3UL) /*!< CC312_AUTO_CORRELATE_BYPASS (Bit 3) */ + #define CC312_CC312_TRNG_DEBUG_CONTROL_REG_CC312_AUTO_CORRELATE_BYPASS_Msk (0x8UL) /*!< CC312_AUTO_CORRELATE_BYPASS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_TRNG_DEBUG_CONTROL_REG_CC312_TRNG_CRNGT_BYPASS_Pos (2UL) /*!< CC312_TRNG_CRNGT_BYPASS (Bit 2) */ + #define CC312_CC312_TRNG_DEBUG_CONTROL_REG_CC312_TRNG_CRNGT_BYPASS_Msk (0x4UL) /*!< CC312_TRNG_CRNGT_BYPASS (Bitfield-Mask: 0x01) */ + #define CC312_CC312_TRNG_DEBUG_CONTROL_REG_CC312_VNC_BYPASS_Pos (1UL) /*!< CC312_VNC_BYPASS (Bit 1) */ + #define CC312_CC312_TRNG_DEBUG_CONTROL_REG_CC312_VNC_BYPASS_Msk (0x2UL) /*!< CC312_VNC_BYPASS (Bitfield-Mask: 0x01) */ +/* ================================================= CC312_TRNG_VALID_REG ================================================== */ + #define CC312_CC312_TRNG_VALID_REG_CC312_TRNG_EHR_VALID_Pos (0UL) /*!< CC312_TRNG_EHR_VALID (Bit 0) */ + #define CC312_CC312_TRNG_VALID_REG_CC312_TRNG_EHR_VALID_Msk (0x1UL) /*!< CC312_TRNG_EHR_VALID (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ CHIP_VERSION ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== CHIP_ID1_REG ====================================================== */ + #define CHIP_VERSION_CHIP_ID1_REG_CHIP_ID1_Pos (0UL) /*!< CHIP_ID1 (Bit 0) */ + #define CHIP_VERSION_CHIP_ID1_REG_CHIP_ID1_Msk (0xffUL) /*!< CHIP_ID1 (Bitfield-Mask: 0xff) */ +/* ===================================================== CHIP_ID2_REG ====================================================== */ + #define CHIP_VERSION_CHIP_ID2_REG_CHIP_ID2_Pos (0UL) /*!< CHIP_ID2 (Bit 0) */ + #define CHIP_VERSION_CHIP_ID2_REG_CHIP_ID2_Msk (0xffUL) /*!< CHIP_ID2 (Bitfield-Mask: 0xff) */ +/* ===================================================== CHIP_ID3_REG ====================================================== */ + #define CHIP_VERSION_CHIP_ID3_REG_CHIP_ID3_Pos (0UL) /*!< CHIP_ID3 (Bit 0) */ + #define CHIP_VERSION_CHIP_ID3_REG_CHIP_ID3_Msk (0xffUL) /*!< CHIP_ID3 (Bitfield-Mask: 0xff) */ +/* ===================================================== CHIP_ID4_REG ====================================================== */ + #define CHIP_VERSION_CHIP_ID4_REG_CHIP_ID4_Pos (0UL) /*!< CHIP_ID4 (Bit 0) */ + #define CHIP_VERSION_CHIP_ID4_REG_CHIP_ID4_Msk (0xffUL) /*!< CHIP_ID4 (Bitfield-Mask: 0xff) */ +/* =================================================== CHIP_REVISION_REG =================================================== */ + #define CHIP_VERSION_CHIP_REVISION_REG_CHIP_REVISION_Pos (0UL) /*!< CHIP_REVISION (Bit 0) */ + #define CHIP_VERSION_CHIP_REVISION_REG_CHIP_REVISION_Msk (0xffUL) /*!< CHIP_REVISION (Bitfield-Mask: 0xff) */ +/* ===================================================== CHIP_SWC_REG ====================================================== */ + #define CHIP_VERSION_CHIP_SWC_REG_CHIP_SWC_Pos (0UL) /*!< CHIP_SWC (Bit 0) */ + #define CHIP_VERSION_CHIP_SWC_REG_CHIP_SWC_Msk (0xfUL) /*!< CHIP_SWC (Bitfield-Mask: 0x0f) */ +/* ==================================================== CHIP_TEST1_REG ===================================================== */ + #define CHIP_VERSION_CHIP_TEST1_REG_CHIP_LAYOUT_REVISION_Pos (0UL) /*!< CHIP_LAYOUT_REVISION (Bit 0) */ + #define CHIP_VERSION_CHIP_TEST1_REG_CHIP_LAYOUT_REVISION_Msk (0xffUL) /*!< CHIP_LAYOUT_REVISION (Bitfield-Mask: 0xff) */ +/* ==================================================== CHIP_TEST2_REG ===================================================== */ + #define CHIP_VERSION_CHIP_TEST2_REG_CHIP_METAL_OPTION_Pos (0UL) /*!< CHIP_METAL_OPTION (Bit 0) */ + #define CHIP_VERSION_CHIP_TEST2_REG_CHIP_METAL_OPTION_Msk (0xfUL) /*!< CHIP_METAL_OPTION (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ CLKCAL_BIF ================ */ +/* =========================================================================================================================== */ + +/* ============================================== ADC_DIG_CAL_WEIGHT_I_0_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_0_REG_adc_dig_cal_weight_i_0_Pos (0UL) /*!< adc_dig_cal_weight_i_0 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_0_REG_adc_dig_cal_weight_i_0_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_0 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_1_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_1_REG_adc_dig_cal_weight_i_1_Pos (0UL) /*!< adc_dig_cal_weight_i_1 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_1_REG_adc_dig_cal_weight_i_1_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_1 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_2_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_2_REG_adc_dig_cal_weight_i_2_Pos (0UL) /*!< adc_dig_cal_weight_i_2 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_2_REG_adc_dig_cal_weight_i_2_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_2 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_3_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_3_REG_adc_dig_cal_weight_i_3_Pos (0UL) /*!< adc_dig_cal_weight_i_3 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_3_REG_adc_dig_cal_weight_i_3_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_4_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_4_REG_adc_dig_cal_weight_i_4_Pos (0UL) /*!< adc_dig_cal_weight_i_4 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_4_REG_adc_dig_cal_weight_i_4_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_4 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_5_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_5_REG_adc_dig_cal_weight_i_5_Pos (0UL) /*!< adc_dig_cal_weight_i_5 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_5_REG_adc_dig_cal_weight_i_5_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_5 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_6_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_6_REG_adc_dig_cal_weight_i_6_Pos (0UL) /*!< adc_dig_cal_weight_i_6 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_6_REG_adc_dig_cal_weight_i_6_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_6 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_7_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_7_REG_adc_dig_cal_weight_i_7_Pos (0UL) /*!< adc_dig_cal_weight_i_7 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_7_REG_adc_dig_cal_weight_i_7_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_7 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_8_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_8_REG_adc_dig_cal_weight_i_8_Pos (0UL) /*!< adc_dig_cal_weight_i_8 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_8_REG_adc_dig_cal_weight_i_8_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_i_8 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_9_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_9_REG_adc_dig_cal_weight_i_9_Pos (0UL) /*!< adc_dig_cal_weight_i_9 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_I_9_REG_adc_dig_cal_weight_i_9_Msk (0x7ffffffUL) /*!< adc_dig_cal_weight_i_9 (Bitfield-Mask: 0x7ffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_0_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_0_REG_adc_dig_cal_weight_q_0_Pos (0UL) /*!< adc_dig_cal_weight_q_0 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_0_REG_adc_dig_cal_weight_q_0_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_0 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_1_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_1_REG_adc_dig_cal_weight_q_1_Pos (0UL) /*!< adc_dig_cal_weight_q_1 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_1_REG_adc_dig_cal_weight_q_1_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_1 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_2_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_2_REG_adc_dig_cal_weight_q_2_Pos (0UL) /*!< adc_dig_cal_weight_q_2 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_2_REG_adc_dig_cal_weight_q_2_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_2 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_3_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_3_REG_adc_dig_cal_weight_q_3_Pos (0UL) /*!< adc_dig_cal_weight_q_3 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_3_REG_adc_dig_cal_weight_q_3_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_4_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_4_REG_adc_dig_cal_weight_q_4_Pos (0UL) /*!< adc_dig_cal_weight_q_4 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_4_REG_adc_dig_cal_weight_q_4_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_4 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_5_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_5_REG_adc_dig_cal_weight_q_5_Pos (0UL) /*!< adc_dig_cal_weight_q_5 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_5_REG_adc_dig_cal_weight_q_5_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_5 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_6_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_6_REG_adc_dig_cal_weight_q_6_Pos (0UL) /*!< adc_dig_cal_weight_q_6 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_6_REG_adc_dig_cal_weight_q_6_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_6 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_7_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_7_REG_adc_dig_cal_weight_q_7_Pos (0UL) /*!< adc_dig_cal_weight_q_7 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_7_REG_adc_dig_cal_weight_q_7_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_7 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_8_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_8_REG_adc_dig_cal_weight_q_8_Pos (0UL) /*!< adc_dig_cal_weight_q_8 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_8_REG_adc_dig_cal_weight_q_8_Msk (0xffffffffUL) /*!< adc_dig_cal_weight_q_8 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_9_REG =============================================== */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_9_REG_adc_dig_cal_weight_q_9_Pos (0UL) /*!< adc_dig_cal_weight_q_9 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_CAL_WEIGHT_Q_9_REG_adc_dig_cal_weight_q_9_Msk (0x7ffffffUL) /*!< adc_dig_cal_weight_q_9 (Bitfield-Mask: 0x7ffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_0_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_0_REG_adc_dig_o_caled_weight_i_0_Pos (0UL) /*!< adc_dig_o_caled_weight_i_0 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_0_REG_adc_dig_o_caled_weight_i_0_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_0 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_1_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_1_REG_adc_dig_o_caled_weight_i_1_Pos (0UL) /*!< adc_dig_o_caled_weight_i_1 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_1_REG_adc_dig_o_caled_weight_i_1_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_1 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_2_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_2_REG_adc_dig_o_caled_weight_i_2_Pos (0UL) /*!< adc_dig_o_caled_weight_i_2 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_2_REG_adc_dig_o_caled_weight_i_2_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_2 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_3_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_3_REG_adc_dig_o_caled_weight_i_3_Pos (0UL) /*!< adc_dig_o_caled_weight_i_3 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_3_REG_adc_dig_o_caled_weight_i_3_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_4_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_4_REG_adc_dig_o_caled_weight_i_4_Pos (0UL) /*!< adc_dig_o_caled_weight_i_4 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_4_REG_adc_dig_o_caled_weight_i_4_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_4 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_5_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_5_REG_adc_dig_o_caled_weight_i_5_Pos (0UL) /*!< adc_dig_o_caled_weight_i_5 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_5_REG_adc_dig_o_caled_weight_i_5_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_5 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_6_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_6_REG_adc_dig_o_caled_weight_i_6_Pos (0UL) /*!< adc_dig_o_caled_weight_i_6 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_6_REG_adc_dig_o_caled_weight_i_6_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_6 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_7_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_7_REG_adc_dig_o_caled_weight_i_7_Pos (0UL) /*!< adc_dig_o_caled_weight_i_7 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_7_REG_adc_dig_o_caled_weight_i_7_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_7 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_8_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_8_REG_adc_dig_o_caled_weight_i_8_Pos (0UL) /*!< adc_dig_o_caled_weight_i_8 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_8_REG_adc_dig_o_caled_weight_i_8_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_i_8 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_9_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_9_REG_adc_dig_o_caled_weight_i_9_Pos (0UL) /*!< adc_dig_o_caled_weight_i_9 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_I_9_REG_adc_dig_o_caled_weight_i_9_Msk (0x7ffffffUL) /*!< adc_dig_o_caled_weight_i_9 (Bitfield-Mask: 0x7ffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_0_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_0_REG_adc_dig_o_caled_weight_q_0_Pos (0UL) /*!< adc_dig_o_caled_weight_q_0 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_0_REG_adc_dig_o_caled_weight_q_0_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_0 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_1_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_1_REG_adc_dig_o_caled_weight_q_1_Pos (0UL) /*!< adc_dig_o_caled_weight_q_1 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_1_REG_adc_dig_o_caled_weight_q_1_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_1 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_2_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_2_REG_adc_dig_o_caled_weight_q_2_Pos (0UL) /*!< adc_dig_o_caled_weight_q_2 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_2_REG_adc_dig_o_caled_weight_q_2_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_2 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_3_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_3_REG_adc_dig_o_caled_weight_q_3_Pos (0UL) /*!< adc_dig_o_caled_weight_q_3 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_3_REG_adc_dig_o_caled_weight_q_3_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_3 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_4_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_4_REG_adc_dig_o_caled_weight_q_4_Pos (0UL) /*!< adc_dig_o_caled_weight_q_4 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_4_REG_adc_dig_o_caled_weight_q_4_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_4 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_5_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_5_REG_adc_dig_o_caled_weight_q_5_Pos (0UL) /*!< adc_dig_o_caled_weight_q_5 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_5_REG_adc_dig_o_caled_weight_q_5_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_5 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_6_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_6_REG_adc_dig_o_caled_weight_q_6_Pos (0UL) /*!< adc_dig_o_caled_weight_q_6 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_6_REG_adc_dig_o_caled_weight_q_6_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_6 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_7_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_7_REG_adc_dig_o_caled_weight_q_7_Pos (0UL) /*!< adc_dig_o_caled_weight_q_7 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_7_REG_adc_dig_o_caled_weight_q_7_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_7 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_8_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_8_REG_adc_dig_o_caled_weight_q_8_Pos (0UL) /*!< adc_dig_o_caled_weight_q_8 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_8_REG_adc_dig_o_caled_weight_q_8_Msk (0xffffffffUL) /*!< adc_dig_o_caled_weight_q_8 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_9_REG ============================================= */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_9_REG_adc_dig_o_caled_weight_q_9_Pos (0UL) /*!< adc_dig_o_caled_weight_q_9 (Bit 0) */ + #define CLKCAL_BIF_ADC_DIG_O_CALED_WEIGHT_Q_9_REG_adc_dig_o_caled_weight_q_9_Msk (0x7ffffffUL) /*!< adc_dig_o_caled_weight_q_9 (Bitfield-Mask: 0x7ffffff) */ +/* ==================================================== CLK_CAL_IRQ_REG ==================================================== */ + #define CLKCAL_BIF_CLK_CAL_IRQ_REG_CLK_CAL_IRQ_CLR_Pos (2UL) /*!< CLK_CAL_IRQ_CLR (Bit 2) */ + #define CLKCAL_BIF_CLK_CAL_IRQ_REG_CLK_CAL_IRQ_CLR_Msk (0x4UL) /*!< CLK_CAL_IRQ_CLR (Bitfield-Mask: 0x01) */ + #define CLKCAL_BIF_CLK_CAL_IRQ_REG_CLK_CAL_IRQ_STATUS_Pos (1UL) /*!< CLK_CAL_IRQ_STATUS (Bit 1) */ + #define CLKCAL_BIF_CLK_CAL_IRQ_REG_CLK_CAL_IRQ_STATUS_Msk (0x2UL) /*!< CLK_CAL_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define CLKCAL_BIF_CLK_CAL_IRQ_REG_CLK_CAL_IRQ_EN_Pos (0UL) /*!< CLK_CAL_IRQ_EN (Bit 0) */ + #define CLKCAL_BIF_CLK_CAL_IRQ_REG_CLK_CAL_IRQ_EN_Msk (0x1UL) /*!< CLK_CAL_IRQ_EN (Bitfield-Mask: 0x01) */ +/* ==================================================== CLK_REF_CNT_REG ==================================================== */ + #define CLKCAL_BIF_CLK_REF_CNT_REG_REF_CNT_VAL_Pos (0UL) /*!< REF_CNT_VAL (Bit 0) */ + #define CLKCAL_BIF_CLK_REF_CNT_REG_REF_CNT_VAL_Msk (0xffffUL) /*!< REF_CNT_VAL (Bitfield-Mask: 0xffff) */ +/* ==================================================== CLK_REF_SEL_REG ==================================================== */ + #define CLKCAL_BIF_CLK_REF_SEL_REG_CAL_CLK_SEL_Pos (5UL) /*!< CAL_CLK_SEL (Bit 5) */ + #define CLKCAL_BIF_CLK_REF_SEL_REG_CAL_CLK_SEL_Msk (0xe0UL) /*!< CAL_CLK_SEL (Bitfield-Mask: 0x07) */ + #define CLKCAL_BIF_CLK_REF_SEL_REG_EXT_CNT_EN_SEL_Pos (4UL) /*!< EXT_CNT_EN_SEL (Bit 4) */ + #define CLKCAL_BIF_CLK_REF_SEL_REG_EXT_CNT_EN_SEL_Msk (0x10UL) /*!< EXT_CNT_EN_SEL (Bitfield-Mask: 0x01) */ + #define CLKCAL_BIF_CLK_REF_SEL_REG_REF_CAL_START_Pos (3UL) /*!< REF_CAL_START (Bit 3) */ + #define CLKCAL_BIF_CLK_REF_SEL_REG_REF_CAL_START_Msk (0x8UL) /*!< REF_CAL_START (Bitfield-Mask: 0x01) */ + #define CLKCAL_BIF_CLK_REF_SEL_REG_REF_CLK_SEL_Pos (0UL) /*!< REF_CLK_SEL (Bit 0) */ + #define CLKCAL_BIF_CLK_REF_SEL_REG_REF_CLK_SEL_Msk (0x7UL) /*!< REF_CLK_SEL (Bitfield-Mask: 0x07) */ +/* ==================================================== CLK_REF_VAL_REG ==================================================== */ + #define CLKCAL_BIF_CLK_REF_VAL_REG_XTAL_CNT_VAL_Pos (0UL) /*!< XTAL_CNT_VAL (Bit 0) */ + #define CLKCAL_BIF_CLK_REF_VAL_REG_XTAL_CNT_VAL_Msk (0xffffffffUL) /*!< XTAL_CNT_VAL (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ CRG_APU ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== APU_AUD_CLK_REG ==================================================== */ + #define CRG_APU_APU_AUD_CLK_REG_AUD_PCLK_DIV_Pos (8UL) /*!< AUD_PCLK_DIV (Bit 8) */ + #define CRG_APU_APU_AUD_CLK_REG_AUD_PCLK_DIV_Msk (0xf00UL) /*!< AUD_PCLK_DIV (Bitfield-Mask: 0x0f) */ + #define CRG_APU_APU_AUD_CLK_REG_AUD_CLK_EN_Pos (4UL) /*!< AUD_CLK_EN (Bit 4) */ + #define CRG_APU_APU_AUD_CLK_REG_AUD_CLK_EN_Msk (0x10UL) /*!< AUD_CLK_EN (Bitfield-Mask: 0x01) */ + #define CRG_APU_APU_AUD_CLK_REG_AUD_CLK_DIV_Pos (0UL) /*!< AUD_CLK_DIV (Bit 0) */ + #define CRG_APU_APU_AUD_CLK_REG_AUD_CLK_DIV_Msk (0xfUL) /*!< AUD_CLK_DIV (Bitfield-Mask: 0x0f) */ +/* =================================================== APU_MCLK_CTRL_REG =================================================== */ + #define CRG_APU_APU_MCLK_CTRL_REG_MCLK_INV_Pos (9UL) /*!< MCLK_INV (Bit 9) */ + #define CRG_APU_APU_MCLK_CTRL_REG_MCLK_INV_Msk (0x200UL) /*!< MCLK_INV (Bitfield-Mask: 0x01) */ + #define CRG_APU_APU_MCLK_CTRL_REG_MCLK_SEL_Pos (8UL) /*!< MCLK_SEL (Bit 8) */ + #define CRG_APU_APU_MCLK_CTRL_REG_MCLK_SEL_Msk (0x100UL) /*!< MCLK_SEL (Bitfield-Mask: 0x01) */ + #define CRG_APU_APU_MCLK_CTRL_REG_MCLK_EN_Pos (7UL) /*!< MCLK_EN (Bit 7) */ + #define CRG_APU_APU_MCLK_CTRL_REG_MCLK_EN_Msk (0x80UL) /*!< MCLK_EN (Bitfield-Mask: 0x01) */ + #define CRG_APU_APU_MCLK_CTRL_REG_MCLK_DIV_Pos (0UL) /*!< MCLK_DIV (Bit 0) */ + #define CRG_APU_APU_MCLK_CTRL_REG_MCLK_DIV_Msk (0x7fUL) /*!< MCLK_DIV (Bitfield-Mask: 0x7f) */ +/* ==================================================== APU_SRC_CLK_REG ==================================================== */ + #define CRG_APU_APU_SRC_CLK_REG_SRC_CLK_EN_Pos (7UL) /*!< SRC_CLK_EN (Bit 7) */ + #define CRG_APU_APU_SRC_CLK_REG_SRC_CLK_EN_Msk (0x80UL) /*!< SRC_CLK_EN (Bitfield-Mask: 0x01) */ + #define CRG_APU_APU_SRC_CLK_REG_SRC_DMIC_CLK_EN_Pos (4UL) /*!< SRC_DMIC_CLK_EN (Bit 4) */ + #define CRG_APU_APU_SRC_CLK_REG_SRC_DMIC_CLK_EN_Msk (0x10UL) /*!< SRC_DMIC_CLK_EN (Bitfield-Mask: 0x01) */ + #define CRG_APU_APU_SRC_CLK_REG_SRC_CLK_DIV_Pos (0UL) /*!< SRC_CLK_DIV (Bit 0) */ + #define CRG_APU_APU_SRC_CLK_REG_SRC_CLK_DIV_Msk (0xfUL) /*!< SRC_CLK_DIV (Bitfield-Mask: 0x0f) */ +/* ================================================== APU_START_CTRL_REG =================================================== */ + #define CRG_APU_APU_START_CTRL_REG_APU_START_Pos (8UL) /*!< APU_START (Bit 8) */ + #define CRG_APU_APU_START_CTRL_REG_APU_START_Msk (0x100UL) /*!< APU_START (Bitfield-Mask: 0x01) */ +/* =================================================== AUD_CLK_GATE_REG ==================================================== */ + #define CRG_APU_AUD_CLK_GATE_REG_APU_RST_Pos (5UL) /*!< APU_RST (Bit 5) */ + #define CRG_APU_AUD_CLK_GATE_REG_APU_RST_Msk (0x20UL) /*!< APU_RST (Bitfield-Mask: 0x01) */ + #define CRG_APU_AUD_CLK_GATE_REG_AUD_CLK_GATE_OVR_Pos (4UL) /*!< AUD_CLK_GATE_OVR (Bit 4) */ + #define CRG_APU_AUD_CLK_GATE_REG_AUD_CLK_GATE_OVR_Msk (0x10UL) /*!< AUD_CLK_GATE_OVR (Bitfield-Mask: 0x01) */ + #define CRG_APU_AUD_CLK_GATE_REG_AUD_CLK_GATE_STAT_Pos (3UL) /*!< AUD_CLK_GATE_STAT (Bit 3) */ + #define CRG_APU_AUD_CLK_GATE_REG_AUD_CLK_GATE_STAT_Msk (0x8UL) /*!< AUD_CLK_GATE_STAT (Bitfield-Mask: 0x01) */ + #define CRG_APU_AUD_CLK_GATE_REG_AUD_CLK_GATE_SEL_Pos (2UL) /*!< AUD_CLK_GATE_SEL (Bit 2) */ + #define CRG_APU_AUD_CLK_GATE_REG_AUD_CLK_GATE_SEL_Msk (0x4UL) /*!< AUD_CLK_GATE_SEL (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ CRG_COM ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== DAC_10B_CFG_REG ==================================================== */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_DRVSEL_Pos (4UL) /*!< DAC_DRVSEL (Bit 4) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_DRVSEL_Msk (0x10UL) /*!< DAC_DRVSEL (Bitfield-Mask: 0x01) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_PRBSEN_Pos (3UL) /*!< DAC_PRBSEN (Bit 3) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_PRBSEN_Msk (0x8UL) /*!< DAC_PRBSEN (Bitfield-Mask: 0x01) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_SUSPEND_Pos (2UL) /*!< DAC_SUSPEND (Bit 2) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_SUSPEND_Msk (0x4UL) /*!< DAC_SUSPEND (Bitfield-Mask: 0x01) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_RESET_Pos (1UL) /*!< DAC_RESET (Bit 1) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_RESET_Msk (0x2UL) /*!< DAC_RESET (Bitfield-Mask: 0x01) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_PD_Pos (0UL) /*!< DAC_PD (Bit 0) */ + #define CRG_COM_DAC_10B_CFG_REG_DAC_PD_Msk (0x1UL) /*!< DAC_PD (Bitfield-Mask: 0x01) */ +/* ===================================================== DAC_CTRL_REG ====================================================== */ + #define CRG_COM_DAC_CTRL_REG_DAC_IN_SEL_Q_Pos (2UL) /*!< DAC_IN_SEL_Q (Bit 2) */ + #define CRG_COM_DAC_CTRL_REG_DAC_IN_SEL_Q_Msk (0x4UL) /*!< DAC_IN_SEL_Q (Bitfield-Mask: 0x01) */ + #define CRG_COM_DAC_CTRL_REG_DAC_IN_SEL_I_Pos (1UL) /*!< DAC_IN_SEL_I (Bit 1) */ + #define CRG_COM_DAC_CTRL_REG_DAC_IN_SEL_I_Msk (0x2UL) /*!< DAC_IN_SEL_I (Bitfield-Mask: 0x01) */ + #define CRG_COM_DAC_CTRL_REG_DAC_EN_Pos (0UL) /*!< DAC_EN (Bit 0) */ + #define CRG_COM_DAC_CTRL_REG_DAC_EN_Msk (0x1UL) /*!< DAC_EN (Bitfield-Mask: 0x01) */ +/* ==================================================== DAC_FREQ_I_REG ===================================================== */ + #define CRG_COM_DAC_FREQ_I_REG_DAC_FREQ_I_Pos (0UL) /*!< DAC_FREQ_I (Bit 0) */ + #define CRG_COM_DAC_FREQ_I_REG_DAC_FREQ_I_Msk (0x7ffUL) /*!< DAC_FREQ_I (Bitfield-Mask: 0x7ff) */ +/* ==================================================== DAC_FREQ_Q_REG ===================================================== */ + #define CRG_COM_DAC_FREQ_Q_REG_DAC_FREQ_Q_Pos (0UL) /*!< DAC_FREQ_Q (Bit 0) */ + #define CRG_COM_DAC_FREQ_Q_REG_DAC_FREQ_Q_Msk (0x7ffUL) /*!< DAC_FREQ_Q (Bitfield-Mask: 0x7ff) */ +/* ===================================================== DAC_GAIN_REG ====================================================== */ + #define CRG_COM_DAC_GAIN_REG_DAC_GAIN_Q_Pos (8UL) /*!< DAC_GAIN_Q (Bit 8) */ + #define CRG_COM_DAC_GAIN_REG_DAC_GAIN_Q_Msk (0xff00UL) /*!< DAC_GAIN_Q (Bitfield-Mask: 0xff) */ + #define CRG_COM_DAC_GAIN_REG_DAC_GAIN_I_Pos (0UL) /*!< DAC_GAIN_I (Bit 0) */ + #define CRG_COM_DAC_GAIN_REG_DAC_GAIN_I_Msk (0xffUL) /*!< DAC_GAIN_I (Bitfield-Mask: 0xff) */ +/* =================================================== EXT_INTB_CTRL_REG =================================================== */ + #define CRG_COM_EXT_INTB_CTRL_REG_PULSE_DURATION_Pos (2UL) /*!< PULSE_DURATION (Bit 2) */ + #define CRG_COM_EXT_INTB_CTRL_REG_PULSE_DURATION_Msk (0xfcUL) /*!< PULSE_DURATION (Bitfield-Mask: 0x3f) */ + #define CRG_COM_EXT_INTB_CTRL_REG_INTR_MODE_Pos (1UL) /*!< INTR_MODE (Bit 1) */ + #define CRG_COM_EXT_INTB_CTRL_REG_INTR_MODE_Msk (0x2UL) /*!< INTR_MODE (Bitfield-Mask: 0x01) */ + #define CRG_COM_EXT_INTB_CTRL_REG_INTR_POL_Pos (0UL) /*!< INTR_POL (Bit 0) */ + #define CRG_COM_EXT_INTB_CTRL_REG_INTR_POL_Msk (0x1UL) /*!< INTR_POL (Bitfield-Mask: 0x01) */ +/* =================================================== EXT_INTB_SET_REG ==================================================== */ + #define CRG_COM_EXT_INTB_SET_REG_INTR_SET_Pos (0UL) /*!< INTR_SET (Bit 0) */ + #define CRG_COM_EXT_INTB_SET_REG_INTR_SET_Msk (0x1UL) /*!< INTR_SET (Bitfield-Mask: 0x01) */ +/* ===================================================== FADC_CAL1_REG ===================================================== */ + #define CRG_COM_FADC_CAL1_REG_C_ENABLE_Pos (31UL) /*!< C_ENABLE (Bit 31) */ + #define CRG_COM_FADC_CAL1_REG_C_ENABLE_Msk (0x80000000UL) /*!< C_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CAL1_REG_C_LVL_POLAR_Pos (30UL) /*!< C_LVL_POLAR (Bit 30) */ + #define CRG_COM_FADC_CAL1_REG_C_LVL_POLAR_Msk (0x40000000UL) /*!< C_LVL_POLAR (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CAL1_REG_C_CAL_START_Pos (29UL) /*!< C_CAL_START (Bit 29) */ + #define CRG_COM_FADC_CAL1_REG_C_CAL_START_Msk (0x20000000UL) /*!< C_CAL_START (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CAL1_REG_C_OUT_MUTE_Pos (28UL) /*!< C_OUT_MUTE (Bit 28) */ + #define CRG_COM_FADC_CAL1_REG_C_OUT_MUTE_Msk (0x10000000UL) /*!< C_OUT_MUTE (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CAL1_REG_C_WEIGHT_WR_Pos (27UL) /*!< C_WEIGHT_WR (Bit 27) */ + #define CRG_COM_FADC_CAL1_REG_C_WEIGHT_WR_Msk (0x8000000UL) /*!< C_WEIGHT_WR (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CAL1_REG_C_DAC_CLK_FREQ_Pos (24UL) /*!< C_DAC_CLK_FREQ (Bit 24) */ + #define CRG_COM_FADC_CAL1_REG_C_DAC_CLK_FREQ_Msk (0x7000000UL) /*!< C_DAC_CLK_FREQ (Bitfield-Mask: 0x07) */ + #define CRG_COM_FADC_CAL1_REG_C_NCO_FREQ_Pos (8UL) /*!< C_NCO_FREQ (Bit 8) */ + #define CRG_COM_FADC_CAL1_REG_C_NCO_FREQ_Msk (0x1fff00UL) /*!< C_NCO_FREQ (Bitfield-Mask: 0x1fff) */ + #define CRG_COM_FADC_CAL1_REG_C_DAC_GAIN_Pos (0UL) /*!< C_DAC_GAIN (Bit 0) */ + #define CRG_COM_FADC_CAL1_REG_C_DAC_GAIN_Msk (0xffUL) /*!< C_DAC_GAIN (Bitfield-Mask: 0xff) */ +/* ===================================================== FADC_CAL2_REG ===================================================== */ + #define CRG_COM_FADC_CAL2_REG_STEP_DELTA_Pos (28UL) /*!< STEP_DELTA (Bit 28) */ + #define CRG_COM_FADC_CAL2_REG_STEP_DELTA_Msk (0x70000000UL) /*!< STEP_DELTA (Bitfield-Mask: 0x07) */ + #define CRG_COM_FADC_CAL2_REG_STEP_ERROR_Pos (24UL) /*!< STEP_ERROR (Bit 24) */ + #define CRG_COM_FADC_CAL2_REG_STEP_ERROR_Msk (0x7000000UL) /*!< STEP_ERROR (Bitfield-Mask: 0x07) */ + #define CRG_COM_FADC_CAL2_REG_SCALE_DELTA_Pos (20UL) /*!< SCALE_DELTA (Bit 20) */ + #define CRG_COM_FADC_CAL2_REG_SCALE_DELTA_Msk (0x700000UL) /*!< SCALE_DELTA (Bitfield-Mask: 0x07) */ + #define CRG_COM_FADC_CAL2_REG_SCALE_ERROR_Pos (16UL) /*!< SCALE_ERROR (Bit 16) */ + #define CRG_COM_FADC_CAL2_REG_SCALE_ERROR_Msk (0x70000UL) /*!< SCALE_ERROR (Bitfield-Mask: 0x07) */ + #define CRG_COM_FADC_CAL2_REG_CND_DONE_Pos (12UL) /*!< CND_DONE (Bit 12) */ + #define CRG_COM_FADC_CAL2_REG_CND_DONE_Msk (0xf000UL) /*!< CND_DONE (Bitfield-Mask: 0x0f) */ + #define CRG_COM_FADC_CAL2_REG_CND_CNT_Pos (8UL) /*!< CND_CNT (Bit 8) */ + #define CRG_COM_FADC_CAL2_REG_CND_CNT_Msk (0x300UL) /*!< CND_CNT (Bitfield-Mask: 0x03) */ + #define CRG_COM_FADC_CAL2_REG_CND_ERROR_TH_Pos (0UL) /*!< CND_ERROR_TH (Bit 0) */ + #define CRG_COM_FADC_CAL2_REG_CND_ERROR_TH_Msk (0xffUL) /*!< CND_ERROR_TH (Bitfield-Mask: 0xff) */ +/* ================================================== FADC_CAL_DONE_I_REG ================================================== */ + #define CRG_COM_FADC_CAL_DONE_I_REG_CAL_DONE_I_Pos (17UL) /*!< CAL_DONE_I (Bit 17) */ + #define CRG_COM_FADC_CAL_DONE_I_REG_CAL_DONE_I_Msk (0x20000UL) /*!< CAL_DONE_I (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CAL_DONE_I_REG_CAL_DONE_Q_Pos (16UL) /*!< CAL_DONE_Q (Bit 16) */ + #define CRG_COM_FADC_CAL_DONE_I_REG_CAL_DONE_Q_Msk (0x10000UL) /*!< CAL_DONE_Q (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CAL_DONE_I_REG_CAL_CNT_I_Pos (0UL) /*!< CAL_CNT_I (Bit 0) */ + #define CRG_COM_FADC_CAL_DONE_I_REG_CAL_CNT_I_Msk (0xffffUL) /*!< CAL_CNT_I (Bitfield-Mask: 0xffff) */ +/* ================================================== FADC_CAL_DONE_Q_REG ================================================== */ + #define CRG_COM_FADC_CAL_DONE_Q_REG_CAL_DONE_Q_Pos (16UL) /*!< CAL_DONE_Q (Bit 16) */ + #define CRG_COM_FADC_CAL_DONE_Q_REG_CAL_DONE_Q_Msk (0x10000UL) /*!< CAL_DONE_Q (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CAL_DONE_Q_REG_CAL_CNT_Q_Pos (0UL) /*!< CAL_CNT_Q (Bit 0) */ + #define CRG_COM_FADC_CAL_DONE_Q_REG_CAL_CNT_Q_Msk (0xffffUL) /*!< CAL_CNT_Q (Bitfield-Mask: 0xffff) */ +/* ===================================================== FADC_CFG0_REG ===================================================== */ + #define CRG_COM_FADC_CFG0_REG_FADC_RESET_Pos (2UL) /*!< FADC_RESET (Bit 2) */ + #define CRG_COM_FADC_CFG0_REG_FADC_RESET_Msk (0x4UL) /*!< FADC_RESET (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CFG0_REG_FADC_SUSPEND_Pos (1UL) /*!< FADC_SUSPEND (Bit 1) */ + #define CRG_COM_FADC_CFG0_REG_FADC_SUSPEND_Msk (0x2UL) /*!< FADC_SUSPEND (Bitfield-Mask: 0x01) */ + #define CRG_COM_FADC_CFG0_REG_FADC_PD_Pos (0UL) /*!< FADC_PD (Bit 0) */ + #define CRG_COM_FADC_CFG0_REG_FADC_PD_Msk (0x1UL) /*!< FADC_PD (Bitfield-Mask: 0x01) */ +/* ===================================================== FADC_CFG1_REG ===================================================== */ + #define CRG_COM_FADC_CFG1_REG_FADC_VCM_CTRL_Pos (24UL) /*!< FADC_VCM_CTRL (Bit 24) */ + #define CRG_COM_FADC_CFG1_REG_FADC_VCM_CTRL_Msk (0x7000000UL) /*!< FADC_VCM_CTRL (Bitfield-Mask: 0x07) */ + #define CRG_COM_FADC_CFG1_REG_FADC_WKUPPD_Pos (20UL) /*!< FADC_WKUPPD (Bit 20) */ + #define CRG_COM_FADC_CFG1_REG_FADC_WKUPPD_Msk (0xf00000UL) /*!< FADC_WKUPPD (Bitfield-Mask: 0x0f) */ + #define CRG_COM_FADC_CFG1_REG_FADC_WKUPSUSP_Pos (16UL) /*!< FADC_WKUPSUSP (Bit 16) */ + #define CRG_COM_FADC_CFG1_REG_FADC_WKUPSUSP_Msk (0xf0000UL) /*!< FADC_WKUPSUSP (Bitfield-Mask: 0x0f) */ + #define CRG_COM_FADC_CFG1_REG_FADC_ADCBIAS_Pos (12UL) /*!< FADC_ADCBIAS (Bit 12) */ + #define CRG_COM_FADC_CFG1_REG_FADC_ADCBIAS_Msk (0xf000UL) /*!< FADC_ADCBIAS (Bitfield-Mask: 0x0f) */ + #define CRG_COM_FADC_CFG1_REG_FADC_COMPBIAS_Pos (8UL) /*!< FADC_COMPBIAS (Bit 8) */ + #define CRG_COM_FADC_CFG1_REG_FADC_COMPBIAS_Msk (0x300UL) /*!< FADC_COMPBIAS (Bitfield-Mask: 0x03) */ + #define CRG_COM_FADC_CFG1_REG_FADC_MCLKDELS_Pos (4UL) /*!< FADC_MCLKDELS (Bit 4) */ + #define CRG_COM_FADC_CFG1_REG_FADC_MCLKDELS_Msk (0x70UL) /*!< FADC_MCLKDELS (Bitfield-Mask: 0x07) */ + #define CRG_COM_FADC_CFG1_REG_FADC_ASYNCDLY_Pos (0UL) /*!< FADC_ASYNCDLY (Bit 0) */ + #define CRG_COM_FADC_CFG1_REG_FADC_ASYNCDLY_Msk (0x7UL) /*!< FADC_ASYNCDLY (Bitfield-Mask: 0x07) */ +/* ================================================== FADC_DOUT_DELTA_REG ================================================== */ + #define CRG_COM_FADC_DOUT_DELTA_REG_DELTA_I_Pos (16UL) /*!< DELTA_I (Bit 16) */ + #define CRG_COM_FADC_DOUT_DELTA_REG_DELTA_I_Msk (0xffff0000UL) /*!< DELTA_I (Bitfield-Mask: 0xffff) */ + #define CRG_COM_FADC_DOUT_DELTA_REG_DELTA_Q_Pos (0UL) /*!< DELTA_Q (Bit 0) */ + #define CRG_COM_FADC_DOUT_DELTA_REG_DELTA_Q_Msk (0xffffUL) /*!< DELTA_Q (Bitfield-Mask: 0xffff) */ +/* ================================================== FADC_DOUT_ERROR_REG ================================================== */ + #define CRG_COM_FADC_DOUT_ERROR_REG_ERROR_I_Pos (8UL) /*!< ERROR_I (Bit 8) */ + #define CRG_COM_FADC_DOUT_ERROR_REG_ERROR_I_Msk (0xff00UL) /*!< ERROR_I (Bitfield-Mask: 0xff) */ + #define CRG_COM_FADC_DOUT_ERROR_REG_ERROR_Q_Pos (0UL) /*!< ERROR_Q (Bit 0) */ + #define CRG_COM_FADC_DOUT_ERROR_REG_ERROR_Q_Msk (0xffUL) /*!< ERROR_Q (Bitfield-Mask: 0xff) */ +/* =================================================== IP1_BAND_GAP_REG ==================================================== */ + #define CRG_COM_IP1_BAND_GAP_REG_BG_VTRIM_Pos (4UL) /*!< BG_VTRIM (Bit 4) */ + #define CRG_COM_IP1_BAND_GAP_REG_BG_VTRIM_Msk (0x70UL) /*!< BG_VTRIM (Bitfield-Mask: 0x07) */ + #define CRG_COM_IP1_BAND_GAP_REG_LDO_MON_SEL_Pos (0UL) /*!< LDO_MON_SEL (Bit 0) */ + #define CRG_COM_IP1_BAND_GAP_REG_LDO_MON_SEL_Msk (0x7UL) /*!< LDO_MON_SEL (Bitfield-Mask: 0x07) */ +/* =================================================== IP2_BAND_GAP_REG ==================================================== */ + #define CRG_COM_IP2_BAND_GAP_REG_IP2_POR_VDEL_SEL_Pos (4UL) /*!< IP2_POR_VDEL_SEL (Bit 4) */ + #define CRG_COM_IP2_BAND_GAP_REG_IP2_POR_VDEL_SEL_Msk (0x10UL) /*!< IP2_POR_VDEL_SEL (Bitfield-Mask: 0x01) */ + #define CRG_COM_IP2_BAND_GAP_REG_IP2_POR_ADJVFR_Pos (3UL) /*!< IP2_POR_ADJVFR (Bit 3) */ + #define CRG_COM_IP2_BAND_GAP_REG_IP2_POR_ADJVFR_Msk (0x8UL) /*!< IP2_POR_ADJVFR (Bitfield-Mask: 0x01) */ + #define CRG_COM_IP2_BAND_GAP_REG_IP4_VBG_TRIM_Pos (0UL) /*!< IP4_VBG_TRIM (Bit 0) */ + #define CRG_COM_IP2_BAND_GAP_REG_IP4_VBG_TRIM_Msk (0x7UL) /*!< IP4_VBG_TRIM (Bitfield-Mask: 0x07) */ +/* =================================================== IP4_DCDC_DIG_REG ==================================================== */ + #define CRG_COM_IP4_DCDC_DIG_REG_DCDC_DIG_CLIM_ENB_Pos (7UL) /*!< DCDC_DIG_CLIM_ENB (Bit 7) */ + #define CRG_COM_IP4_DCDC_DIG_REG_DCDC_DIG_CLIM_ENB_Msk (0x80UL) /*!< DCDC_DIG_CLIM_ENB (Bitfield-Mask: 0x01) */ + #define CRG_COM_IP4_DCDC_DIG_REG_DCDC_DIG_ADJ_Pos (4UL) /*!< DCDC_DIG_ADJ (Bit 4) */ + #define CRG_COM_IP4_DCDC_DIG_REG_DCDC_DIG_ADJ_Msk (0x70UL) /*!< DCDC_DIG_ADJ (Bitfield-Mask: 0x07) */ + #define CRG_COM_IP4_DCDC_DIG_REG_DCDC_DIG_SUSPENDB_Pos (3UL) /*!< DCDC_DIG_SUSPENDB (Bit 3) */ + #define CRG_COM_IP4_DCDC_DIG_REG_DCDC_DIG_SUSPENDB_Msk (0x8UL) /*!< DCDC_DIG_SUSPENDB (Bitfield-Mask: 0x01) */ + #define CRG_COM_IP4_DCDC_DIG_REG_DCDC_DIG_TMF_Pos (0UL) /*!< DCDC_DIG_TMF (Bit 0) */ + #define CRG_COM_IP4_DCDC_DIG_REG_DCDC_DIG_TMF_Msk (0x7UL) /*!< DCDC_DIG_TMF (Bitfield-Mask: 0x07) */ +/* =================================================== IP4_DCDC_FEM_REG ==================================================== */ + #define CRG_COM_IP4_DCDC_FEM_REG_DCDC_FEM_CLIM_ENB_Pos (7UL) /*!< DCDC_FEM_CLIM_ENB (Bit 7) */ + #define CRG_COM_IP4_DCDC_FEM_REG_DCDC_FEM_CLIM_ENB_Msk (0x80UL) /*!< DCDC_FEM_CLIM_ENB (Bitfield-Mask: 0x01) */ + #define CRG_COM_IP4_DCDC_FEM_REG_DCDC_FEM_ADJ_Pos (4UL) /*!< DCDC_FEM_ADJ (Bit 4) */ + #define CRG_COM_IP4_DCDC_FEM_REG_DCDC_FEM_ADJ_Msk (0x70UL) /*!< DCDC_FEM_ADJ (Bitfield-Mask: 0x07) */ + #define CRG_COM_IP4_DCDC_FEM_REG_DCDC_FEM_SUSPENDB_Pos (3UL) /*!< DCDC_FEM_SUSPENDB (Bit 3) */ + #define CRG_COM_IP4_DCDC_FEM_REG_DCDC_FEM_SUSPENDB_Msk (0x8UL) /*!< DCDC_FEM_SUSPENDB (Bitfield-Mask: 0x01) */ + #define CRG_COM_IP4_DCDC_FEM_REG_DCDC_FEM_TMF_Pos (0UL) /*!< DCDC_FEM_TMF (Bit 0) */ + #define CRG_COM_IP4_DCDC_FEM_REG_DCDC_FEM_TMF_Msk (0x7UL) /*!< DCDC_FEM_TMF (Bitfield-Mask: 0x07) */ +/* ================================================= IP4_POR_LDO_CTRL_REG ================================================== */ + #define CRG_COM_IP4_POR_LDO_CTRL_REG_DIGTOP_LDO_CTRL_Pos (4UL) /*!< DIGTOP_LDO_CTRL (Bit 4) */ + #define CRG_COM_IP4_POR_LDO_CTRL_REG_DIGTOP_LDO_CTRL_Msk (0x70UL) /*!< DIGTOP_LDO_CTRL (Bitfield-Mask: 0x07) */ + #define CRG_COM_IP4_POR_LDO_CTRL_REG_IP4_POR_VDET_SEL_Pos (1UL) /*!< IP4_POR_VDET_SEL (Bit 1) */ + #define CRG_COM_IP4_POR_LDO_CTRL_REG_IP4_POR_VDET_SEL_Msk (0x2UL) /*!< IP4_POR_VDET_SEL (Bitfield-Mask: 0x01) */ + #define CRG_COM_IP4_POR_LDO_CTRL_REG_IP4_POR_ADJVFR_Pos (0UL) /*!< IP4_POR_ADJVFR (Bit 0) */ + #define CRG_COM_IP4_POR_LDO_CTRL_REG_IP4_POR_ADJVFR_Msk (0x1UL) /*!< IP4_POR_ADJVFR (Bitfield-Mask: 0x01) */ +/* ===================================================== LDO_CTRL_REG ====================================================== */ + #define CRG_COM_LDO_CTRL_REG_IP2_BG_TRIM_Pos (3UL) /*!< IP2_BG_TRIM (Bit 3) */ + #define CRG_COM_LDO_CTRL_REG_IP2_BG_TRIM_Msk (0x38UL) /*!< IP2_BG_TRIM (Bitfield-Mask: 0x07) */ + #define CRG_COM_LDO_CTRL_REG_FLDO_VCTRL_Pos (0UL) /*!< FLDO_VCTRL (Bit 0) */ + #define CRG_COM_LDO_CTRL_REG_FLDO_VCTRL_Msk (0x7UL) /*!< FLDO_VCTRL (Bitfield-Mask: 0x07) */ +/* ==================================================== MEMORY_CTRL_REG ==================================================== */ + #define CRG_COM_MEMORY_CTRL_REG_OTHER_MEM_Pos (28UL) /*!< OTHER_MEM (Bit 28) */ + #define CRG_COM_MEMORY_CTRL_REG_OTHER_MEM_Msk (0xf0000000UL) /*!< OTHER_MEM (Bitfield-Mask: 0x0f) */ + #define CRG_COM_MEMORY_CTRL_REG_SYS_CLK_MODE_Pos (24UL) /*!< SYS_CLK_MODE (Bit 24) */ + #define CRG_COM_MEMORY_CTRL_REG_SYS_CLK_MODE_Msk (0x1000000UL) /*!< SYS_CLK_MODE (Bitfield-Mask: 0x01) */ + #define CRG_COM_MEMORY_CTRL_REG_MAC_MEM_Pos (20UL) /*!< MAC_MEM (Bit 20) */ + #define CRG_COM_MEMORY_CTRL_REG_MAC_MEM_Msk (0xf00000UL) /*!< MAC_MEM (Bitfield-Mask: 0x0f) */ + #define CRG_COM_MEMORY_CTRL_REG_PHY_MEM_Pos (16UL) /*!< PHY_MEM (Bit 16) */ + #define CRG_COM_MEMORY_CTRL_REG_PHY_MEM_Msk (0xf0000UL) /*!< PHY_MEM (Bitfield-Mask: 0x0f) */ + #define CRG_COM_MEMORY_CTRL_REG_ROM_Pos (8UL) /*!< ROM (Bit 8) */ + #define CRG_COM_MEMORY_CTRL_REG_ROM_Msk (0xf00UL) /*!< ROM (Bitfield-Mask: 0x0f) */ + #define CRG_COM_MEMORY_CTRL_REG_RET_MEM_Pos (4UL) /*!< RET_MEM (Bit 4) */ + #define CRG_COM_MEMORY_CTRL_REG_RET_MEM_Msk (0xf0UL) /*!< RET_MEM (Bitfield-Mask: 0x0f) */ + #define CRG_COM_MEMORY_CTRL_REG_CPU_SRAM_Pos (0UL) /*!< CPU_SRAM (Bit 0) */ + #define CRG_COM_MEMORY_CTRL_REG_CPU_SRAM_Msk (0xfUL) /*!< CPU_SRAM (Bitfield-Mask: 0x0f) */ +/* ==================================================== MON_RF_TEST_REG ==================================================== */ + #define CRG_COM_MON_RF_TEST_REG_EN_IQSW_IP_EXTMODE_Pos (23UL) /*!< EN_IQSW_IP_EXTMODE (Bit 23) */ + #define CRG_COM_MON_RF_TEST_REG_EN_IQSW_IP_EXTMODE_Msk (0x800000UL) /*!< EN_IQSW_IP_EXTMODE (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_EN_IQSW_IN_EXTMODE_Pos (22UL) /*!< EN_IQSW_IN_EXTMODE (Bit 22) */ + #define CRG_COM_MON_RF_TEST_REG_EN_IQSW_IN_EXTMODE_Msk (0x400000UL) /*!< EN_IQSW_IN_EXTMODE (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_EN_IQSW_QP_EXTMODE_Pos (21UL) /*!< EN_IQSW_QP_EXTMODE (Bit 21) */ + #define CRG_COM_MON_RF_TEST_REG_EN_IQSW_QP_EXTMODE_Msk (0x200000UL) /*!< EN_IQSW_QP_EXTMODE (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_EN_IQSW_QN_EXTMODE_Pos (20UL) /*!< EN_IQSW_QN_EXTMODE (Bit 20) */ + #define CRG_COM_MON_RF_TEST_REG_EN_IQSW_QN_EXTMODE_Msk (0x100000UL) /*!< EN_IQSW_QN_EXTMODE (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_SEL_IQSEL_IP_SEN_Pos (19UL) /*!< SEL_IQSEL_IP_SEN (Bit 19) */ + #define CRG_COM_MON_RF_TEST_REG_SEL_IQSEL_IP_SEN_Msk (0x80000UL) /*!< SEL_IQSEL_IP_SEN (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_SEL_IQSEL_IN_SEN_Pos (18UL) /*!< SEL_IQSEL_IN_SEN (Bit 18) */ + #define CRG_COM_MON_RF_TEST_REG_SEL_IQSEL_IN_SEN_Msk (0x40000UL) /*!< SEL_IQSEL_IN_SEN (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_SEL_IQSEL_QP_SEN_Pos (17UL) /*!< SEL_IQSEL_QP_SEN (Bit 17) */ + #define CRG_COM_MON_RF_TEST_REG_SEL_IQSEL_QP_SEN_Msk (0x20000UL) /*!< SEL_IQSEL_QP_SEN (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_SEL_IQSEL_QN_SEN_Pos (16UL) /*!< SEL_IQSEL_QN_SEN (Bit 16) */ + #define CRG_COM_MON_RF_TEST_REG_SEL_IQSEL_QN_SEN_Msk (0x10000UL) /*!< SEL_IQSEL_QN_SEN (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_IP_EXT_Pos (15UL) /*!< IQ2NDSW_SEL_IP_EXT (Bit 15) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_IP_EXT_Msk (0x8000UL) /*!< IQ2NDSW_SEL_IP_EXT (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_IN_EXT_Pos (14UL) /*!< IQ2NDSW_SEL_IN_EXT (Bit 14) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_IN_EXT_Msk (0x4000UL) /*!< IQ2NDSW_SEL_IN_EXT (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_QP_EXT_Pos (13UL) /*!< IQ2NDSW_SEL_QP_EXT (Bit 13) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_QP_EXT_Msk (0x2000UL) /*!< IQ2NDSW_SEL_QP_EXT (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_QN_EXT_Pos (12UL) /*!< IQ2NDSW_SEL_QN_EXT (Bit 12) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_QN_EXT_Msk (0x1000UL) /*!< IQ2NDSW_SEL_QN_EXT (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_IP_Pos (11UL) /*!< IQ2NDSW_SEL_IP (Bit 11) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_IP_Msk (0x800UL) /*!< IQ2NDSW_SEL_IP (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_IN_Pos (10UL) /*!< IQ2NDSW_SEL_IN (Bit 10) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_IN_Msk (0x400UL) /*!< IQ2NDSW_SEL_IN (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_QP_Pos (9UL) /*!< IQ2NDSW_SEL_QP (Bit 9) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_QP_Msk (0x200UL) /*!< IQ2NDSW_SEL_QP (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_QN_Pos (8UL) /*!< IQ2NDSW_SEL_QN (Bit 8) */ + #define CRG_COM_MON_RF_TEST_REG_IQ2NDSW_SEL_QN_Msk (0x100UL) /*!< IQ2NDSW_SEL_QN (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_IP1_Pos (7UL) /*!< BB2RF_MUX_IP1 (Bit 7) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_IP1_Msk (0x80UL) /*!< BB2RF_MUX_IP1 (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_IP0_Pos (6UL) /*!< BB2RF_MUX_IP0 (Bit 6) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_IP0_Msk (0x40UL) /*!< BB2RF_MUX_IP0 (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_IN1_Pos (5UL) /*!< BB2RF_MUX_IN1 (Bit 5) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_IN1_Msk (0x20UL) /*!< BB2RF_MUX_IN1 (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_IN0_Pos (4UL) /*!< BB2RF_MUX_IN0 (Bit 4) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_IN0_Msk (0x10UL) /*!< BB2RF_MUX_IN0 (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_QP1_Pos (3UL) /*!< BB2RF_MUX_QP1 (Bit 3) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_QP1_Msk (0x8UL) /*!< BB2RF_MUX_QP1 (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_QP0_Pos (2UL) /*!< BB2RF_MUX_QP0 (Bit 2) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_QP0_Msk (0x4UL) /*!< BB2RF_MUX_QP0 (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_QN1_Pos (1UL) /*!< BB2RF_MUX_QN1 (Bit 1) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_QN1_Msk (0x2UL) /*!< BB2RF_MUX_QN1 (Bitfield-Mask: 0x01) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_QN0_Pos (0UL) /*!< BB2RF_MUX_QN0 (Bit 0) */ + #define CRG_COM_MON_RF_TEST_REG_BB2RF_MUX_QN0_Msk (0x1UL) /*!< BB2RF_MUX_QN0 (Bitfield-Mask: 0x01) */ +/* ================================================= NORMAL_TEST_CTRL_REG ================================================== */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_IQ_SEL_Pos (12UL) /*!< IQ_SEL (Bit 12) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_IQ_SEL_Msk (0x1000UL) /*!< IQ_SEL (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_DEBUG_WIFI_Pos (11UL) /*!< DEBUG_WIFI (Bit 11) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_DEBUG_WIFI_Msk (0x800UL) /*!< DEBUG_WIFI (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_RTC_Pos (10UL) /*!< RTC (Bit 10) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_RTC_Msk (0x400UL) /*!< RTC (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_IQ_ADC_Pos (9UL) /*!< IQ_ADC (Bit 9) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_IQ_ADC_Msk (0x200UL) /*!< IQ_ADC (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_AUXADC12B_Pos (7UL) /*!< AUXADC12B (Bit 7) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_AUXADC12B_Msk (0x80UL) /*!< AUXADC12B (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_ADC_DAC_LB_Pos (6UL) /*!< ADC_DAC_LB (Bit 6) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_ADC_DAC_LB_Msk (0x40UL) /*!< ADC_DAC_LB (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_EXT_BB_Pos (5UL) /*!< EXT_BB (Bit 5) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_EXT_BB_Msk (0x20UL) /*!< EXT_BB (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_EXT_RF_Pos (4UL) /*!< EXT_RF (Bit 4) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_EXT_RF_Msk (0x10UL) /*!< EXT_RF (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_DEBUG_GPIO_Pos (3UL) /*!< DEBUG_GPIO (Bit 3) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_DEBUG_GPIO_Msk (0x8UL) /*!< DEBUG_GPIO (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_FLASH_Pos (1UL) /*!< FLASH (Bit 1) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_FLASH_Msk (0x2UL) /*!< FLASH (Bitfield-Mask: 0x01) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_PLL1_Pos (0UL) /*!< PLL1 (Bit 0) */ + #define CRG_COM_NORMAL_TEST_CTRL_REG_PLL1_Msk (0x1UL) /*!< PLL1 (Bitfield-Mask: 0x01) */ +/* =================================================== PAD_LATCH_EN_REG ==================================================== */ + #define CRG_COM_PAD_LATCH_EN_REG_P1_LATCH_EN_Pos (16UL) /*!< P1_LATCH_EN (Bit 16) */ + #define CRG_COM_PAD_LATCH_EN_REG_P1_LATCH_EN_Msk (0xffff0000UL) /*!< P1_LATCH_EN (Bitfield-Mask: 0xffff) */ + #define CRG_COM_PAD_LATCH_EN_REG_P0_LATCH_EN_Pos (2UL) /*!< P0_LATCH_EN (Bit 2) */ + #define CRG_COM_PAD_LATCH_EN_REG_P0_LATCH_EN_Msk (0xfffcUL) /*!< P0_LATCH_EN (Bitfield-Mask: 0x3fff) */ + #define CRG_COM_PAD_LATCH_EN_REG_SWD_LATCH_EN_Pos (0UL) /*!< SWD_LATCH_EN (Bit 0) */ + #define CRG_COM_PAD_LATCH_EN_REG_SWD_LATCH_EN_Msk (0x3UL) /*!< SWD_LATCH_EN (Bitfield-Mask: 0x03) */ +/* =================================================== PLL1_ARM_CTRL_REG =================================================== */ + #define CRG_COM_PLL1_ARM_CTRL_REG_PLL_LOCK_Pos (13UL) /*!< PLL_LOCK (Bit 13) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_PLL_LOCK_Msk (0x2000UL) /*!< PLL_LOCK (Bitfield-Mask: 0x01) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_LF_RCTRL_Pos (11UL) /*!< DPLL1_LF_RCTRL (Bit 11) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_LF_RCTRL_Msk (0x1800UL) /*!< DPLL1_LF_RCTRL (Bitfield-Mask: 0x03) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_SHORT_S_Pos (9UL) /*!< DPLL1_SHORT_S (Bit 9) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_SHORT_S_Msk (0x600UL) /*!< DPLL1_SHORT_S (Bitfield-Mask: 0x03) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_EN_Pos (8UL) /*!< DPLL1_EN (Bit 8) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_EN_Msk (0x100UL) /*!< DPLL1_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_VCO_SEL_Pos (6UL) /*!< DPLL1_VCO_SEL (Bit 6) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_VCO_SEL_Msk (0xc0UL) /*!< DPLL1_VCO_SEL (Bitfield-Mask: 0x03) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_DIV_SEL_Pos (0UL) /*!< DPLL1_DIV_SEL (Bit 0) */ + #define CRG_COM_PLL1_ARM_CTRL_REG_DPLL1_DIV_SEL_Msk (0x3fUL) /*!< DPLL1_DIV_SEL (Bitfield-Mask: 0x3f) */ +/* =================================================== POWER_MANAGE_REG ==================================================== */ + #define CRG_COM_POWER_MANAGE_REG_ISCO_EN_Pos (2UL) /*!< ISCO_EN (Bit 2) */ + #define CRG_COM_POWER_MANAGE_REG_ISCO_EN_Msk (0x4UL) /*!< ISCO_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_POWER_MANAGE_REG_ISO_EN_Pos (1UL) /*!< ISO_EN (Bit 1) */ + #define CRG_COM_POWER_MANAGE_REG_ISO_EN_Msk (0x2UL) /*!< ISO_EN (Bitfield-Mask: 0x01) */ +/* ==================================================== PSRAM_DEBUG_REG ==================================================== */ + #define CRG_COM_PSRAM_DEBUG_REG_PSRAM_STS_MON_Pos (8UL) /*!< PSRAM_STS_MON (Bit 8) */ + #define CRG_COM_PSRAM_DEBUG_REG_PSRAM_STS_MON_Msk (0x1f00UL) /*!< PSRAM_STS_MON (Bitfield-Mask: 0x1f) */ + #define CRG_COM_PSRAM_DEBUG_REG_LATENCY_CNT_Pos (0UL) /*!< LATENCY_CNT (Bit 0) */ + #define CRG_COM_PSRAM_DEBUG_REG_LATENCY_CNT_Msk (0x1fUL) /*!< LATENCY_CNT (Bitfield-Mask: 0x1f) */ +/* ===================================================== TEST_CFG_REG ====================================================== */ + #define CRG_COM_TEST_CFG_REG_CTRL_TX_ATTEN_Pos (16UL) /*!< CTRL_TX_ATTEN (Bit 16) */ + #define CRG_COM_TEST_CFG_REG_CTRL_TX_ATTEN_Msk (0x3f0000UL) /*!< CTRL_TX_ATTEN (Bitfield-Mask: 0x3f) */ + #define CRG_COM_TEST_CFG_REG_TST_GPIO1_DIO2_EN_Pos (15UL) /*!< TST_GPIO1_DIO2_EN (Bit 15) */ + #define CRG_COM_TEST_CFG_REG_TST_GPIO1_DIO2_EN_Msk (0x8000UL) /*!< TST_GPIO1_DIO2_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_TEST_CFG_REG_TST_GPIO0_DIO2_EN_Pos (14UL) /*!< TST_GPIO0_DIO2_EN (Bit 14) */ + #define CRG_COM_TEST_CFG_REG_TST_GPIO0_DIO2_EN_Msk (0x4000UL) /*!< TST_GPIO0_DIO2_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_TEST_CFG_REG_TX_HPI_BURNIN_EN_Pos (13UL) /*!< TX_HPI_BURNIN_EN (Bit 13) */ + #define CRG_COM_TEST_CFG_REG_TX_HPI_BURNIN_EN_Msk (0x2000UL) /*!< TX_HPI_BURNIN_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_TEST_CFG_REG_HPI_BURNIN_EN_Pos (12UL) /*!< HPI_BURNIN_EN (Bit 12) */ + #define CRG_COM_TEST_CFG_REG_HPI_BURNIN_EN_Msk (0x1000UL) /*!< HPI_BURNIN_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_TEST_CFG_REG_TST2_GPIO_EN_Pos (11UL) /*!< TST2_GPIO_EN (Bit 11) */ + #define CRG_COM_TEST_CFG_REG_TST2_GPIO_EN_Msk (0x800UL) /*!< TST2_GPIO_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_TEST_CFG_REG_TST1_GPIO_EN_Pos (10UL) /*!< TST1_GPIO_EN (Bit 10) */ + #define CRG_COM_TEST_CFG_REG_TST1_GPIO_EN_Msk (0x400UL) /*!< TST1_GPIO_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_TEST_CFG_REG_TST2_GPADC_EN_Pos (9UL) /*!< TST2_GPADC_EN (Bit 9) */ + #define CRG_COM_TEST_CFG_REG_TST2_GPADC_EN_Msk (0x200UL) /*!< TST2_GPADC_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_TEST_CFG_REG_TST1_GPADC_EN_Pos (8UL) /*!< TST1_GPADC_EN (Bit 8) */ + #define CRG_COM_TEST_CFG_REG_TST1_GPADC_EN_Msk (0x100UL) /*!< TST1_GPADC_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_TEST_CFG_REG_SEL_TST2_MUX_Pos (4UL) /*!< SEL_TST2_MUX (Bit 4) */ + #define CRG_COM_TEST_CFG_REG_SEL_TST2_MUX_Msk (0xf0UL) /*!< SEL_TST2_MUX (Bitfield-Mask: 0x0f) */ + #define CRG_COM_TEST_CFG_REG_SEL_TST1_MUX_Pos (0UL) /*!< SEL_TST1_MUX (Bit 0) */ + #define CRG_COM_TEST_CFG_REG_SEL_TST1_MUX_Msk (0xfUL) /*!< SEL_TST1_MUX (Bitfield-Mask: 0x0f) */ +/* =================================================== XTAL32K_CTRL_REG ==================================================== */ + #define CRG_COM_XTAL32K_CTRL_REG_XTAL32K_ENABLE_Pos (0UL) /*!< XTAL32K_ENABLE (Bit 0) */ + #define CRG_COM_XTAL32K_CTRL_REG_XTAL32K_ENABLE_Msk (0x1UL) /*!< XTAL32K_ENABLE (Bitfield-Mask: 0x01) */ +/* =================================================== XTAL40M_CTRL_REG ==================================================== */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_RDY_Pos (23UL) /*!< XTAL40M_RDY (Bit 23) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_RDY_Msk (0x800000UL) /*!< XTAL40M_RDY (Bitfield-Mask: 0x01) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_CCTRL_Pos (16UL) /*!< XTAL40M_CCTRL (Bit 16) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_CCTRL_Msk (0x7f0000UL) /*!< XTAL40M_CCTRL (Bitfield-Mask: 0x7f) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40_GAIN_Pos (8UL) /*!< XTAL40_GAIN (Bit 8) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40_GAIN_Msk (0x700UL) /*!< XTAL40_GAIN (Bitfield-Mask: 0x07) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_ADCCLK_EN_Pos (6UL) /*!< XTAL40M_ADCCLK_EN (Bit 6) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_ADCCLK_EN_Msk (0x40UL) /*!< XTAL40M_ADCCLK_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_TX_EN_Pos (5UL) /*!< XTAL40M_TX_EN (Bit 5) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_TX_EN_Msk (0x20UL) /*!< XTAL40M_TX_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_FPLL_EN_Pos (4UL) /*!< XTAL40M_FPLL_EN (Bit 4) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_FPLL_EN_Msk (0x10UL) /*!< XTAL40M_FPLL_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_RFPLL_EN_Pos (3UL) /*!< XTAL40M_RFPLL_EN (Bit 3) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_RFPLL_EN_Msk (0x8UL) /*!< XTAL40M_RFPLL_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_DPLL_EN_Pos (2UL) /*!< XTAL40M_DPLL_EN (Bit 2) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_DPLL_EN_Msk (0x4UL) /*!< XTAL40M_DPLL_EN (Bitfield-Mask: 0x01) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_RFEN_Pos (1UL) /*!< XTAL40M_RFEN (Bit 1) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_RFEN_Msk (0x2UL) /*!< XTAL40M_RFEN (Bitfield-Mask: 0x01) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_EN_Pos (0UL) /*!< XTAL40M_EN (Bit 0) */ + #define CRG_COM_XTAL40M_CTRL_REG_XTAL40M_EN_Msk (0x1UL) /*!< XTAL40M_EN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ CRG_PER ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== CLK_COM_REG ====================================================== */ + #define CRG_PER_CLK_COM_REG_SDEMMC_ENABLE_Pos (13UL) /*!< SDEMMC_ENABLE (Bit 13) */ + #define CRG_PER_CLK_COM_REG_SDEMMC_ENABLE_Msk (0x2000UL) /*!< SDEMMC_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_SDIO_ENABLE_Pos (12UL) /*!< SDIO_ENABLE (Bit 12) */ + #define CRG_PER_CLK_COM_REG_SDIO_ENABLE_Msk (0x1000UL) /*!< SDIO_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_UART3_ENABLE_Pos (11UL) /*!< UART3_ENABLE (Bit 11) */ + #define CRG_PER_CLK_COM_REG_UART3_ENABLE_Msk (0x800UL) /*!< UART3_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_UART2_ENABLE_Pos (10UL) /*!< UART2_ENABLE (Bit 10) */ + #define CRG_PER_CLK_COM_REG_UART2_ENABLE_Msk (0x400UL) /*!< UART2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_UART_ENABLE_Pos (9UL) /*!< UART_ENABLE (Bit 9) */ + #define CRG_PER_CLK_COM_REG_UART_ENABLE_Msk (0x200UL) /*!< UART_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_AUXADC_ENABLE_Pos (8UL) /*!< AUXADC_ENABLE (Bit 8) */ + #define CRG_PER_CLK_COM_REG_AUXADC_ENABLE_Msk (0x100UL) /*!< AUXADC_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_I2C2_CLK_SEL_Pos (7UL) /*!< I2C2_CLK_SEL (Bit 7) */ + #define CRG_PER_CLK_COM_REG_I2C2_CLK_SEL_Msk (0x80UL) /*!< I2C2_CLK_SEL (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_I2C2_ENABLE_Pos (6UL) /*!< I2C2_ENABLE (Bit 6) */ + #define CRG_PER_CLK_COM_REG_I2C2_ENABLE_Msk (0x40UL) /*!< I2C2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_I2C_CLK_SEL_Pos (5UL) /*!< I2C_CLK_SEL (Bit 5) */ + #define CRG_PER_CLK_COM_REG_I2C_CLK_SEL_Msk (0x20UL) /*!< I2C_CLK_SEL (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_I2C_ENABLE_Pos (4UL) /*!< I2C_ENABLE (Bit 4) */ + #define CRG_PER_CLK_COM_REG_I2C_ENABLE_Msk (0x10UL) /*!< I2C_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_SPI2_ENABLE_Pos (2UL) /*!< SPI2_ENABLE (Bit 2) */ + #define CRG_PER_CLK_COM_REG_SPI2_ENABLE_Msk (0x4UL) /*!< SPI2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_CLK_COM_REG_SPI_ENABLE_Pos (0UL) /*!< SPI_ENABLE (Bit 0) */ + #define CRG_PER_CLK_COM_REG_SPI_ENABLE_Msk (0x1UL) /*!< SPI_ENABLE (Bitfield-Mask: 0x01) */ +/* =================================================== RESET_CLK_COM_REG =================================================== */ + #define CRG_PER_RESET_CLK_COM_REG_SDEMMC_ENABLE_Pos (13UL) /*!< SDEMMC_ENABLE (Bit 13) */ + #define CRG_PER_RESET_CLK_COM_REG_SDEMMC_ENABLE_Msk (0x2000UL) /*!< SDEMMC_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_SDIO_ENABLE_Pos (12UL) /*!< SDIO_ENABLE (Bit 12) */ + #define CRG_PER_RESET_CLK_COM_REG_SDIO_ENABLE_Msk (0x1000UL) /*!< SDIO_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_UART3_ENABLE_Pos (11UL) /*!< UART3_ENABLE (Bit 11) */ + #define CRG_PER_RESET_CLK_COM_REG_UART3_ENABLE_Msk (0x800UL) /*!< UART3_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_UART2_ENABLE_Pos (10UL) /*!< UART2_ENABLE (Bit 10) */ + #define CRG_PER_RESET_CLK_COM_REG_UART2_ENABLE_Msk (0x400UL) /*!< UART2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_UART_ENABLE_Pos (9UL) /*!< UART_ENABLE (Bit 9) */ + #define CRG_PER_RESET_CLK_COM_REG_UART_ENABLE_Msk (0x200UL) /*!< UART_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_AUXADC_ENABLE_Pos (8UL) /*!< AUXADC_ENABLE (Bit 8) */ + #define CRG_PER_RESET_CLK_COM_REG_AUXADC_ENABLE_Msk (0x100UL) /*!< AUXADC_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_I2C2_CLK_SEL_Pos (7UL) /*!< I2C2_CLK_SEL (Bit 7) */ + #define CRG_PER_RESET_CLK_COM_REG_I2C2_CLK_SEL_Msk (0x80UL) /*!< I2C2_CLK_SEL (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_I2C2_ENABLE_Pos (6UL) /*!< I2C2_ENABLE (Bit 6) */ + #define CRG_PER_RESET_CLK_COM_REG_I2C2_ENABLE_Msk (0x40UL) /*!< I2C2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_I2C_CLK_SEL_Pos (5UL) /*!< I2C_CLK_SEL (Bit 5) */ + #define CRG_PER_RESET_CLK_COM_REG_I2C_CLK_SEL_Msk (0x20UL) /*!< I2C_CLK_SEL (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_I2C_ENABLE_Pos (4UL) /*!< I2C_ENABLE (Bit 4) */ + #define CRG_PER_RESET_CLK_COM_REG_I2C_ENABLE_Msk (0x10UL) /*!< I2C_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_SPI2_ENABLE_Pos (2UL) /*!< SPI2_ENABLE (Bit 2) */ + #define CRG_PER_RESET_CLK_COM_REG_SPI2_ENABLE_Msk (0x4UL) /*!< SPI2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_RESET_CLK_COM_REG_SPI_ENABLE_Pos (0UL) /*!< SPI_ENABLE (Bit 0) */ + #define CRG_PER_RESET_CLK_COM_REG_SPI_ENABLE_Msk (0x1UL) /*!< SPI_ENABLE (Bitfield-Mask: 0x01) */ +/* ==================================================== SET_CLK_COM_REG ==================================================== */ + #define CRG_PER_SET_CLK_COM_REG_SDEMMC_ENABLE_Pos (13UL) /*!< SDEMMC_ENABLE (Bit 13) */ + #define CRG_PER_SET_CLK_COM_REG_SDEMMC_ENABLE_Msk (0x2000UL) /*!< SDEMMC_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_SDIO_ENABLE_Pos (12UL) /*!< SDIO_ENABLE (Bit 12) */ + #define CRG_PER_SET_CLK_COM_REG_SDIO_ENABLE_Msk (0x1000UL) /*!< SDIO_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_UART3_ENABLE_Pos (11UL) /*!< UART3_ENABLE (Bit 11) */ + #define CRG_PER_SET_CLK_COM_REG_UART3_ENABLE_Msk (0x800UL) /*!< UART3_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_UART2_ENABLE_Pos (10UL) /*!< UART2_ENABLE (Bit 10) */ + #define CRG_PER_SET_CLK_COM_REG_UART2_ENABLE_Msk (0x400UL) /*!< UART2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_UART_ENABLE_Pos (9UL) /*!< UART_ENABLE (Bit 9) */ + #define CRG_PER_SET_CLK_COM_REG_UART_ENABLE_Msk (0x200UL) /*!< UART_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_AUXADC_ENABLE_Pos (8UL) /*!< AUXADC_ENABLE (Bit 8) */ + #define CRG_PER_SET_CLK_COM_REG_AUXADC_ENABLE_Msk (0x100UL) /*!< AUXADC_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_I2C2_CLK_SEL_Pos (7UL) /*!< I2C2_CLK_SEL (Bit 7) */ + #define CRG_PER_SET_CLK_COM_REG_I2C2_CLK_SEL_Msk (0x80UL) /*!< I2C2_CLK_SEL (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_I2C2_ENABLE_Pos (6UL) /*!< I2C2_ENABLE (Bit 6) */ + #define CRG_PER_SET_CLK_COM_REG_I2C2_ENABLE_Msk (0x40UL) /*!< I2C2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_I2C_CLK_SEL_Pos (5UL) /*!< I2C_CLK_SEL (Bit 5) */ + #define CRG_PER_SET_CLK_COM_REG_I2C_CLK_SEL_Msk (0x20UL) /*!< I2C_CLK_SEL (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_I2C_ENABLE_Pos (4UL) /*!< I2C_ENABLE (Bit 4) */ + #define CRG_PER_SET_CLK_COM_REG_I2C_ENABLE_Msk (0x10UL) /*!< I2C_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_SPI2_ENABLE_Pos (2UL) /*!< SPI2_ENABLE (Bit 2) */ + #define CRG_PER_SET_CLK_COM_REG_SPI2_ENABLE_Msk (0x4UL) /*!< SPI2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_PER_SET_CLK_COM_REG_SPI_ENABLE_Pos (0UL) /*!< SPI_ENABLE (Bit 0) */ + #define CRG_PER_SET_CLK_COM_REG_SPI_ENABLE_Msk (0x1UL) /*!< SPI_ENABLE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ CRG_SYS ================ */ +/* =========================================================================================================================== */ + +/* ================================================== CACHE_RAM_CTRL_REG =================================================== */ + #define CRG_SYS_CACHE_RAM_CTRL_REG_CACHERAM_MA_WRASD_Pos (6UL) /*!< CACHERAM_MA_WRASD (Bit 6) */ + #define CRG_SYS_CACHE_RAM_CTRL_REG_CACHERAM_MA_WRASD_Msk (0x40UL) /*!< CACHERAM_MA_WRASD (Bitfield-Mask: 0x01) */ + #define CRG_SYS_CACHE_RAM_CTRL_REG_CACHERAM_MA_WRAS_Pos (4UL) /*!< CACHERAM_MA_WRAS (Bit 4) */ + #define CRG_SYS_CACHE_RAM_CTRL_REG_CACHERAM_MA_WRAS_Msk (0x30UL) /*!< CACHERAM_MA_WRAS (Bitfield-Mask: 0x03) */ + #define CRG_SYS_CACHE_RAM_CTRL_REG_CACHERAM_MA_WL_Pos (2UL) /*!< CACHERAM_MA_WL (Bit 2) */ + #define CRG_SYS_CACHE_RAM_CTRL_REG_CACHERAM_MA_WL_Msk (0xcUL) /*!< CACHERAM_MA_WL (Bitfield-Mask: 0x03) */ + #define CRG_SYS_CACHE_RAM_CTRL_REG_CACHERAM_MA_SAWL_Pos (0UL) /*!< CACHERAM_MA_SAWL (Bit 0) */ + #define CRG_SYS_CACHE_RAM_CTRL_REG_CACHERAM_MA_SAWL_Msk (0x3UL) /*!< CACHERAM_MA_SAWL (Bitfield-Mask: 0x03) */ +/* ================================================== CRYPTO_RAM_CTRL_REG ================================================== */ + #define CRG_SYS_CRYPTO_RAM_CTRL_REG_CRYPTORAM_MA_WRASD_Pos (3UL) /*!< CRYPTORAM_MA_WRASD (Bit 3) */ + #define CRG_SYS_CRYPTO_RAM_CTRL_REG_CRYPTORAM_MA_WRASD_Msk (0x8UL) /*!< CRYPTORAM_MA_WRASD (Bitfield-Mask: 0x01) */ + #define CRG_SYS_CRYPTO_RAM_CTRL_REG_CRYPTORAM_MA_WRAS_Pos (2UL) /*!< CRYPTORAM_MA_WRAS (Bit 2) */ + #define CRG_SYS_CRYPTO_RAM_CTRL_REG_CRYPTORAM_MA_WRAS_Msk (0x4UL) /*!< CRYPTORAM_MA_WRAS (Bitfield-Mask: 0x01) */ + #define CRG_SYS_CRYPTO_RAM_CTRL_REG_CRYPTORAM_MA_WL_Pos (1UL) /*!< CRYPTORAM_MA_WL (Bit 1) */ + #define CRG_SYS_CRYPTO_RAM_CTRL_REG_CRYPTORAM_MA_WL_Msk (0x2UL) /*!< CRYPTORAM_MA_WL (Bitfield-Mask: 0x01) */ + #define CRG_SYS_CRYPTO_RAM_CTRL_REG_CRYPTORAM_MA_SAWL_Pos (0UL) /*!< CRYPTORAM_MA_SAWL (Bit 0) */ + #define CRG_SYS_CRYPTO_RAM_CTRL_REG_CRYPTORAM_MA_SAWL_Msk (0x1UL) /*!< CRYPTORAM_MA_SAWL (Bitfield-Mask: 0x01) */ +/* ================================================== DCACHE_RAM_CTRL_REG ================================================== */ + #define CRG_SYS_DCACHE_RAM_CTRL_REG_DCACHERAM_MA_WRASD_Pos (3UL) /*!< DCACHERAM_MA_WRASD (Bit 3) */ + #define CRG_SYS_DCACHE_RAM_CTRL_REG_DCACHERAM_MA_WRASD_Msk (0x8UL) /*!< DCACHERAM_MA_WRASD (Bitfield-Mask: 0x01) */ + #define CRG_SYS_DCACHE_RAM_CTRL_REG_DCACHERAM_MA_WRAS_Pos (2UL) /*!< DCACHERAM_MA_WRAS (Bit 2) */ + #define CRG_SYS_DCACHE_RAM_CTRL_REG_DCACHERAM_MA_WRAS_Msk (0x4UL) /*!< DCACHERAM_MA_WRAS (Bitfield-Mask: 0x01) */ + #define CRG_SYS_DCACHE_RAM_CTRL_REG_DCACHERAM_MA_WL_Pos (1UL) /*!< DCACHERAM_MA_WL (Bit 1) */ + #define CRG_SYS_DCACHE_RAM_CTRL_REG_DCACHERAM_MA_WL_Msk (0x2UL) /*!< DCACHERAM_MA_WL (Bitfield-Mask: 0x01) */ + #define CRG_SYS_DCACHE_RAM_CTRL_REG_DCACHERAM_MA_SAWL_Pos (0UL) /*!< DCACHERAM_MA_SAWL (Bit 0) */ + #define CRG_SYS_DCACHE_RAM_CTRL_REG_DCACHERAM_MA_SAWL_Msk (0x1UL) /*!< DCACHERAM_MA_SAWL (Bitfield-Mask: 0x01) */ +/* =================================================== HPI_CLK_CTRL_REG ==================================================== */ + #define CRG_SYS_HPI_CLK_CTRL_REG_HPI_CLK_DCG_Pos (1UL) /*!< HPI_CLK_DCG (Bit 1) */ + #define CRG_SYS_HPI_CLK_CTRL_REG_HPI_CLK_DCG_Msk (0x2UL) /*!< HPI_CLK_DCG (Bitfield-Mask: 0x01) */ + #define CRG_SYS_HPI_CLK_CTRL_REG_HPI_CLK_OFF_Pos (0UL) /*!< HPI_CLK_OFF (Bit 0) */ + #define CRG_SYS_HPI_CLK_CTRL_REG_HPI_CLK_OFF_Msk (0x1UL) /*!< HPI_CLK_OFF (Bitfield-Mask: 0x01) */ +/* =================================================== MEM_CLK_CTRL_REG ==================================================== */ + #define CRG_SYS_MEM_CLK_CTRL_REG_CACHERAM_CLK_DCG_Pos (5UL) /*!< CACHERAM_CLK_DCG (Bit 5) */ + #define CRG_SYS_MEM_CLK_CTRL_REG_CACHERAM_CLK_DCG_Msk (0x20UL) /*!< CACHERAM_CLK_DCG (Bitfield-Mask: 0x01) */ + #define CRG_SYS_MEM_CLK_CTRL_REG_CACHERAM_CLK_OFF_Pos (4UL) /*!< CACHERAM_CLK_OFF (Bit 4) */ + #define CRG_SYS_MEM_CLK_CTRL_REG_CACHERAM_CLK_OFF_Msk (0x10UL) /*!< CACHERAM_CLK_OFF (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ CRG_TOP ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== AUX_CLK_DIV_REG ==================================================== */ + #define CRG_TOP_AUX_CLK_DIV_REG_CLK_DIV_AUXA_Pos (0UL) /*!< CLK_DIV_AUXA (Bit 0) */ + #define CRG_TOP_AUX_CLK_DIV_REG_CLK_DIV_AUXA_Msk (0x3ffUL) /*!< CLK_DIV_AUXA (Bitfield-Mask: 0x3ff) */ +/* ===================================================== CLK_AMBA_REG ====================================================== */ + #define CRG_TOP_CLK_AMBA_REG_HCLK_DIV_SYNC_Pos (28UL) /*!< HCLK_DIV_SYNC (Bit 28) */ + #define CRG_TOP_CLK_AMBA_REG_HCLK_DIV_SYNC_Msk (0x70000000UL) /*!< HCLK_DIV_SYNC (Bitfield-Mask: 0x07) */ + #define CRG_TOP_CLK_AMBA_REG_KDMA_CLK_ENABLE_Pos (27UL) /*!< KDMA_CLK_ENABLE (Bit 27) */ + #define CRG_TOP_CLK_AMBA_REG_KDMA_CLK_ENABLE_Msk (0x8000000UL) /*!< KDMA_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_SPI_CLK_ENABLE_Pos (26UL) /*!< SPI_CLK_ENABLE (Bit 26) */ + #define CRG_TOP_CLK_AMBA_REG_SPI_CLK_ENABLE_Msk (0x4000000UL) /*!< SPI_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_AUX_CLK_ENABLE_Pos (25UL) /*!< AUX_CLK_ENABLE (Bit 25) */ + #define CRG_TOP_CLK_AMBA_REG_AUX_CLK_ENABLE_Msk (0x2000000UL) /*!< AUX_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_TIMER_CLK_ENABLE_Pos (24UL) /*!< TIMER_CLK_ENABLE (Bit 24) */ + #define CRG_TOP_CLK_AMBA_REG_TIMER_CLK_ENABLE_Msk (0x1000000UL) /*!< TIMER_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_PERI_CLK_ENABLE_Pos (23UL) /*!< PERI_CLK_ENABLE (Bit 23) */ + #define CRG_TOP_CLK_AMBA_REG_PERI_CLK_ENABLE_Msk (0x800000UL) /*!< PERI_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_PHY_CLK_ENABLE_Pos (22UL) /*!< PHY_CLK_ENABLE (Bit 22) */ + #define CRG_TOP_CLK_AMBA_REG_PHY_CLK_ENABLE_Msk (0x400000UL) /*!< PHY_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_CC312_CLK_ENABLE_Pos (21UL) /*!< CC312_CLK_ENABLE (Bit 21) */ + #define CRG_TOP_CLK_AMBA_REG_CC312_CLK_ENABLE_Msk (0x200000UL) /*!< CC312_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_GEN_DMA_ENABLE_Pos (20UL) /*!< GEN_DMA_ENABLE (Bit 20) */ + #define CRG_TOP_CLK_AMBA_REG_GEN_DMA_ENABLE_Msk (0x100000UL) /*!< GEN_DMA_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_SYS_MEM_ENABLE_Pos (19UL) /*!< SYS_MEM_ENABLE (Bit 19) */ + #define CRG_TOP_CLK_AMBA_REG_SYS_MEM_ENABLE_Msk (0x80000UL) /*!< SYS_MEM_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPI_PULLDN_ENABLE_Pos (18UL) /*!< OQSPI_PULLDN_ENABLE (Bit 18) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPI_PULLDN_ENABLE_Msk (0x40000UL) /*!< OQSPI_PULLDN_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPI_PULLUP_ENABLE_Pos (17UL) /*!< OQSPI_PULLUP_ENABLE (Bit 17) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPI_PULLUP_ENABLE_Msk (0x20000UL) /*!< OQSPI_PULLUP_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPI_GPIO_MODE_Pos (16UL) /*!< OQSPI_GPIO_MODE (Bit 16) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPI_GPIO_MODE_Msk (0x10000UL) /*!< OQSPI_GPIO_MODE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_QSPI2_PULLDN_ENABLE_Pos (15UL) /*!< QSPI2_PULLDN_ENABLE (Bit 15) */ + #define CRG_TOP_CLK_AMBA_REG_QSPI2_PULLDN_ENABLE_Msk (0x8000UL) /*!< QSPI2_PULLDN_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_QSPI2_PULLUP_ENABLE_Pos (14UL) /*!< QSPI2_PULLUP_ENABLE (Bit 14) */ + #define CRG_TOP_CLK_AMBA_REG_QSPI2_PULLUP_ENABLE_Msk (0x4000UL) /*!< QSPI2_PULLUP_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_QSPI2_ENABLE_Pos (13UL) /*!< QSPI2_ENABLE (Bit 13) */ + #define CRG_TOP_CLK_AMBA_REG_QSPI2_ENABLE_Msk (0x2000UL) /*!< QSPI2_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_QSPI2_DIV_Pos (11UL) /*!< QSPI2_DIV (Bit 11) */ + #define CRG_TOP_CLK_AMBA_REG_QSPI2_DIV_Msk (0x1800UL) /*!< QSPI2_DIV (Bitfield-Mask: 0x03) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPIF_ENABLE_Pos (10UL) /*!< OQSPIF_ENABLE (Bit 10) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPIF_ENABLE_Msk (0x400UL) /*!< OQSPIF_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPIF_DIV_Pos (8UL) /*!< OQSPIF_DIV (Bit 8) */ + #define CRG_TOP_CLK_AMBA_REG_OQSPIF_DIV_Msk (0x300UL) /*!< OQSPIF_DIV (Bitfield-Mask: 0x03) */ + #define CRG_TOP_CLK_AMBA_REG_TDES_ENABLE_Pos (7UL) /*!< TDES_ENABLE (Bit 7) */ + #define CRG_TOP_CLK_AMBA_REG_TDES_ENABLE_Msk (0x80UL) /*!< TDES_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_PSK_CLK_ENABLE_Pos (6UL) /*!< PSK_CLK_ENABLE (Bit 6) */ + #define CRG_TOP_CLK_AMBA_REG_PSK_CLK_ENABLE_Msk (0x40UL) /*!< PSK_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_AMBA_REG_HCLK_DIV_Pos (0UL) /*!< HCLK_DIV (Bit 0) */ + #define CRG_TOP_CLK_AMBA_REG_HCLK_DIV_Msk (0x7UL) /*!< HCLK_DIV (Bitfield-Mask: 0x07) */ +/* ===================================================== CLK_CTRL_REG ====================================================== */ + #define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_PLL_Pos (13UL) /*!< RUNNING_AT_PLL (Bit 13) */ + #define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_PLL_Msk (0x2000UL) /*!< RUNNING_AT_PLL (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_XTAL40M_Pos (12UL) /*!< RUNNING_AT_XTAL40M (Bit 12) */ + #define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_XTAL40M_Msk (0x1000UL) /*!< RUNNING_AT_XTAL40M (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_LP_CLK_Pos (11UL) /*!< RUNNING_AT_LP_CLK (Bit 11) */ + #define CRG_TOP_CLK_CTRL_REG_RUNNING_AT_LP_CLK_Msk (0x800UL) /*!< RUNNING_AT_LP_CLK (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_CPU_ENABLE_Pos (10UL) /*!< PLL_CPU_ENABLE (Bit 10) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_CPU_ENABLE_Msk (0x400UL) /*!< PLL_CPU_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_PERI_ENABLE_Pos (9UL) /*!< PLL_PERI_ENABLE (Bit 9) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_PERI_ENABLE_Msk (0x200UL) /*!< PLL_PERI_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_SPI_ENABLE_Pos (8UL) /*!< PLL_SPI_ENABLE (Bit 8) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_SPI_ENABLE_Msk (0x100UL) /*!< PLL_SPI_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_AUX_ENABLE_Pos (7UL) /*!< PLL_AUX_ENABLE (Bit 7) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_AUX_ENABLE_Msk (0x80UL) /*!< PLL_AUX_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_SPI_CLK_SEL_Pos (5UL) /*!< PLL_SPI_CLK_SEL (Bit 5) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_SPI_CLK_SEL_Msk (0x60UL) /*!< PLL_SPI_CLK_SEL (Bitfield-Mask: 0x03) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_CLK_SEL_Pos (2UL) /*!< PLL_CLK_SEL (Bit 2) */ + #define CRG_TOP_CLK_CTRL_REG_PLL_CLK_SEL_Msk (0x1cUL) /*!< PLL_CLK_SEL (Bitfield-Mask: 0x07) */ + #define CRG_TOP_CLK_CTRL_REG_SYS_CLK_SEL_Pos (0UL) /*!< SYS_CLK_SEL (Bit 0) */ + #define CRG_TOP_CLK_CTRL_REG_SYS_CLK_SEL_Msk (0x3UL) /*!< SYS_CLK_SEL (Bitfield-Mask: 0x03) */ +/* ===================================================== PMU_CTRL_REG ====================================================== */ + #define CRG_TOP_PMU_CTRL_REG_MAC_SLEEP_Pos (1UL) /*!< MAC_SLEEP (Bit 1) */ + #define CRG_TOP_PMU_CTRL_REG_MAC_SLEEP_Msk (0x2UL) /*!< MAC_SLEEP (Bitfield-Mask: 0x01) */ + #define CRG_TOP_PMU_CTRL_REG_PHY_SLEEP_Pos (0UL) /*!< PHY_SLEEP (Bit 0) */ + #define CRG_TOP_PMU_CTRL_REG_PHY_SLEEP_Msk (0x1UL) /*!< PHY_SLEEP (Bitfield-Mask: 0x01) */ +/* ==================================================== RADIO_RESET_REG ==================================================== */ + #define CRG_TOP_RADIO_RESET_REG_SYSRST_RESET_REQ_Pos (7UL) /*!< SYSRST_RESET_REQ (Bit 7) */ + #define CRG_TOP_RADIO_RESET_REG_SYSRST_RESET_REQ_Msk (0x80UL) /*!< SYSRST_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RADIO_RESET_REG_MACPI_HW_RESET_REQ_Pos (6UL) /*!< MACPI_HW_RESET_REQ (Bit 6) */ + #define CRG_TOP_RADIO_RESET_REG_MACPI_HW_RESET_REQ_Msk (0x40UL) /*!< MACPI_HW_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RADIO_RESET_REG_MACCORE_HW_RESET_REQ_Pos (5UL) /*!< MACCORE_HW_RESET_REQ (Bit 5) */ + #define CRG_TOP_RADIO_RESET_REG_MACCORE_HW_RESET_REQ_Msk (0x20UL) /*!< MACCORE_HW_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RADIO_RESET_REG_WT_HW_RESET_REQ_Pos (4UL) /*!< WT_HW_RESET_REQ (Bit 4) */ + #define CRG_TOP_RADIO_RESET_REG_WT_HW_RESET_REQ_Msk (0x10UL) /*!< WT_HW_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RADIO_RESET_REG_MPIF_HW_RESET_REQ_Pos (3UL) /*!< MPIF_HW_RESET_REQ (Bit 3) */ + #define CRG_TOP_RADIO_RESET_REG_MPIF_HW_RESET_REQ_Msk (0x8UL) /*!< MPIF_HW_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RADIO_RESET_REG_PHYCORE_HW_RESET_REQ_Pos (2UL) /*!< PHYCORE_HW_RESET_REQ (Bit 2) */ + #define CRG_TOP_RADIO_RESET_REG_PHYCORE_HW_RESET_REQ_Msk (0x4UL) /*!< PHYCORE_HW_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RADIO_RESET_REG_PHYREG_HW_RESET_REQ_Pos (1UL) /*!< PHYREG_HW_RESET_REQ (Bit 1) */ + #define CRG_TOP_RADIO_RESET_REG_PHYREG_HW_RESET_REQ_Msk (0x2UL) /*!< PHYREG_HW_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RADIO_RESET_REG_PHYCORE_SW_RESET_REQ_Pos (0UL) /*!< PHYCORE_SW_RESET_REQ (Bit 0) */ + #define CRG_TOP_RADIO_RESET_REG_PHYCORE_SW_RESET_REQ_Msk (0x1UL) /*!< PHYCORE_SW_RESET_REQ (Bitfield-Mask: 0x01) */ +/* =================================================== RESET_FREEZE_REG ==================================================== */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_KDMA_Pos (12UL) /*!< FRZ_KDMA (Bit 12) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_KDMA_Msk (0x1000UL) /*!< FRZ_KDMA (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_DMA_Pos (11UL) /*!< FRZ_DMA (Bit 11) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_DMA_Msk (0x800UL) /*!< FRZ_DMA (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SYS_WDOG_Pos (9UL) /*!< FRZ_SYS_WDOG (Bit 9) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SYS_WDOG_Msk (0x200UL) /*!< FRZ_SYS_WDOG (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM8_Pos (8UL) /*!< FRZ_SWTIM8 (Bit 8) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM8_Msk (0x100UL) /*!< FRZ_SWTIM8 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM7_Pos (7UL) /*!< FRZ_SWTIM7 (Bit 7) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM7_Msk (0x80UL) /*!< FRZ_SWTIM7 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM6_Pos (6UL) /*!< FRZ_SWTIM6 (Bit 6) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM6_Msk (0x40UL) /*!< FRZ_SWTIM6 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM5_Pos (5UL) /*!< FRZ_SWTIM5 (Bit 5) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM5_Msk (0x20UL) /*!< FRZ_SWTIM5 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM4_Pos (4UL) /*!< FRZ_SWTIM4 (Bit 4) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM4_Msk (0x10UL) /*!< FRZ_SWTIM4 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM3_Pos (3UL) /*!< FRZ_SWTIM3 (Bit 3) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM3_Msk (0x8UL) /*!< FRZ_SWTIM3 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM2_Pos (2UL) /*!< FRZ_SWTIM2 (Bit 2) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM2_Msk (0x4UL) /*!< FRZ_SWTIM2 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM_Pos (1UL) /*!< FRZ_SWTIM (Bit 1) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_SWTIM_Msk (0x2UL) /*!< FRZ_SWTIM (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_WKUPTIM_Pos (0UL) /*!< FRZ_WKUPTIM (Bit 0) */ + #define CRG_TOP_RESET_FREEZE_REG_FRZ_WKUPTIM_Msk (0x1UL) /*!< FRZ_WKUPTIM (Bitfield-Mask: 0x01) */ +/* ==================================================== RESET_STAT_REG ===================================================== */ + #define CRG_TOP_RESET_STAT_REG_M33_WDOG_STAT_Pos (4UL) /*!< M33_WDOG_STAT (Bit 4) */ + #define CRG_TOP_RESET_STAT_REG_M33_WDOG_STAT_Msk (0x10UL) /*!< M33_WDOG_STAT (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_STAT_REG_SWD_HWRESET_STAT_Pos (3UL) /*!< SWD_HWRESET_STAT (Bit 3) */ + #define CRG_TOP_RESET_STAT_REG_SWD_HWRESET_STAT_Msk (0x8UL) /*!< SWD_HWRESET_STAT (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_STAT_REG_SWRESET_STAT_Pos (2UL) /*!< SWRESET_STAT (Bit 2) */ + #define CRG_TOP_RESET_STAT_REG_SWRESET_STAT_Msk (0x4UL) /*!< SWRESET_STAT (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_STAT_REG_HWRESET_STAT_Pos (1UL) /*!< HWRESET_STAT (Bit 1) */ + #define CRG_TOP_RESET_STAT_REG_HWRESET_STAT_Msk (0x2UL) /*!< HWRESET_STAT (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RESET_STAT_REG_PORESET_STAT_Pos (0UL) /*!< PORESET_STAT (Bit 0) */ + #define CRG_TOP_RESET_STAT_REG_PORESET_STAT_Msk (0x1UL) /*!< PORESET_STAT (Bitfield-Mask: 0x01) */ +/* ================================================== RETAIN_MEM_CTRL_REG ================================================== */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_DCACHE_RETAIN_Pos (7UL) /*!< DCACHE_RETAIN (Bit 7) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_DCACHE_RETAIN_Msk (0x80UL) /*!< DCACHE_RETAIN (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_CACHE_RETAIN_Pos (6UL) /*!< CACHE_RETAIN (Bit 6) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_CACHE_RETAIN_Msk (0x40UL) /*!< CACHE_RETAIN (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_SYS_RAM3_PWR_CTRL_Pos (4UL) /*!< SYS_RAM3_PWR_CTRL (Bit 4) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_SYS_RAM3_PWR_CTRL_Msk (0x30UL) /*!< SYS_RAM3_PWR_CTRL (Bitfield-Mask: 0x03) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_SYS_RAM2_PWR_CTRL_Pos (2UL) /*!< SYS_RAM2_PWR_CTRL (Bit 2) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_SYS_RAM2_PWR_CTRL_Msk (0xcUL) /*!< SYS_RAM2_PWR_CTRL (Bitfield-Mask: 0x03) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_SYS_RAM1_PWR_CTRL_Pos (0UL) /*!< SYS_RAM1_PWR_CTRL (Bit 0) */ + #define CRG_TOP_RETAIN_MEM_CTRL_REG_SYS_RAM1_PWR_CTRL_Msk (0x3UL) /*!< SYS_RAM1_PWR_CTRL (Bitfield-Mask: 0x03) */ +/* ===================================================== RFMON_INT_REG ===================================================== */ + #define CRG_TOP_RFMON_INT_REG_CFG_RESET_Pos (1UL) /*!< CFG_RESET (Bit 1) */ + #define CRG_TOP_RFMON_INT_REG_CFG_RESET_Msk (0x2UL) /*!< CFG_RESET (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RFMON_INT_REG_CLK_ENABLE_Pos (0UL) /*!< CLK_ENABLE (Bit 0) */ + #define CRG_TOP_RFMON_INT_REG_CLK_ENABLE_Msk (0x1UL) /*!< CLK_ENABLE (Bitfield-Mask: 0x01) */ +/* ===================================================== RST_CTRL_REG ====================================================== */ + #define CRG_TOP_RST_CTRL_REG_MEM_RESET_REQ_Pos (4UL) /*!< MEM_RESET_REQ (Bit 4) */ + #define CRG_TOP_RST_CTRL_REG_MEM_RESET_REQ_Msk (0x10UL) /*!< MEM_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RST_CTRL_REG_TIMER_RESET_REQ_Pos (3UL) /*!< TIMER_RESET_REQ (Bit 3) */ + #define CRG_TOP_RST_CTRL_REG_TIMER_RESET_REQ_Msk (0x8UL) /*!< TIMER_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RST_CTRL_REG_AUD_RESET_REQ_Pos (2UL) /*!< AUD_RESET_REQ (Bit 2) */ + #define CRG_TOP_RST_CTRL_REG_AUD_RESET_REQ_Msk (0x4UL) /*!< AUD_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RST_CTRL_REG_PERI_RESET_REQ_Pos (1UL) /*!< PERI_RESET_REQ (Bit 1) */ + #define CRG_TOP_RST_CTRL_REG_PERI_RESET_REQ_Msk (0x2UL) /*!< PERI_RESET_REQ (Bitfield-Mask: 0x01) */ + #define CRG_TOP_RST_CTRL_REG_SYS_CACHE_FLUSH_WITH_SW_RESET_Pos (0UL) /*!< SYS_CACHE_FLUSH_WITH_SW_RESET (Bit 0) */ + #define CRG_TOP_RST_CTRL_REG_SYS_CACHE_FLUSH_WITH_SW_RESET_Msk (0x1UL) /*!< SYS_CACHE_FLUSH_WITH_SW_RESET (Bitfield-Mask: 0x01) */ +/* ==================================================== SET_FREEZE_REG ===================================================== */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_KDMA_Pos (12UL) /*!< FRZ_KDMA (Bit 12) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_KDMA_Msk (0x1000UL) /*!< FRZ_KDMA (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_DMA_Pos (11UL) /*!< FRZ_DMA (Bit 11) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_DMA_Msk (0x800UL) /*!< FRZ_DMA (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SYS_WDOG_Pos (9UL) /*!< FRZ_SYS_WDOG (Bit 9) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SYS_WDOG_Msk (0x200UL) /*!< FRZ_SYS_WDOG (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM8_Pos (8UL) /*!< FRZ_SWTIM8 (Bit 8) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM8_Msk (0x100UL) /*!< FRZ_SWTIM8 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM7_Pos (7UL) /*!< FRZ_SWTIM7 (Bit 7) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM7_Msk (0x80UL) /*!< FRZ_SWTIM7 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM6_Pos (6UL) /*!< FRZ_SWTIM6 (Bit 6) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM6_Msk (0x40UL) /*!< FRZ_SWTIM6 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM5_Pos (5UL) /*!< FRZ_SWTIM5 (Bit 5) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM5_Msk (0x20UL) /*!< FRZ_SWTIM5 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM4_Pos (4UL) /*!< FRZ_SWTIM4 (Bit 4) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM4_Msk (0x10UL) /*!< FRZ_SWTIM4 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM3_Pos (3UL) /*!< FRZ_SWTIM3 (Bit 3) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM3_Msk (0x8UL) /*!< FRZ_SWTIM3 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM2_Pos (2UL) /*!< FRZ_SWTIM2 (Bit 2) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM2_Msk (0x4UL) /*!< FRZ_SWTIM2 (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM_Pos (1UL) /*!< FRZ_SWTIM (Bit 1) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_SWTIM_Msk (0x2UL) /*!< FRZ_SWTIM (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_WKUPTIM_Pos (0UL) /*!< FRZ_WKUPTIM (Bit 0) */ + #define CRG_TOP_SET_FREEZE_REG_FRZ_WKUPTIM_Msk (0x1UL) /*!< FRZ_WKUPTIM (Bitfield-Mask: 0x01) */ +/* ===================================================== SYS_CTRL_REG ====================================================== */ + #define CRG_TOP_SYS_CTRL_REG_SW_RESET_Pos (7UL) /*!< SW_RESET (Bit 7) */ + #define CRG_TOP_SYS_CTRL_REG_SW_RESET_Msk (0x80UL) /*!< SW_RESET (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_CTRL_REG_CACHERAM_MUX_Pos (6UL) /*!< CACHERAM_MUX (Bit 6) */ + #define CRG_TOP_SYS_CTRL_REG_CACHERAM_MUX_Msk (0x40UL) /*!< CACHERAM_MUX (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_CTRL_REG_DRA_OFF_Pos (5UL) /*!< DRA_OFF (Bit 5) */ + #define CRG_TOP_SYS_CTRL_REG_DRA_OFF_Msk (0x20UL) /*!< DRA_OFF (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_CTRL_REG_DEBUGGER_ENABLE_Pos (4UL) /*!< DEBUGGER_ENABLE (Bit 4) */ + #define CRG_TOP_SYS_CTRL_REG_DEBUGGER_ENABLE_Msk (0x10UL) /*!< DEBUGGER_ENABLE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_CTRL_REG_REMAP_INTVECT_Pos (3UL) /*!< REMAP_INTVECT (Bit 3) */ + #define CRG_TOP_SYS_CTRL_REG_REMAP_INTVECT_Msk (0x8UL) /*!< REMAP_INTVECT (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_CTRL_REG_REMAP_ADR0_Pos (0UL) /*!< REMAP_ADR0 (Bit 0) */ + #define CRG_TOP_SYS_CTRL_REG_REMAP_ADR0_Msk (0x7UL) /*!< REMAP_ADR0 (Bitfield-Mask: 0x07) */ +/* ==================================================== SYS_STATUS_REG ===================================================== */ + #define CRG_TOP_SYS_STATUS_REG_DBG_IS_ACTIVE_Pos (6UL) /*!< DBG_IS_ACTIVE (Bit 6) */ + #define CRG_TOP_SYS_STATUS_REG_DBG_IS_ACTIVE_Msk (0x40UL) /*!< DBG_IS_ACTIVE (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_STATUS_REG_PHY_IS_UP_Pos (5UL) /*!< PHY_IS_UP (Bit 5) */ + #define CRG_TOP_SYS_STATUS_REG_PHY_IS_UP_Msk (0x20UL) /*!< PHY_IS_UP (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_STATUS_REG_PHY_IS_DOWN_Pos (4UL) /*!< PHY_IS_DOWN (Bit 4) */ + #define CRG_TOP_SYS_STATUS_REG_PHY_IS_DOWN_Msk (0x10UL) /*!< PHY_IS_DOWN (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_STATUS_REG_MAC_IS_UP_Pos (3UL) /*!< MAC_IS_UP (Bit 3) */ + #define CRG_TOP_SYS_STATUS_REG_MAC_IS_UP_Msk (0x8UL) /*!< MAC_IS_UP (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_STATUS_REG_MAC_IS_DOWN_Pos (2UL) /*!< MAC_IS_DOWN (Bit 2) */ + #define CRG_TOP_SYS_STATUS_REG_MAC_IS_DOWN_Msk (0x4UL) /*!< MAC_IS_DOWN (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_STATUS_REG_SYS_IS_UP_Pos (1UL) /*!< SYS_IS_UP (Bit 1) */ + #define CRG_TOP_SYS_STATUS_REG_SYS_IS_UP_Msk (0x2UL) /*!< SYS_IS_UP (Bitfield-Mask: 0x01) */ + #define CRG_TOP_SYS_STATUS_REG_SYS_IS_DOWN_Pos (0UL) /*!< SYS_IS_DOWN (Bit 0) */ + #define CRG_TOP_SYS_STATUS_REG_SYS_IS_DOWN_Msk (0x1UL) /*!< SYS_IS_DOWN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ DAI ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== DAI_CONFIG_REG ===================================================== */ + #define DAI_DAI_CONFIG_REG_FRAME_LEN_Pos (2UL) /*!< FRAME_LEN (Bit 2) */ + #define DAI_DAI_CONFIG_REG_FRAME_LEN_Msk (0x1cUL) /*!< FRAME_LEN (Bitfield-Mask: 0x07) */ + #define DAI_DAI_CONFIG_REG_FORMAT_Pos (0UL) /*!< FORMAT (Bit 0) */ + #define DAI_DAI_CONFIG_REG_FORMAT_Msk (0x3UL) /*!< FORMAT (Bitfield-Mask: 0x03) */ +/* ================================================= DAI_DATA_OUT_CTRL_REG ================================================= */ + #define DAI_DAI_DATA_OUT_CTRL_REG_TDM_EARLY_RLS_Pos (5UL) /*!< TDM_EARLY_RLS (Bit 5) */ + #define DAI_DAI_DATA_OUT_CTRL_REG_TDM_EARLY_RLS_Msk (0x20UL) /*!< TDM_EARLY_RLS (Bitfield-Mask: 0x01) */ + #define DAI_DAI_DATA_OUT_CTRL_REG_DATA_OUT_EN_Pos (3UL) /*!< DATA_OUT_EN (Bit 3) */ + #define DAI_DAI_DATA_OUT_CTRL_REG_DATA_OUT_EN_Msk (0x18UL) /*!< DATA_OUT_EN (Bitfield-Mask: 0x03) */ + #define DAI_DAI_DATA_OUT_CTRL_REG_WCLK_POL_Pos (1UL) /*!< WCLK_POL (Bit 1) */ + #define DAI_DAI_DATA_OUT_CTRL_REG_WCLK_POL_Msk (0x2UL) /*!< WCLK_POL (Bitfield-Mask: 0x01) */ + #define DAI_DAI_DATA_OUT_CTRL_REG_BCLK_POL_Pos (0UL) /*!< BCLK_POL (Bit 0) */ + #define DAI_DAI_DATA_OUT_CTRL_REG_BCLK_POL_Msk (0x1UL) /*!< BCLK_POL (Bitfield-Mask: 0x01) */ +/* ================================================= DAI_DATA_OUT_TEST_REG ================================================= */ + #define DAI_DAI_DATA_OUT_TEST_REG_DATA_OUT_POL_Pos (2UL) /*!< DATA_OUT_POL (Bit 2) */ + #define DAI_DAI_DATA_OUT_TEST_REG_DATA_OUT_POL_Msk (0x4UL) /*!< DATA_OUT_POL (Bitfield-Mask: 0x01) */ +/* ==================================================== DAI_ENABLE_REG ===================================================== */ + #define DAI_DAI_ENABLE_REG_EN_Pos (0UL) /*!< EN (Bit 0) */ + #define DAI_DAI_ENABLE_REG_EN_Msk (0x1UL) /*!< EN (Bitfield-Mask: 0x01) */ +/* ===================================================== DAI_MODE_REG ====================================================== */ + #define DAI_DAI_MODE_REG_MODE_Pos (0UL) /*!< MODE (Bit 0) */ + #define DAI_DAI_MODE_REG_MODE_Msk (0x1UL) /*!< MODE (Bitfield-Mask: 0x01) */ +/* ================================================== DAI_OFFSET_LSB_REG =================================================== */ + #define DAI_DAI_OFFSET_LSB_REG_OFFSET_LSB_Pos (0UL) /*!< OFFSET_LSB (Bit 0) */ + #define DAI_DAI_OFFSET_LSB_REG_OFFSET_LSB_Msk (0xffUL) /*!< OFFSET_LSB (Bitfield-Mask: 0xff) */ +/* ================================================== DAI_OFFSET_MSB_REG =================================================== */ + #define DAI_DAI_OFFSET_MSB_REG_OFFSET_MSB_Pos (0UL) /*!< OFFSET_MSB (Bit 0) */ + #define DAI_DAI_OFFSET_MSB_REG_OFFSET_MSB_Msk (0xfUL) /*!< OFFSET_MSB (Bitfield-Mask: 0x0f) */ +/* ==================================================== DAI_RX1_CH_REG ===================================================== */ + #define DAI_DAI_RX1_CH_REG_RX1_CH_Pos (0UL) /*!< RX1_CH (Bit 0) */ + #define DAI_DAI_RX1_CH_REG_RX1_CH_Msk (0x3UL) /*!< RX1_CH (Bitfield-Mask: 0x03) */ +/* ====================================================== DAI_RX1_REG ====================================================== */ + #define DAI_DAI_RX1_REG_RX1_REG_Pos (0UL) /*!< RX1_REG (Bit 0) */ + #define DAI_DAI_RX1_REG_RX1_REG_Msk (0xffffffffUL) /*!< RX1_REG (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DAI_RX2_CH_REG ===================================================== */ + #define DAI_DAI_RX2_CH_REG_RX2_CH_Pos (0UL) /*!< RX2_CH (Bit 0) */ + #define DAI_DAI_RX2_CH_REG_RX2_CH_Msk (0x3UL) /*!< RX2_CH (Bitfield-Mask: 0x03) */ +/* ====================================================== DAI_RX2_REG ====================================================== */ + #define DAI_DAI_RX2_REG_RX2_REG_Pos (0UL) /*!< RX2_REG (Bit 0) */ + #define DAI_DAI_RX2_REG_RX2_REG_Msk (0xffffffffUL) /*!< RX2_REG (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DAI_SLOT_CNT_REG ==================================================== */ + #define DAI_DAI_SLOT_CNT_REG_SLOT_CNT_Pos (0UL) /*!< SLOT_CNT (Bit 0) */ + #define DAI_DAI_SLOT_CNT_REG_SLOT_CNT_Msk (0x3UL) /*!< SLOT_CNT (Bitfield-Mask: 0x03) */ +/* =================================================== DAI_SR_CONFIG_REG =================================================== */ + #define DAI_DAI_SR_CONFIG_REG_DAI_SR_Pos (0UL) /*!< DAI_SR (Bit 0) */ + #define DAI_DAI_SR_CONFIG_REG_DAI_SR_Msk (0x1fUL) /*!< DAI_SR (Bitfield-Mask: 0x1f) */ +/* =================================================== DAI_SYNC_WIN_REG ==================================================== */ + #define DAI_DAI_SYNC_WIN_REG_SYNC_WIN_MODE_Pos (7UL) /*!< SYNC_WIN_MODE (Bit 7) */ + #define DAI_DAI_SYNC_WIN_REG_SYNC_WIN_MODE_Msk (0x80UL) /*!< SYNC_WIN_MODE (Bitfield-Mask: 0x01) */ + #define DAI_DAI_SYNC_WIN_REG_SYNC_WIN_WIDTH_Pos (0UL) /*!< SYNC_WIN_WIDTH (Bit 0) */ + #define DAI_DAI_SYNC_WIN_REG_SYNC_WIN_WIDTH_Msk (0x1fUL) /*!< SYNC_WIN_WIDTH (Bitfield-Mask: 0x1f) */ +/* ==================================================== DAI_TX1_CH_REG ===================================================== */ + #define DAI_DAI_TX1_CH_REG_TX1_CH_Pos (0UL) /*!< TX1_CH (Bit 0) */ + #define DAI_DAI_TX1_CH_REG_TX1_CH_Msk (0x3UL) /*!< TX1_CH (Bitfield-Mask: 0x03) */ +/* ====================================================== DAI_TX1_REG ====================================================== */ + #define DAI_DAI_TX1_REG_TX1_REG_Pos (0UL) /*!< TX1_REG (Bit 0) */ + #define DAI_DAI_TX1_REG_TX1_REG_Msk (0xffffffffUL) /*!< TX1_REG (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DAI_TX2_CH_REG ===================================================== */ + #define DAI_DAI_TX2_CH_REG_TX2_CH_Pos (0UL) /*!< TX2_CH (Bit 0) */ + #define DAI_DAI_TX2_CH_REG_TX2_CH_Msk (0x3UL) /*!< TX2_CH (Bitfield-Mask: 0x03) */ +/* ====================================================== DAI_TX2_REG ====================================================== */ + #define DAI_DAI_TX2_REG_TX2_REG_Pos (0UL) /*!< TX2_REG (Bit 0) */ + #define DAI_DAI_TX2_REG_TX2_REG_Msk (0xffffffffUL) /*!< TX2_REG (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DAI_TX_MUX_REG ===================================================== */ + #define DAI_DAI_TX_MUX_REG_DAI_TX2_SEL_Pos (1UL) /*!< DAI_TX2_SEL (Bit 1) */ + #define DAI_DAI_TX_MUX_REG_DAI_TX2_SEL_Msk (0x2UL) /*!< DAI_TX2_SEL (Bitfield-Mask: 0x01) */ + #define DAI_DAI_TX_MUX_REG_DAI_TX1_SEL_Pos (0UL) /*!< DAI_TX1_SEL (Bit 0) */ + #define DAI_DAI_TX_MUX_REG_DAI_TX1_SEL_Msk (0x1UL) /*!< DAI_TX1_SEL (Bitfield-Mask: 0x01) */ +/* ===================================================== DAI_W_LEN_REG ===================================================== */ + #define DAI_DAI_W_LEN_REG_W_LEN_Pos (0UL) /*!< W_LEN (Bit 0) */ + #define DAI_DAI_W_LEN_REG_W_LEN_Msk (0x3UL) /*!< W_LEN (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ DCACHE ================ */ +/* =========================================================================================================================== */ + +/* ================================================= DCACHE_BASE_ADDR_REG ================================================== */ + #define DCACHE_DCACHE_BASE_ADDR_REG_DCACHE_BASE_ADDR_Pos (0UL) /*!< DCACHE_BASE_ADDR (Bit 0) */ + #define DCACHE_DCACHE_BASE_ADDR_REG_DCACHE_BASE_ADDR_Msk (0x1ffffUL) /*!< DCACHE_BASE_ADDR (Bitfield-Mask: 0x1ffff) */ +/* ==================================================== DCACHE_CTRL_REG ==================================================== */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_DISABLE_CLKGATE_Pos (25UL) /*!< DCACHE_DISABLE_CLKGATE (Bit 25) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_DISABLE_CLKGATE_Msk (0x2000000UL) /*!< DCACHE_DISABLE_CLKGATE (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_WBUFFER_FLUSH_Pos (24UL) /*!< DCACHE_WBUFFER_FLUSH (Bit 24) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_WBUFFER_FLUSH_Msk (0x1000000UL) /*!< DCACHE_WBUFFER_FLUSH (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_WBUFFER_EMPTY_Pos (23UL) /*!< DCACHE_WBUFFER_EMPTY (Bit 23) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_WBUFFER_EMPTY_Msk (0x800000UL) /*!< DCACHE_WBUFFER_EMPTY (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_WFLUSHED_Pos (22UL) /*!< DCACHE_WFLUSHED (Bit 22) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_WFLUSHED_Msk (0x400000UL) /*!< DCACHE_WFLUSHED (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_READY_Pos (21UL) /*!< DCACHE_READY (Bit 21) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_READY_Msk (0x200000UL) /*!< DCACHE_READY (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_WFLUSH_Pos (20UL) /*!< DCACHE_WFLUSH (Bit 20) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_WFLUSH_Msk (0x100000UL) /*!< DCACHE_WFLUSH (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_INIT_Pos (19UL) /*!< DCACHE_INIT (Bit 19) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_INIT_Msk (0x80000UL) /*!< DCACHE_INIT (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_ENABLE_Pos (18UL) /*!< DCACHE_ENABLE (Bit 18) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_ENABLE_Msk (0x40000UL) /*!< DCACHE_ENABLE (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_LEN_Pos (0UL) /*!< DCACHE_LEN (Bit 0) */ + #define DCACHE_DCACHE_CTRL_REG_DCACHE_LEN_Msk (0x3ffffUL) /*!< DCACHE_LEN (Bitfield-Mask: 0x3ffff) */ +/* ================================================== DCACHE_MRM_CTRL_REG ================================================== */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_EVICTS_THRES_STATUS_Pos (5UL) /*!< MRM_IRQ_EVICTS_THRES_STATUS (Bit 5) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_EVICTS_THRES_STATUS_Msk (0x20UL) /*!< MRM_IRQ_EVICTS_THRES_STATUS (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_HITS_THRES_STATUS_Pos (4UL) /*!< MRM_IRQ_HITS_THRES_STATUS (Bit 4) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_HITS_THRES_STATUS_Msk (0x10UL) /*!< MRM_IRQ_HITS_THRES_STATUS (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_MISSES_THRES_STATUS_Pos (3UL) /*!< MRM_IRQ_MISSES_THRES_STATUS (Bit 3) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_MISSES_THRES_STATUS_Msk (0x8UL) /*!< MRM_IRQ_MISSES_THRES_STATUS (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_TINT_STATUS_Pos (2UL) /*!< MRM_IRQ_TINT_STATUS (Bit 2) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_TINT_STATUS_Msk (0x4UL) /*!< MRM_IRQ_TINT_STATUS (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_MASK_Pos (1UL) /*!< MRM_IRQ_MASK (Bit 1) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_IRQ_MASK_Msk (0x2UL) /*!< MRM_IRQ_MASK (Bitfield-Mask: 0x01) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_START_Pos (0UL) /*!< MRM_START (Bit 0) */ + #define DCACHE_DCACHE_MRM_CTRL_REG_MRM_START_Msk (0x1UL) /*!< MRM_START (Bitfield-Mask: 0x01) */ +/* ================================================= DCACHE_MRM_EVICTS_REG ================================================= */ + #define DCACHE_DCACHE_MRM_EVICTS_REG_MRM_EVICTS_Pos (0UL) /*!< MRM_EVICTS (Bit 0) */ + #define DCACHE_DCACHE_MRM_EVICTS_REG_MRM_EVICTS_Msk (0xffffffffUL) /*!< MRM_EVICTS (Bitfield-Mask: 0xffffffff) */ +/* ============================================== DCACHE_MRM_EVICTS_THRES_REG ============================================== */ + #define DCACHE_DCACHE_MRM_EVICTS_THRES_REG_MRM_EVICTS_THRES_Pos (0UL) /*!< MRM_EVICTS_THRES (Bit 0) */ + #define DCACHE_DCACHE_MRM_EVICTS_THRES_REG_MRM_EVICTS_THRES_Msk (0xffffffffUL) /*!< MRM_EVICTS_THRES (Bitfield-Mask: 0xffffffff) */ +/* ================================================== DCACHE_MRM_HITS_REG ================================================== */ + #define DCACHE_DCACHE_MRM_HITS_REG_MRM_HITS_Pos (0UL) /*!< MRM_HITS (Bit 0) */ + #define DCACHE_DCACHE_MRM_HITS_REG_MRM_HITS_Msk (0xffffffffUL) /*!< MRM_HITS (Bitfield-Mask: 0xffffffff) */ +/* =============================================== DCACHE_MRM_HITS_THRES_REG =============================================== */ + #define DCACHE_DCACHE_MRM_HITS_THRES_REG_MRM_HITS_THRES_Pos (0UL) /*!< MRM_HITS_THRES (Bit 0) */ + #define DCACHE_DCACHE_MRM_HITS_THRES_REG_MRM_HITS_THRES_Msk (0xffffffffUL) /*!< MRM_HITS_THRES (Bitfield-Mask: 0xffffffff) */ +/* ================================================= DCACHE_MRM_MISSES_REG ================================================= */ + #define DCACHE_DCACHE_MRM_MISSES_REG_MRM_MISSES_Pos (0UL) /*!< MRM_MISSES (Bit 0) */ + #define DCACHE_DCACHE_MRM_MISSES_REG_MRM_MISSES_Msk (0xffffffffUL) /*!< MRM_MISSES (Bitfield-Mask: 0xffffffff) */ +/* ============================================== DCACHE_MRM_MISSES_THRES_REG ============================================== */ + #define DCACHE_DCACHE_MRM_MISSES_THRES_REG_MRM_MISSES_THRES_Pos (0UL) /*!< MRM_MISSES_THRES (Bit 0) */ + #define DCACHE_DCACHE_MRM_MISSES_THRES_REG_MRM_MISSES_THRES_Msk (0xffffffffUL) /*!< MRM_MISSES_THRES (Bitfield-Mask: 0xffffffff) */ +/* ================================================== DCACHE_MRM_TINT_REG ================================================== */ + #define DCACHE_DCACHE_MRM_TINT_REG_MRM_TINT_Pos (0UL) /*!< MRM_TINT (Bit 0) */ + #define DCACHE_DCACHE_MRM_TINT_REG_MRM_TINT_Msk (0x7ffffUL) /*!< MRM_TINT (Bitfield-Mask: 0x7ffff) */ + +/* =========================================================================================================================== */ +/* ================ DMA ================ */ +/* =========================================================================================================================== */ + +/* =================================================== DMA0_A_START_REG ==================================================== */ + #define DMA_DMA0_A_START_REG_DMA0_A_START_Pos (0UL) /*!< DMA0_A_START (Bit 0) */ + #define DMA_DMA0_A_START_REG_DMA0_A_START_Msk (0xffffffffUL) /*!< DMA0_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA0_B_START_REG ==================================================== */ + #define DMA_DMA0_B_START_REG_DMA0_B_START_Pos (0UL) /*!< DMA0_B_START (Bit 0) */ + #define DMA_DMA0_B_START_REG_DMA0_B_START_Msk (0xffffffffUL) /*!< DMA0_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA0_CTRL_REG ===================================================== */ + #define DMA_DMA0_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA0_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA0_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA0_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA0_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA0_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA0_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA0_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA0_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA0_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA0_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA0_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA0_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA0_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA0_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA0_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA0_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA0_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA0_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA0_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA0_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA0_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA0_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA0_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA0_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA0_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA0_IDX_REG ====================================================== */ + #define DMA_DMA0_IDX_REG_DMA0_IDX_Pos (0UL) /*!< DMA0_IDX (Bit 0) */ + #define DMA_DMA0_IDX_REG_DMA0_IDX_Msk (0xffffUL) /*!< DMA0_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA0_INT_REG ====================================================== */ + #define DMA_DMA0_INT_REG_DMA0_INT_Pos (0UL) /*!< DMA0_INT (Bit 0) */ + #define DMA_DMA0_INT_REG_DMA0_INT_Msk (0xffffUL) /*!< DMA0_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA0_LEN_REG ====================================================== */ + #define DMA_DMA0_LEN_REG_DMA0_LEN_Pos (0UL) /*!< DMA0_LEN (Bit 0) */ + #define DMA_DMA0_LEN_REG_DMA0_LEN_Msk (0xffffUL) /*!< DMA0_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA10_A_START_REG =================================================== */ + #define DMA_DMA10_A_START_REG_DMA10_A_START_Pos (0UL) /*!< DMA10_A_START (Bit 0) */ + #define DMA_DMA10_A_START_REG_DMA10_A_START_Msk (0xffffffffUL) /*!< DMA10_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA10_B_START_REG =================================================== */ + #define DMA_DMA10_B_START_REG_DMA10_B_START_Pos (0UL) /*!< DMA10_B_START (Bit 0) */ + #define DMA_DMA10_B_START_REG_DMA10_B_START_Msk (0xffffffffUL) /*!< DMA10_B_START (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DMA10_CTRL_REG ===================================================== */ + #define DMA_DMA10_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA10_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA10_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA10_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA10_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA10_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA10_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA10_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA10_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA10_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA10_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA10_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA10_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA10_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA10_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA10_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA10_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA10_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA10_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA10_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA10_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA10_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA10_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA10_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA10_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA10_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA10_IDX_REG ===================================================== */ + #define DMA_DMA10_IDX_REG_DMA10_IDX_Pos (0UL) /*!< DMA10_IDX (Bit 0) */ + #define DMA_DMA10_IDX_REG_DMA10_IDX_Msk (0xffffUL) /*!< DMA10_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA10_INT_REG ===================================================== */ + #define DMA_DMA10_INT_REG_DMA10_INT_Pos (0UL) /*!< DMA10_INT (Bit 0) */ + #define DMA_DMA10_INT_REG_DMA10_INT_Msk (0xffffUL) /*!< DMA10_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA10_LEN_REG ===================================================== */ + #define DMA_DMA10_LEN_REG_DMA10_LEN_Pos (0UL) /*!< DMA10_LEN (Bit 0) */ + #define DMA_DMA10_LEN_REG_DMA10_LEN_Msk (0xffffUL) /*!< DMA10_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA11_A_START_REG =================================================== */ + #define DMA_DMA11_A_START_REG_DMA11_A_START_Pos (0UL) /*!< DMA11_A_START (Bit 0) */ + #define DMA_DMA11_A_START_REG_DMA11_A_START_Msk (0xffffffffUL) /*!< DMA11_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA11_B_START_REG =================================================== */ + #define DMA_DMA11_B_START_REG_DMA11_B_START_Pos (0UL) /*!< DMA11_B_START (Bit 0) */ + #define DMA_DMA11_B_START_REG_DMA11_B_START_Msk (0xffffffffUL) /*!< DMA11_B_START (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DMA11_CTRL_REG ===================================================== */ + #define DMA_DMA11_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA11_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA11_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA11_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA11_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA11_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA11_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA11_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA11_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA11_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA11_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA11_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA11_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA11_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA11_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA11_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA11_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA11_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA11_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA11_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA11_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA11_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA11_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA11_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA11_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA11_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA11_IDX_REG ===================================================== */ + #define DMA_DMA11_IDX_REG_DMA11_IDX_Pos (0UL) /*!< DMA11_IDX (Bit 0) */ + #define DMA_DMA11_IDX_REG_DMA11_IDX_Msk (0xffffUL) /*!< DMA11_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA11_INT_REG ===================================================== */ + #define DMA_DMA11_INT_REG_DMA11_INT_Pos (0UL) /*!< DMA11_INT (Bit 0) */ + #define DMA_DMA11_INT_REG_DMA11_INT_Msk (0xffffUL) /*!< DMA11_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA11_LEN_REG ===================================================== */ + #define DMA_DMA11_LEN_REG_DMA11_LEN_Pos (0UL) /*!< DMA11_LEN (Bit 0) */ + #define DMA_DMA11_LEN_REG_DMA11_LEN_Msk (0xffffUL) /*!< DMA11_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA12_A_START_REG =================================================== */ + #define DMA_DMA12_A_START_REG_DMA12_A_START_Pos (0UL) /*!< DMA12_A_START (Bit 0) */ + #define DMA_DMA12_A_START_REG_DMA12_A_START_Msk (0xffffffffUL) /*!< DMA12_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA12_B_START_REG =================================================== */ + #define DMA_DMA12_B_START_REG_DMA12_B_START_Pos (0UL) /*!< DMA12_B_START (Bit 0) */ + #define DMA_DMA12_B_START_REG_DMA12_B_START_Msk (0xffffffffUL) /*!< DMA12_B_START (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DMA12_CTRL_REG ===================================================== */ + #define DMA_DMA12_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA12_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA12_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA12_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA12_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA12_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA12_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA12_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA12_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA12_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA12_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA12_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA12_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA12_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA12_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA12_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA12_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA12_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA12_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA12_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA12_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA12_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA12_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA12_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA12_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA12_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA12_IDX_REG ===================================================== */ + #define DMA_DMA12_IDX_REG_DMA12_IDX_Pos (0UL) /*!< DMA12_IDX (Bit 0) */ + #define DMA_DMA12_IDX_REG_DMA12_IDX_Msk (0xffffUL) /*!< DMA12_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA12_INT_REG ===================================================== */ + #define DMA_DMA12_INT_REG_DMA12_INT_Pos (0UL) /*!< DMA12_INT (Bit 0) */ + #define DMA_DMA12_INT_REG_DMA12_INT_Msk (0xffffUL) /*!< DMA12_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA12_LEN_REG ===================================================== */ + #define DMA_DMA12_LEN_REG_DMA12_LEN_Pos (0UL) /*!< DMA12_LEN (Bit 0) */ + #define DMA_DMA12_LEN_REG_DMA12_LEN_Msk (0xffffUL) /*!< DMA12_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA13_A_START_REG =================================================== */ + #define DMA_DMA13_A_START_REG_DMA13_A_START_Pos (0UL) /*!< DMA13_A_START (Bit 0) */ + #define DMA_DMA13_A_START_REG_DMA13_A_START_Msk (0xffffffffUL) /*!< DMA13_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA13_B_START_REG =================================================== */ + #define DMA_DMA13_B_START_REG_DMA13_B_START_Pos (0UL) /*!< DMA13_B_START (Bit 0) */ + #define DMA_DMA13_B_START_REG_DMA13_B_START_Msk (0xffffffffUL) /*!< DMA13_B_START (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DMA13_CTRL_REG ===================================================== */ + #define DMA_DMA13_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA13_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA13_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA13_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA13_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA13_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA13_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA13_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA13_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA13_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA13_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA13_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA13_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA13_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA13_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA13_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA13_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA13_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA13_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA13_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA13_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA13_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA13_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA13_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA13_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA13_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA13_IDX_REG ===================================================== */ + #define DMA_DMA13_IDX_REG_DMA13_IDX_Pos (0UL) /*!< DMA13_IDX (Bit 0) */ + #define DMA_DMA13_IDX_REG_DMA13_IDX_Msk (0xffffUL) /*!< DMA13_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA13_INT_REG ===================================================== */ + #define DMA_DMA13_INT_REG_DMA13_INT_Pos (0UL) /*!< DMA13_INT (Bit 0) */ + #define DMA_DMA13_INT_REG_DMA13_INT_Msk (0xffffUL) /*!< DMA13_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA13_LEN_REG ===================================================== */ + #define DMA_DMA13_LEN_REG_DMA13_LEN_Pos (0UL) /*!< DMA13_LEN (Bit 0) */ + #define DMA_DMA13_LEN_REG_DMA13_LEN_Msk (0xffffUL) /*!< DMA13_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA14_A_START_REG =================================================== */ + #define DMA_DMA14_A_START_REG_DMA14_A_START_Pos (0UL) /*!< DMA14_A_START (Bit 0) */ + #define DMA_DMA14_A_START_REG_DMA14_A_START_Msk (0xffffffffUL) /*!< DMA14_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA14_B_START_REG =================================================== */ + #define DMA_DMA14_B_START_REG_DMA14_B_START_Pos (0UL) /*!< DMA14_B_START (Bit 0) */ + #define DMA_DMA14_B_START_REG_DMA14_B_START_Msk (0xffffffffUL) /*!< DMA14_B_START (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DMA14_CTRL_REG ===================================================== */ + #define DMA_DMA14_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA14_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA14_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA14_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA14_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA14_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA14_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA14_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA14_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA14_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA14_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA14_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA14_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA14_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA14_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA14_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA14_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA14_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA14_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA14_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA14_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA14_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA14_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA14_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA14_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA14_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA14_IDX_REG ===================================================== */ + #define DMA_DMA14_IDX_REG_DMA14_IDX_Pos (0UL) /*!< DMA14_IDX (Bit 0) */ + #define DMA_DMA14_IDX_REG_DMA14_IDX_Msk (0xffffUL) /*!< DMA14_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA14_INT_REG ===================================================== */ + #define DMA_DMA14_INT_REG_DMA14_INT_Pos (0UL) /*!< DMA14_INT (Bit 0) */ + #define DMA_DMA14_INT_REG_DMA14_INT_Msk (0xffffUL) /*!< DMA14_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA14_LEN_REG ===================================================== */ + #define DMA_DMA14_LEN_REG_DMA14_LEN_Pos (0UL) /*!< DMA14_LEN (Bit 0) */ + #define DMA_DMA14_LEN_REG_DMA14_LEN_Msk (0xffffUL) /*!< DMA14_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA15_A_START_REG =================================================== */ + #define DMA_DMA15_A_START_REG_DMA15_A_START_Pos (0UL) /*!< DMA15_A_START (Bit 0) */ + #define DMA_DMA15_A_START_REG_DMA15_A_START_Msk (0xffffffffUL) /*!< DMA15_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA15_B_START_REG =================================================== */ + #define DMA_DMA15_B_START_REG_DMA15_B_START_Pos (0UL) /*!< DMA15_B_START (Bit 0) */ + #define DMA_DMA15_B_START_REG_DMA15_B_START_Msk (0xffffffffUL) /*!< DMA15_B_START (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DMA15_CTRL_REG ===================================================== */ + #define DMA_DMA15_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA15_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA15_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA15_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA15_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA15_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA15_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA15_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA15_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA15_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA15_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA15_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA15_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA15_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA15_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA15_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA15_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA15_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA15_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA15_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA15_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA15_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA15_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA15_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA15_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA15_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA15_IDX_REG ===================================================== */ + #define DMA_DMA15_IDX_REG_DMA15_IDX_Pos (0UL) /*!< DMA15_IDX (Bit 0) */ + #define DMA_DMA15_IDX_REG_DMA15_IDX_Msk (0xffffUL) /*!< DMA15_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA15_INT_REG ===================================================== */ + #define DMA_DMA15_INT_REG_DMA15_INT_Pos (0UL) /*!< DMA15_INT (Bit 0) */ + #define DMA_DMA15_INT_REG_DMA15_INT_Msk (0xffffUL) /*!< DMA15_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA15_LEN_REG ===================================================== */ + #define DMA_DMA15_LEN_REG_DMA15_LEN_Pos (0UL) /*!< DMA15_LEN (Bit 0) */ + #define DMA_DMA15_LEN_REG_DMA15_LEN_Msk (0xffffUL) /*!< DMA15_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA1_A_START_REG ==================================================== */ + #define DMA_DMA1_A_START_REG_DMA1_A_START_Pos (0UL) /*!< DMA1_A_START (Bit 0) */ + #define DMA_DMA1_A_START_REG_DMA1_A_START_Msk (0xffffffffUL) /*!< DMA1_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA1_B_START_REG ==================================================== */ + #define DMA_DMA1_B_START_REG_DMA1_B_START_Pos (0UL) /*!< DMA1_B_START (Bit 0) */ + #define DMA_DMA1_B_START_REG_DMA1_B_START_Msk (0xffffffffUL) /*!< DMA1_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA1_CTRL_REG ===================================================== */ + #define DMA_DMA1_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA1_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA1_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA1_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA1_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA1_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA1_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA1_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA1_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA1_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA1_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA1_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA1_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA1_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA1_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA1_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA1_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA1_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA1_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA1_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA1_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA1_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA1_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA1_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA1_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA1_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA1_IDX_REG ====================================================== */ + #define DMA_DMA1_IDX_REG_DMA1_IDX_Pos (0UL) /*!< DMA1_IDX (Bit 0) */ + #define DMA_DMA1_IDX_REG_DMA1_IDX_Msk (0xffffUL) /*!< DMA1_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA1_INT_REG ====================================================== */ + #define DMA_DMA1_INT_REG_DMA1_INT_Pos (0UL) /*!< DMA1_INT (Bit 0) */ + #define DMA_DMA1_INT_REG_DMA1_INT_Msk (0xffffUL) /*!< DMA1_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA1_LEN_REG ====================================================== */ + #define DMA_DMA1_LEN_REG_DMA1_LEN_Pos (0UL) /*!< DMA1_LEN (Bit 0) */ + #define DMA_DMA1_LEN_REG_DMA1_LEN_Msk (0xffffUL) /*!< DMA1_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA2_A_START_REG ==================================================== */ + #define DMA_DMA2_A_START_REG_DMA2_A_START_Pos (0UL) /*!< DMA2_A_START (Bit 0) */ + #define DMA_DMA2_A_START_REG_DMA2_A_START_Msk (0xffffffffUL) /*!< DMA2_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA2_B_START_REG ==================================================== */ + #define DMA_DMA2_B_START_REG_DMA2_B_START_Pos (0UL) /*!< DMA2_B_START (Bit 0) */ + #define DMA_DMA2_B_START_REG_DMA2_B_START_Msk (0xffffffffUL) /*!< DMA2_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA2_CTRL_REG ===================================================== */ + #define DMA_DMA2_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA2_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA2_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA2_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA2_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA2_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA2_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA2_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA2_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA2_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA2_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA2_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA2_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA2_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA2_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA2_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA2_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA2_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA2_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA2_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA2_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA2_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA2_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA2_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA2_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA2_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA2_IDX_REG ====================================================== */ + #define DMA_DMA2_IDX_REG_DMA2_IDX_Pos (0UL) /*!< DMA2_IDX (Bit 0) */ + #define DMA_DMA2_IDX_REG_DMA2_IDX_Msk (0xffffUL) /*!< DMA2_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA2_INT_REG ====================================================== */ + #define DMA_DMA2_INT_REG_DMA2_INT_Pos (0UL) /*!< DMA2_INT (Bit 0) */ + #define DMA_DMA2_INT_REG_DMA2_INT_Msk (0xffffUL) /*!< DMA2_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA2_LEN_REG ====================================================== */ + #define DMA_DMA2_LEN_REG_DMA2_LEN_Pos (0UL) /*!< DMA2_LEN (Bit 0) */ + #define DMA_DMA2_LEN_REG_DMA2_LEN_Msk (0xffffUL) /*!< DMA2_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA3_A_START_REG ==================================================== */ + #define DMA_DMA3_A_START_REG_DMA3_A_START_Pos (0UL) /*!< DMA3_A_START (Bit 0) */ + #define DMA_DMA3_A_START_REG_DMA3_A_START_Msk (0xffffffffUL) /*!< DMA3_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA3_B_START_REG ==================================================== */ + #define DMA_DMA3_B_START_REG_DMA3_B_START_Pos (0UL) /*!< DMA3_B_START (Bit 0) */ + #define DMA_DMA3_B_START_REG_DMA3_B_START_Msk (0xffffffffUL) /*!< DMA3_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA3_CTRL_REG ===================================================== */ + #define DMA_DMA3_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA3_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA3_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA3_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA3_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA3_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA3_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA3_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA3_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA3_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA3_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA3_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA3_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA3_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA3_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA3_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA3_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA3_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA3_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA3_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA3_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA3_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA3_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA3_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA3_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA3_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA3_IDX_REG ====================================================== */ + #define DMA_DMA3_IDX_REG_DMA3_IDX_Pos (0UL) /*!< DMA3_IDX (Bit 0) */ + #define DMA_DMA3_IDX_REG_DMA3_IDX_Msk (0xffffUL) /*!< DMA3_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA3_INT_REG ====================================================== */ + #define DMA_DMA3_INT_REG_DMA3_INT_Pos (0UL) /*!< DMA3_INT (Bit 0) */ + #define DMA_DMA3_INT_REG_DMA3_INT_Msk (0xffffUL) /*!< DMA3_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA3_LEN_REG ====================================================== */ + #define DMA_DMA3_LEN_REG_DMA3_LEN_Pos (0UL) /*!< DMA3_LEN (Bit 0) */ + #define DMA_DMA3_LEN_REG_DMA3_LEN_Msk (0xffffUL) /*!< DMA3_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA4_A_START_REG ==================================================== */ + #define DMA_DMA4_A_START_REG_DMA4_A_START_Pos (0UL) /*!< DMA4_A_START (Bit 0) */ + #define DMA_DMA4_A_START_REG_DMA4_A_START_Msk (0xffffffffUL) /*!< DMA4_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA4_B_START_REG ==================================================== */ + #define DMA_DMA4_B_START_REG_DMA4_B_START_Pos (0UL) /*!< DMA4_B_START (Bit 0) */ + #define DMA_DMA4_B_START_REG_DMA4_B_START_Msk (0xffffffffUL) /*!< DMA4_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA4_CTRL_REG ===================================================== */ + #define DMA_DMA4_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA4_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA4_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA4_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA4_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA4_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA4_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA4_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA4_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA4_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA4_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA4_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA4_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA4_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA4_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA4_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA4_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA4_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA4_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA4_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA4_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA4_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA4_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA4_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA4_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA4_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA4_IDX_REG ====================================================== */ + #define DMA_DMA4_IDX_REG_DMA4_IDX_Pos (0UL) /*!< DMA4_IDX (Bit 0) */ + #define DMA_DMA4_IDX_REG_DMA4_IDX_Msk (0xffffUL) /*!< DMA4_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA4_INT_REG ====================================================== */ + #define DMA_DMA4_INT_REG_DMA4_INT_Pos (0UL) /*!< DMA4_INT (Bit 0) */ + #define DMA_DMA4_INT_REG_DMA4_INT_Msk (0xffffUL) /*!< DMA4_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA4_LEN_REG ====================================================== */ + #define DMA_DMA4_LEN_REG_DMA4_LEN_Pos (0UL) /*!< DMA4_LEN (Bit 0) */ + #define DMA_DMA4_LEN_REG_DMA4_LEN_Msk (0xffffUL) /*!< DMA4_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA5_A_START_REG ==================================================== */ + #define DMA_DMA5_A_START_REG_DMA5_A_START_Pos (0UL) /*!< DMA5_A_START (Bit 0) */ + #define DMA_DMA5_A_START_REG_DMA5_A_START_Msk (0xffffffffUL) /*!< DMA5_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA5_B_START_REG ==================================================== */ + #define DMA_DMA5_B_START_REG_DMA5_B_START_Pos (0UL) /*!< DMA5_B_START (Bit 0) */ + #define DMA_DMA5_B_START_REG_DMA5_B_START_Msk (0xffffffffUL) /*!< DMA5_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA5_CTRL_REG ===================================================== */ + #define DMA_DMA5_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA5_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA5_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA5_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA5_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA5_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA5_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA5_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA5_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA5_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA5_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA5_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA5_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA5_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA5_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA5_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA5_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA5_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA5_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA5_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA5_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA5_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA5_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA5_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA5_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA5_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA5_IDX_REG ====================================================== */ + #define DMA_DMA5_IDX_REG_DMA5_IDX_Pos (0UL) /*!< DMA5_IDX (Bit 0) */ + #define DMA_DMA5_IDX_REG_DMA5_IDX_Msk (0xffffUL) /*!< DMA5_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA5_INT_REG ====================================================== */ + #define DMA_DMA5_INT_REG_DMA5_INT_Pos (0UL) /*!< DMA5_INT (Bit 0) */ + #define DMA_DMA5_INT_REG_DMA5_INT_Msk (0xffffUL) /*!< DMA5_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA5_LEN_REG ====================================================== */ + #define DMA_DMA5_LEN_REG_DMA5_LEN_Pos (0UL) /*!< DMA5_LEN (Bit 0) */ + #define DMA_DMA5_LEN_REG_DMA5_LEN_Msk (0xffffUL) /*!< DMA5_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA6_A_START_REG ==================================================== */ + #define DMA_DMA6_A_START_REG_DMA6_A_START_Pos (0UL) /*!< DMA6_A_START (Bit 0) */ + #define DMA_DMA6_A_START_REG_DMA6_A_START_Msk (0xffffffffUL) /*!< DMA6_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA6_B_START_REG ==================================================== */ + #define DMA_DMA6_B_START_REG_DMA6_B_START_Pos (0UL) /*!< DMA6_B_START (Bit 0) */ + #define DMA_DMA6_B_START_REG_DMA6_B_START_Msk (0xffffffffUL) /*!< DMA6_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA6_CTRL_REG ===================================================== */ + #define DMA_DMA6_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA6_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA6_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA6_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA6_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA6_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA6_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA6_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA6_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA6_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA6_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA6_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA6_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA6_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA6_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA6_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA6_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA6_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA6_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA6_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA6_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA6_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA6_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA6_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA6_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA6_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA6_IDX_REG ====================================================== */ + #define DMA_DMA6_IDX_REG_DMA6_IDX_Pos (0UL) /*!< DMA6_IDX (Bit 0) */ + #define DMA_DMA6_IDX_REG_DMA6_IDX_Msk (0xffffUL) /*!< DMA6_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA6_INT_REG ====================================================== */ + #define DMA_DMA6_INT_REG_DMA6_INT_Pos (0UL) /*!< DMA6_INT (Bit 0) */ + #define DMA_DMA6_INT_REG_DMA6_INT_Msk (0xffffUL) /*!< DMA6_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA6_LEN_REG ====================================================== */ + #define DMA_DMA6_LEN_REG_DMA6_LEN_Pos (0UL) /*!< DMA6_LEN (Bit 0) */ + #define DMA_DMA6_LEN_REG_DMA6_LEN_Msk (0xffffUL) /*!< DMA6_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA7_A_START_REG ==================================================== */ + #define DMA_DMA7_A_START_REG_DMA7_A_START_Pos (0UL) /*!< DMA7_A_START (Bit 0) */ + #define DMA_DMA7_A_START_REG_DMA7_A_START_Msk (0xffffffffUL) /*!< DMA7_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA7_B_START_REG ==================================================== */ + #define DMA_DMA7_B_START_REG_DMA7_B_START_Pos (0UL) /*!< DMA7_B_START (Bit 0) */ + #define DMA_DMA7_B_START_REG_DMA7_B_START_Msk (0xffffffffUL) /*!< DMA7_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA7_CTRL_REG ===================================================== */ + #define DMA_DMA7_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA7_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA7_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA7_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA7_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA7_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA7_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA7_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA7_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA7_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA7_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA7_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA7_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA7_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA7_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA7_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA7_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA7_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA7_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA7_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA7_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA7_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA7_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA7_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA7_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA7_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA7_IDX_REG ====================================================== */ + #define DMA_DMA7_IDX_REG_DMA7_IDX_Pos (0UL) /*!< DMA7_IDX (Bit 0) */ + #define DMA_DMA7_IDX_REG_DMA7_IDX_Msk (0xffffUL) /*!< DMA7_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA7_INT_REG ====================================================== */ + #define DMA_DMA7_INT_REG_DMA7_INT_Pos (0UL) /*!< DMA7_INT (Bit 0) */ + #define DMA_DMA7_INT_REG_DMA7_INT_Msk (0xffffUL) /*!< DMA7_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA7_LEN_REG ====================================================== */ + #define DMA_DMA7_LEN_REG_DMA7_LEN_Pos (0UL) /*!< DMA7_LEN (Bit 0) */ + #define DMA_DMA7_LEN_REG_DMA7_LEN_Msk (0xffffUL) /*!< DMA7_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA8_A_START_REG ==================================================== */ + #define DMA_DMA8_A_START_REG_DMA8_A_START_Pos (0UL) /*!< DMA8_A_START (Bit 0) */ + #define DMA_DMA8_A_START_REG_DMA8_A_START_Msk (0xffffffffUL) /*!< DMA8_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA8_B_START_REG ==================================================== */ + #define DMA_DMA8_B_START_REG_DMA8_B_START_Pos (0UL) /*!< DMA8_B_START (Bit 0) */ + #define DMA_DMA8_B_START_REG_DMA8_B_START_Msk (0xffffffffUL) /*!< DMA8_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA8_CTRL_REG ===================================================== */ + #define DMA_DMA8_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA8_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA8_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA8_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA8_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA8_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA8_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA8_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA8_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA8_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA8_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA8_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA8_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA8_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA8_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA8_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA8_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA8_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA8_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA8_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA8_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA8_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA8_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA8_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA8_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA8_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA8_IDX_REG ====================================================== */ + #define DMA_DMA8_IDX_REG_DMA8_IDX_Pos (0UL) /*!< DMA8_IDX (Bit 0) */ + #define DMA_DMA8_IDX_REG_DMA8_IDX_Msk (0xffffUL) /*!< DMA8_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA8_INT_REG ====================================================== */ + #define DMA_DMA8_INT_REG_DMA8_INT_Pos (0UL) /*!< DMA8_INT (Bit 0) */ + #define DMA_DMA8_INT_REG_DMA8_INT_Msk (0xffffUL) /*!< DMA8_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA8_LEN_REG ====================================================== */ + #define DMA_DMA8_LEN_REG_DMA8_LEN_Pos (0UL) /*!< DMA8_LEN (Bit 0) */ + #define DMA_DMA8_LEN_REG_DMA8_LEN_Msk (0xffffUL) /*!< DMA8_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA9_A_START_REG ==================================================== */ + #define DMA_DMA9_A_START_REG_DMA9_A_START_Pos (0UL) /*!< DMA9_A_START (Bit 0) */ + #define DMA_DMA9_A_START_REG_DMA9_A_START_Msk (0xffffffffUL) /*!< DMA9_A_START (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DMA9_B_START_REG ==================================================== */ + #define DMA_DMA9_B_START_REG_DMA9_B_START_Pos (0UL) /*!< DMA9_B_START (Bit 0) */ + #define DMA_DMA9_B_START_REG_DMA9_B_START_Msk (0xffffffffUL) /*!< DMA9_B_START (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DMA9_CTRL_REG ===================================================== */ + #define DMA_DMA9_CTRL_REG_ADDR_INC_Pos (16UL) /*!< ADDR_INC (Bit 16) */ + #define DMA_DMA9_CTRL_REG_ADDR_INC_Msk (0x70000UL) /*!< ADDR_INC (Bitfield-Mask: 0x07) */ + #define DMA_DMA9_CTRL_REG_BUS_ERROR_DETECT_Pos (15UL) /*!< BUS_ERROR_DETECT (Bit 15) */ + #define DMA_DMA9_CTRL_REG_BUS_ERROR_DETECT_Msk (0x8000UL) /*!< BUS_ERROR_DETECT (Bitfield-Mask: 0x01) */ + #define DMA_DMA9_CTRL_REG_BURST_MODE_Pos (13UL) /*!< BURST_MODE (Bit 13) */ + #define DMA_DMA9_CTRL_REG_BURST_MODE_Msk (0x6000UL) /*!< BURST_MODE (Bitfield-Mask: 0x03) */ + #define DMA_DMA9_CTRL_REG_REQ_SENSE_Pos (12UL) /*!< REQ_SENSE (Bit 12) */ + #define DMA_DMA9_CTRL_REG_REQ_SENSE_Msk (0x1000UL) /*!< REQ_SENSE (Bitfield-Mask: 0x01) */ + #define DMA_DMA9_CTRL_REG_DMA_INIT_Pos (11UL) /*!< DMA_INIT (Bit 11) */ + #define DMA_DMA9_CTRL_REG_DMA_INIT_Msk (0x800UL) /*!< DMA_INIT (Bitfield-Mask: 0x01) */ + #define DMA_DMA9_CTRL_REG_DMA_IDLE_Pos (10UL) /*!< DMA_IDLE (Bit 10) */ + #define DMA_DMA9_CTRL_REG_DMA_IDLE_Msk (0x400UL) /*!< DMA_IDLE (Bitfield-Mask: 0x01) */ + #define DMA_DMA9_CTRL_REG_DMA_PRIO_Pos (7UL) /*!< DMA_PRIO (Bit 7) */ + #define DMA_DMA9_CTRL_REG_DMA_PRIO_Msk (0x380UL) /*!< DMA_PRIO (Bitfield-Mask: 0x07) */ + #define DMA_DMA9_CTRL_REG_CIRCULAR_Pos (6UL) /*!< CIRCULAR (Bit 6) */ + #define DMA_DMA9_CTRL_REG_CIRCULAR_Msk (0x40UL) /*!< CIRCULAR (Bitfield-Mask: 0x01) */ + #define DMA_DMA9_CTRL_REG_AINC_Pos (5UL) /*!< AINC (Bit 5) */ + #define DMA_DMA9_CTRL_REG_AINC_Msk (0x20UL) /*!< AINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA9_CTRL_REG_BINC_Pos (4UL) /*!< BINC (Bit 4) */ + #define DMA_DMA9_CTRL_REG_BINC_Msk (0x10UL) /*!< BINC (Bitfield-Mask: 0x01) */ + #define DMA_DMA9_CTRL_REG_DREQ_MODE_Pos (3UL) /*!< DREQ_MODE (Bit 3) */ + #define DMA_DMA9_CTRL_REG_DREQ_MODE_Msk (0x8UL) /*!< DREQ_MODE (Bitfield-Mask: 0x01) */ + #define DMA_DMA9_CTRL_REG_BW_Pos (1UL) /*!< BW (Bit 1) */ + #define DMA_DMA9_CTRL_REG_BW_Msk (0x6UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define DMA_DMA9_CTRL_REG_DMA_ON_Pos (0UL) /*!< DMA_ON (Bit 0) */ + #define DMA_DMA9_CTRL_REG_DMA_ON_Msk (0x1UL) /*!< DMA_ON (Bitfield-Mask: 0x01) */ +/* ===================================================== DMA9_IDX_REG ====================================================== */ + #define DMA_DMA9_IDX_REG_DMA9_IDX_Pos (0UL) /*!< DMA9_IDX (Bit 0) */ + #define DMA_DMA9_IDX_REG_DMA9_IDX_Msk (0xffffUL) /*!< DMA9_IDX (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA9_INT_REG ====================================================== */ + #define DMA_DMA9_INT_REG_DMA9_INT_Pos (0UL) /*!< DMA9_INT (Bit 0) */ + #define DMA_DMA9_INT_REG_DMA9_INT_Msk (0xffffUL) /*!< DMA9_INT (Bitfield-Mask: 0xffff) */ +/* ===================================================== DMA9_LEN_REG ====================================================== */ + #define DMA_DMA9_LEN_REG_DMA9_LEN_Pos (0UL) /*!< DMA9_LEN (Bit 0) */ + #define DMA_DMA9_LEN_REG_DMA9_LEN_Msk (0xffffUL) /*!< DMA9_LEN (Bitfield-Mask: 0xffff) */ +/* =================================================== DMA_CLEAR_INT_REG =================================================== */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH15_Pos (15UL) /*!< DMA_RST_IRQ_CH15 (Bit 15) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH15_Msk (0x8000UL) /*!< DMA_RST_IRQ_CH15 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH14_Pos (14UL) /*!< DMA_RST_IRQ_CH14 (Bit 14) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH14_Msk (0x4000UL) /*!< DMA_RST_IRQ_CH14 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH13_Pos (13UL) /*!< DMA_RST_IRQ_CH13 (Bit 13) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH13_Msk (0x2000UL) /*!< DMA_RST_IRQ_CH13 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH12_Pos (12UL) /*!< DMA_RST_IRQ_CH12 (Bit 12) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH12_Msk (0x1000UL) /*!< DMA_RST_IRQ_CH12 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH11_Pos (11UL) /*!< DMA_RST_IRQ_CH11 (Bit 11) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH11_Msk (0x800UL) /*!< DMA_RST_IRQ_CH11 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH10_Pos (10UL) /*!< DMA_RST_IRQ_CH10 (Bit 10) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH10_Msk (0x400UL) /*!< DMA_RST_IRQ_CH10 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH9_Pos (9UL) /*!< DMA_RST_IRQ_CH9 (Bit 9) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH9_Msk (0x200UL) /*!< DMA_RST_IRQ_CH9 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH8_Pos (8UL) /*!< DMA_RST_IRQ_CH8 (Bit 8) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH8_Msk (0x100UL) /*!< DMA_RST_IRQ_CH8 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH7_Pos (7UL) /*!< DMA_RST_IRQ_CH7 (Bit 7) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH7_Msk (0x80UL) /*!< DMA_RST_IRQ_CH7 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH6_Pos (6UL) /*!< DMA_RST_IRQ_CH6 (Bit 6) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH6_Msk (0x40UL) /*!< DMA_RST_IRQ_CH6 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH5_Pos (5UL) /*!< DMA_RST_IRQ_CH5 (Bit 5) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH5_Msk (0x20UL) /*!< DMA_RST_IRQ_CH5 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH4_Pos (4UL) /*!< DMA_RST_IRQ_CH4 (Bit 4) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH4_Msk (0x10UL) /*!< DMA_RST_IRQ_CH4 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH3_Pos (3UL) /*!< DMA_RST_IRQ_CH3 (Bit 3) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH3_Msk (0x8UL) /*!< DMA_RST_IRQ_CH3 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH2_Pos (2UL) /*!< DMA_RST_IRQ_CH2 (Bit 2) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH2_Msk (0x4UL) /*!< DMA_RST_IRQ_CH2 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH1_Pos (1UL) /*!< DMA_RST_IRQ_CH1 (Bit 1) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH1_Msk (0x2UL) /*!< DMA_RST_IRQ_CH1 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH0_Pos (0UL) /*!< DMA_RST_IRQ_CH0 (Bit 0) */ + #define DMA_DMA_CLEAR_INT_REG_DMA_RST_IRQ_CH0_Msk (0x1UL) /*!< DMA_RST_IRQ_CH0 (Bitfield-Mask: 0x01) */ +/* =================================================== DMA_INT_MASK_REG ==================================================== */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE15_Pos (15UL) /*!< DMA_IRQ_ENABLE15 (Bit 15) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE15_Msk (0x8000UL) /*!< DMA_IRQ_ENABLE15 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE14_Pos (14UL) /*!< DMA_IRQ_ENABLE14 (Bit 14) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE14_Msk (0x4000UL) /*!< DMA_IRQ_ENABLE14 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE13_Pos (13UL) /*!< DMA_IRQ_ENABLE13 (Bit 13) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE13_Msk (0x2000UL) /*!< DMA_IRQ_ENABLE13 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE12_Pos (12UL) /*!< DMA_IRQ_ENABLE12 (Bit 12) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE12_Msk (0x1000UL) /*!< DMA_IRQ_ENABLE12 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE11_Pos (11UL) /*!< DMA_IRQ_ENABLE11 (Bit 11) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE11_Msk (0x800UL) /*!< DMA_IRQ_ENABLE11 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE10_Pos (10UL) /*!< DMA_IRQ_ENABLE10 (Bit 10) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE10_Msk (0x400UL) /*!< DMA_IRQ_ENABLE10 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE9_Pos (9UL) /*!< DMA_IRQ_ENABLE9 (Bit 9) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE9_Msk (0x200UL) /*!< DMA_IRQ_ENABLE9 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE8_Pos (8UL) /*!< DMA_IRQ_ENABLE8 (Bit 8) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE8_Msk (0x100UL) /*!< DMA_IRQ_ENABLE8 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE7_Pos (7UL) /*!< DMA_IRQ_ENABLE7 (Bit 7) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE7_Msk (0x80UL) /*!< DMA_IRQ_ENABLE7 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE6_Pos (6UL) /*!< DMA_IRQ_ENABLE6 (Bit 6) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE6_Msk (0x40UL) /*!< DMA_IRQ_ENABLE6 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE5_Pos (5UL) /*!< DMA_IRQ_ENABLE5 (Bit 5) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE5_Msk (0x20UL) /*!< DMA_IRQ_ENABLE5 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE4_Pos (4UL) /*!< DMA_IRQ_ENABLE4 (Bit 4) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE4_Msk (0x10UL) /*!< DMA_IRQ_ENABLE4 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE3_Pos (3UL) /*!< DMA_IRQ_ENABLE3 (Bit 3) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE3_Msk (0x8UL) /*!< DMA_IRQ_ENABLE3 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE2_Pos (2UL) /*!< DMA_IRQ_ENABLE2 (Bit 2) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE2_Msk (0x4UL) /*!< DMA_IRQ_ENABLE2 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE1_Pos (1UL) /*!< DMA_IRQ_ENABLE1 (Bit 1) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE1_Msk (0x2UL) /*!< DMA_IRQ_ENABLE1 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE0_Pos (0UL) /*!< DMA_IRQ_ENABLE0 (Bit 0) */ + #define DMA_DMA_INT_MASK_REG_DMA_IRQ_ENABLE0_Msk (0x1UL) /*!< DMA_IRQ_ENABLE0 (Bitfield-Mask: 0x01) */ +/* ================================================== DMA_INT_STATUS_REG =================================================== */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR15_Pos (31UL) /*!< DMA_BUS_ERR15 (Bit 31) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR15_Msk (0x80000000UL) /*!< DMA_BUS_ERR15 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR14_Pos (30UL) /*!< DMA_BUS_ERR14 (Bit 30) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR14_Msk (0x40000000UL) /*!< DMA_BUS_ERR14 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR13_Pos (29UL) /*!< DMA_BUS_ERR13 (Bit 29) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR13_Msk (0x20000000UL) /*!< DMA_BUS_ERR13 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR12_Pos (28UL) /*!< DMA_BUS_ERR12 (Bit 28) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR12_Msk (0x10000000UL) /*!< DMA_BUS_ERR12 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR11_Pos (27UL) /*!< DMA_BUS_ERR11 (Bit 27) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR11_Msk (0x8000000UL) /*!< DMA_BUS_ERR11 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR10_Pos (26UL) /*!< DMA_BUS_ERR10 (Bit 26) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR10_Msk (0x4000000UL) /*!< DMA_BUS_ERR10 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR9_Pos (25UL) /*!< DMA_BUS_ERR9 (Bit 25) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR9_Msk (0x2000000UL) /*!< DMA_BUS_ERR9 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR8_Pos (24UL) /*!< DMA_BUS_ERR8 (Bit 24) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR8_Msk (0x1000000UL) /*!< DMA_BUS_ERR8 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR7_Pos (23UL) /*!< DMA_BUS_ERR7 (Bit 23) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR7_Msk (0x800000UL) /*!< DMA_BUS_ERR7 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR6_Pos (22UL) /*!< DMA_BUS_ERR6 (Bit 22) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR6_Msk (0x400000UL) /*!< DMA_BUS_ERR6 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR5_Pos (21UL) /*!< DMA_BUS_ERR5 (Bit 21) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR5_Msk (0x200000UL) /*!< DMA_BUS_ERR5 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR4_Pos (20UL) /*!< DMA_BUS_ERR4 (Bit 20) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR4_Msk (0x100000UL) /*!< DMA_BUS_ERR4 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR3_Pos (19UL) /*!< DMA_BUS_ERR3 (Bit 19) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR3_Msk (0x80000UL) /*!< DMA_BUS_ERR3 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR2_Pos (18UL) /*!< DMA_BUS_ERR2 (Bit 18) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR2_Msk (0x40000UL) /*!< DMA_BUS_ERR2 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR1_Pos (17UL) /*!< DMA_BUS_ERR1 (Bit 17) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR1_Msk (0x20000UL) /*!< DMA_BUS_ERR1 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR0_Pos (16UL) /*!< DMA_BUS_ERR0 (Bit 16) */ + #define DMA_DMA_INT_STATUS_REG_DMA_BUS_ERR0_Msk (0x10000UL) /*!< DMA_BUS_ERR0 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH15_Pos (15UL) /*!< DMA_IRQ_CH15 (Bit 15) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH15_Msk (0x8000UL) /*!< DMA_IRQ_CH15 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH14_Pos (14UL) /*!< DMA_IRQ_CH14 (Bit 14) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH14_Msk (0x4000UL) /*!< DMA_IRQ_CH14 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH13_Pos (13UL) /*!< DMA_IRQ_CH13 (Bit 13) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH13_Msk (0x2000UL) /*!< DMA_IRQ_CH13 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH12_Pos (12UL) /*!< DMA_IRQ_CH12 (Bit 12) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH12_Msk (0x1000UL) /*!< DMA_IRQ_CH12 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH11_Pos (11UL) /*!< DMA_IRQ_CH11 (Bit 11) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH11_Msk (0x800UL) /*!< DMA_IRQ_CH11 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH10_Pos (10UL) /*!< DMA_IRQ_CH10 (Bit 10) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH10_Msk (0x400UL) /*!< DMA_IRQ_CH10 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH9_Pos (9UL) /*!< DMA_IRQ_CH9 (Bit 9) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH9_Msk (0x200UL) /*!< DMA_IRQ_CH9 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH8_Pos (8UL) /*!< DMA_IRQ_CH8 (Bit 8) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH8_Msk (0x100UL) /*!< DMA_IRQ_CH8 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH7_Pos (7UL) /*!< DMA_IRQ_CH7 (Bit 7) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH7_Msk (0x80UL) /*!< DMA_IRQ_CH7 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH6_Pos (6UL) /*!< DMA_IRQ_CH6 (Bit 6) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH6_Msk (0x40UL) /*!< DMA_IRQ_CH6 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH5_Pos (5UL) /*!< DMA_IRQ_CH5 (Bit 5) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH5_Msk (0x20UL) /*!< DMA_IRQ_CH5 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH4_Pos (4UL) /*!< DMA_IRQ_CH4 (Bit 4) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH4_Msk (0x10UL) /*!< DMA_IRQ_CH4 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH3_Pos (3UL) /*!< DMA_IRQ_CH3 (Bit 3) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH3_Msk (0x8UL) /*!< DMA_IRQ_CH3 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH2_Pos (2UL) /*!< DMA_IRQ_CH2 (Bit 2) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH2_Msk (0x4UL) /*!< DMA_IRQ_CH2 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH1_Pos (1UL) /*!< DMA_IRQ_CH1 (Bit 1) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH1_Msk (0x2UL) /*!< DMA_IRQ_CH1 (Bitfield-Mask: 0x01) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH0_Pos (0UL) /*!< DMA_IRQ_CH0 (Bit 0) */ + #define DMA_DMA_INT_STATUS_REG_DMA_IRQ_CH0_Msk (0x1UL) /*!< DMA_IRQ_CH0 (Bitfield-Mask: 0x01) */ +/* =================================================== DMA_REQ_MUX2_REG ==================================================== */ + #define DMA_DMA_REQ_MUX2_REG_DMA7_SEL_Pos (24UL) /*!< DMA7_SEL (Bit 24) */ + #define DMA_DMA_REQ_MUX2_REG_DMA7_SEL_Msk (0x1f000000UL) /*!< DMA7_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX2_REG_DMA6_SEL_Pos (16UL) /*!< DMA6_SEL (Bit 16) */ + #define DMA_DMA_REQ_MUX2_REG_DMA6_SEL_Msk (0x1f0000UL) /*!< DMA6_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX2_REG_DMA5_SEL_Pos (8UL) /*!< DMA5_SEL (Bit 8) */ + #define DMA_DMA_REQ_MUX2_REG_DMA5_SEL_Msk (0x1f00UL) /*!< DMA5_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX2_REG_DMA4_SEL_Pos (0UL) /*!< DMA4_SEL (Bit 0) */ + #define DMA_DMA_REQ_MUX2_REG_DMA4_SEL_Msk (0x1fUL) /*!< DMA4_SEL (Bitfield-Mask: 0x1f) */ +/* =================================================== DMA_REQ_MUX3_REG ==================================================== */ + #define DMA_DMA_REQ_MUX3_REG_DMA11_SEL_Pos (24UL) /*!< DMA11_SEL (Bit 24) */ + #define DMA_DMA_REQ_MUX3_REG_DMA11_SEL_Msk (0x1f000000UL) /*!< DMA11_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX3_REG_DMA10_SEL_Pos (16UL) /*!< DMA10_SEL (Bit 16) */ + #define DMA_DMA_REQ_MUX3_REG_DMA10_SEL_Msk (0x1f0000UL) /*!< DMA10_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX3_REG_DMA9_SEL_Pos (8UL) /*!< DMA9_SEL (Bit 8) */ + #define DMA_DMA_REQ_MUX3_REG_DMA9_SEL_Msk (0x1f00UL) /*!< DMA9_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX3_REG_DMA8_SEL_Pos (0UL) /*!< DMA8_SEL (Bit 0) */ + #define DMA_DMA_REQ_MUX3_REG_DMA8_SEL_Msk (0x1fUL) /*!< DMA8_SEL (Bitfield-Mask: 0x1f) */ +/* =================================================== DMA_REQ_MUX4_REG ==================================================== */ + #define DMA_DMA_REQ_MUX4_REG_DMA15_SEL_Pos (24UL) /*!< DMA15_SEL (Bit 24) */ + #define DMA_DMA_REQ_MUX4_REG_DMA15_SEL_Msk (0x1f000000UL) /*!< DMA15_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX4_REG_DMA14_SEL_Pos (16UL) /*!< DMA14_SEL (Bit 16) */ + #define DMA_DMA_REQ_MUX4_REG_DMA14_SEL_Msk (0x1f0000UL) /*!< DMA14_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX4_REG_DMA13_SEL_Pos (8UL) /*!< DMA13_SEL (Bit 8) */ + #define DMA_DMA_REQ_MUX4_REG_DMA13_SEL_Msk (0x1f00UL) /*!< DMA13_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX4_REG_DMA12_SEL_Pos (0UL) /*!< DMA12_SEL (Bit 0) */ + #define DMA_DMA_REQ_MUX4_REG_DMA12_SEL_Msk (0x1fUL) /*!< DMA12_SEL (Bitfield-Mask: 0x1f) */ +/* ==================================================== DMA_REQ_MUX_REG ==================================================== */ + #define DMA_DMA_REQ_MUX_REG_DMA3_SEL_Pos (24UL) /*!< DMA3_SEL (Bit 24) */ + #define DMA_DMA_REQ_MUX_REG_DMA3_SEL_Msk (0x1f000000UL) /*!< DMA3_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX_REG_DMA2_SEL_Pos (16UL) /*!< DMA2_SEL (Bit 16) */ + #define DMA_DMA_REQ_MUX_REG_DMA2_SEL_Msk (0x1f0000UL) /*!< DMA2_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX_REG_DMA1_SEL_Pos (8UL) /*!< DMA1_SEL (Bit 8) */ + #define DMA_DMA_REQ_MUX_REG_DMA1_SEL_Msk (0x1f00UL) /*!< DMA1_SEL (Bitfield-Mask: 0x1f) */ + #define DMA_DMA_REQ_MUX_REG_DMA0_SEL_Pos (0UL) /*!< DMA0_SEL (Bit 0) */ + #define DMA_DMA_REQ_MUX_REG_DMA0_SEL_Msk (0x1fUL) /*!< DMA0_SEL (Bitfield-Mask: 0x1f) */ + +/* =========================================================================================================================== */ +/* ================ FPLL ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== PLLD_CONFIG_REG ==================================================== */ + #define FPLL_PLLD_CONFIG_REG_OUTDIV_Pos (8UL) /*!< OUTDIV (Bit 8) */ + #define FPLL_PLLD_CONFIG_REG_OUTDIV_Msk (0x300UL) /*!< OUTDIV (Bitfield-Mask: 0x03) */ + #define FPLL_PLLD_CONFIG_REG_INDIV_Pos (5UL) /*!< INDIV (Bit 5) */ + #define FPLL_PLLD_CONFIG_REG_INDIV_Msk (0xe0UL) /*!< INDIV (Bitfield-Mask: 0x07) */ + #define FPLL_PLLD_CONFIG_REG_BIAS_HOLD_Pos (0UL) /*!< BIAS_HOLD (Bit 0) */ + #define FPLL_PLLD_CONFIG_REG_BIAS_HOLD_Msk (0x1UL) /*!< BIAS_HOLD (Bitfield-Mask: 0x01) */ +/* ===================================================== PLLD_CTRL_REG ===================================================== */ + #define FPLL_PLLD_CTRL_REG_FPLL_EN_Pos (5UL) /*!< FPLL_EN (Bit 5) */ + #define FPLL_PLLD_CTRL_REG_FPLL_EN_Msk (0x20UL) /*!< FPLL_EN (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_CTRL_REG_VCO_EN_Pos (4UL) /*!< VCO_EN (Bit 4) */ + #define FPLL_PLLD_CTRL_REG_VCO_EN_Msk (0x10UL) /*!< VCO_EN (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_CTRL_REG_PFD_CP_EN_Pos (3UL) /*!< PFD_CP_EN (Bit 3) */ + #define FPLL_PLLD_CTRL_REG_PFD_CP_EN_Msk (0x8UL) /*!< PFD_CP_EN (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_CTRL_REG_BYPASS_SEL_Pos (2UL) /*!< BYPASS_SEL (Bit 2) */ + #define FPLL_PLLD_CTRL_REG_BYPASS_SEL_Msk (0x4UL) /*!< BYPASS_SEL (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_CTRL_REG_CLKOUT_EN_Pos (1UL) /*!< CLKOUT_EN (Bit 1) */ + #define FPLL_PLLD_CTRL_REG_CLKOUT_EN_Msk (0x2UL) /*!< CLKOUT_EN (Bitfield-Mask: 0x01) */ +/* ==================================================== PLLD_FBDIV_REG ===================================================== */ + #define FPLL_PLLD_FBDIV_REG_FBDIV_Pos (0UL) /*!< FBDIV (Bit 0) */ + #define FPLL_PLLD_FBDIV_REG_FBDIV_Msk (0xfffffUL) /*!< FBDIV (Bitfield-Mask: 0xfffff) */ +/* =================================================== PLLD_IRQ_CLR_REG ==================================================== */ + #define FPLL_PLLD_IRQ_CLR_REG_CLR_IRQ_PLL_LOCK_Pos (1UL) /*!< CLR_IRQ_PLL_LOCK (Bit 1) */ + #define FPLL_PLLD_IRQ_CLR_REG_CLR_IRQ_PLL_LOCK_Msk (0x2UL) /*!< CLR_IRQ_PLL_LOCK (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_IRQ_CLR_REG_CLR_IRQ_PLL_LOST_LOCK_Pos (0UL) /*!< CLR_IRQ_PLL_LOST_LOCK (Bit 0) */ + #define FPLL_PLLD_IRQ_CLR_REG_CLR_IRQ_PLL_LOST_LOCK_Msk (0x1UL) /*!< CLR_IRQ_PLL_LOST_LOCK (Bitfield-Mask: 0x01) */ +/* =================================================== PLLD_IRQ_MASK_REG =================================================== */ + #define FPLL_PLLD_IRQ_MASK_REG_MIRQ_PLL_LOCK_Pos (1UL) /*!< MIRQ_PLL_LOCK (Bit 1) */ + #define FPLL_PLLD_IRQ_MASK_REG_MIRQ_PLL_LOCK_Msk (0x2UL) /*!< MIRQ_PLL_LOCK (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_IRQ_MASK_REG_MIRQ_PLL_LOST_LOCK_Pos (0UL) /*!< MIRQ_PLL_LOST_LOCK (Bit 0) */ + #define FPLL_PLLD_IRQ_MASK_REG_MIRQ_PLL_LOST_LOCK_Msk (0x1UL) /*!< MIRQ_PLL_LOST_LOCK (Bitfield-Mask: 0x01) */ +/* ===================================================== PLLD_IRQ_REG ====================================================== */ + #define FPLL_PLLD_IRQ_REG_IRQ_PLL_LOCK_Pos (1UL) /*!< IRQ_PLL_LOCK (Bit 1) */ + #define FPLL_PLLD_IRQ_REG_IRQ_PLL_LOCK_Msk (0x2UL) /*!< IRQ_PLL_LOCK (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_IRQ_REG_IRQ_PLL_LOST_LOCK_Pos (0UL) /*!< IRQ_PLL_LOST_LOCK (Bit 0) */ + #define FPLL_PLLD_IRQ_REG_IRQ_PLL_LOST_LOCK_Msk (0x1UL) /*!< IRQ_PLL_LOST_LOCK (Bitfield-Mask: 0x01) */ +/* ==================================================== PLLD_STATUS_REG ==================================================== */ + #define FPLL_PLLD_STATUS_REG_STA_PLL_LOCK_Pos (2UL) /*!< STA_PLL_LOCK (Bit 2) */ + #define FPLL_PLLD_STATUS_REG_STA_PLL_LOCK_Msk (0x4UL) /*!< STA_PLL_LOCK (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_STATUS_REG_STA_RUNNING_AT_FPLL_Pos (1UL) /*!< STA_RUNNING_AT_FPLL (Bit 1) */ + #define FPLL_PLLD_STATUS_REG_STA_RUNNING_AT_FPLL_Msk (0x2UL) /*!< STA_RUNNING_AT_FPLL (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_STATUS_REG_STA_RUNNING_AT_XTAL40M_Pos (0UL) /*!< STA_RUNNING_AT_XTAL40M (Bit 0) */ + #define FPLL_PLLD_STATUS_REG_STA_RUNNING_AT_XTAL40M_Msk (0x1UL) /*!< STA_RUNNING_AT_XTAL40M (Bitfield-Mask: 0x01) */ +/* ===================================================== PLLD_TEST_REG ===================================================== */ + #define FPLL_PLLD_TEST_REG_CAL_EN_Pos (5UL) /*!< CAL_EN (Bit 5) */ + #define FPLL_PLLD_TEST_REG_CAL_EN_Msk (0x20UL) /*!< CAL_EN (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_TEST_REG_CP_BIAS_Pos (4UL) /*!< CP_BIAS (Bit 4) */ + #define FPLL_PLLD_TEST_REG_CP_BIAS_Msk (0x10UL) /*!< CP_BIAS (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_TEST_REG_ANA_TEST_SEL_Pos (3UL) /*!< ANA_TEST_SEL (Bit 3) */ + #define FPLL_PLLD_TEST_REG_ANA_TEST_SEL_Msk (0x8UL) /*!< ANA_TEST_SEL (Bitfield-Mask: 0x01) */ + #define FPLL_PLLD_TEST_REG_SDM_DITHER_Pos (1UL) /*!< SDM_DITHER (Bit 1) */ + #define FPLL_PLLD_TEST_REG_SDM_DITHER_Msk (0x6UL) /*!< SDM_DITHER (Bitfield-Mask: 0x03) */ + #define FPLL_PLLD_TEST_REG_SDM_ENABLE_Pos (0UL) /*!< SDM_ENABLE (Bit 0) */ + #define FPLL_PLLD_TEST_REG_SDM_ENABLE_Msk (0x1UL) /*!< SDM_ENABLE (Bitfield-Mask: 0x01) */ +/* =================================================== PLLD_VCO_TRIM_REG =================================================== */ + #define FPLL_PLLD_VCO_TRIM_REG_CAL_VCO_Pos (0UL) /*!< CAL_VCO (Bit 0) */ + #define FPLL_PLLD_VCO_TRIM_REG_CAL_VCO_Msk (0xfUL) /*!< CAL_VCO (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ GPIO ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== BIST_CTRL_REG ===================================================== */ + #define GPIO_BIST_CTRL_REG_SHOW_BIST_Pos (7UL) /*!< SHOW_BIST (Bit 7) */ + #define GPIO_BIST_CTRL_REG_SHOW_BIST_Msk (0x80UL) /*!< SHOW_BIST (Bitfield-Mask: 0x01) */ + #define GPIO_BIST_CTRL_REG_ADDRESS_SCRAMBLING_Pos (6UL) /*!< ADDRESS_SCRAMBLING (Bit 6) */ + #define GPIO_BIST_CTRL_REG_ADDRESS_SCRAMBLING_Msk (0x40UL) /*!< ADDRESS_SCRAMBLING (Bitfield-Mask: 0x01) */ + #define GPIO_BIST_CTRL_REG_FAST_ADDRESS_Pos (5UL) /*!< FAST_ADDRESS (Bit 5) */ + #define GPIO_BIST_CTRL_REG_FAST_ADDRESS_Msk (0x20UL) /*!< FAST_ADDRESS (Bitfield-Mask: 0x01) */ + #define GPIO_BIST_CTRL_REG_RAMBIST_REPEAT_Pos (4UL) /*!< RAMBIST_REPEAT (Bit 4) */ + #define GPIO_BIST_CTRL_REG_RAMBIST_REPEAT_Msk (0x10UL) /*!< RAMBIST_REPEAT (Bitfield-Mask: 0x01) */ + #define GPIO_BIST_CTRL_REG_RAM_BIST_PATTERN_Pos (2UL) /*!< RAM_BIST_PATTERN (Bit 2) */ + #define GPIO_BIST_CTRL_REG_RAM_BIST_PATTERN_Msk (0xcUL) /*!< RAM_BIST_PATTERN (Bitfield-Mask: 0x03) */ + #define GPIO_BIST_CTRL_REG_BIST_CONFIG_Pos (0UL) /*!< BIST_CONFIG (Bit 0) */ + #define GPIO_BIST_CTRL_REG_BIST_CONFIG_Msk (0x3UL) /*!< BIST_CONFIG (Bitfield-Mask: 0x03) */ +/* ===================================================== EMMC_MODE_REG ===================================================== */ + #define GPIO_EMMC_MODE_REG_EMMC_PULL_SEL_Pos (20UL) /*!< EMMC_PULL_SEL (Bit 20) */ + #define GPIO_EMMC_MODE_REG_EMMC_PULL_SEL_Msk (0x3ff00000UL) /*!< EMMC_PULL_SEL (Bitfield-Mask: 0x3ff) */ + #define GPIO_EMMC_MODE_REG_EMMC_PULL_EN_Pos (8UL) /*!< EMMC_PULL_EN (Bit 8) */ + #define GPIO_EMMC_MODE_REG_EMMC_PULL_EN_Msk (0x3ff00UL) /*!< EMMC_PULL_EN (Bitfield-Mask: 0x3ff) */ + #define GPIO_EMMC_MODE_REG_EMMC_CLKIN_SEL_Pos (7UL) /*!< EMMC_CLKIN_SEL (Bit 7) */ + #define GPIO_EMMC_MODE_REG_EMMC_CLKIN_SEL_Msk (0x80UL) /*!< EMMC_CLKIN_SEL (Bitfield-Mask: 0x01) */ + #define GPIO_EMMC_MODE_REG_EMMC_WP_VAL_Pos (6UL) /*!< EMMC_WP_VAL (Bit 6) */ + #define GPIO_EMMC_MODE_REG_EMMC_WP_VAL_Msk (0x40UL) /*!< EMMC_WP_VAL (Bitfield-Mask: 0x01) */ + #define GPIO_EMMC_MODE_REG_EMMC_CD_VAL_Pos (5UL) /*!< EMMC_CD_VAL (Bit 5) */ + #define GPIO_EMMC_MODE_REG_EMMC_CD_VAL_Msk (0x20UL) /*!< EMMC_CD_VAL (Bitfield-Mask: 0x01) */ + #define GPIO_EMMC_MODE_REG_EMMC_WP_SEL_Pos (4UL) /*!< EMMC_WP_SEL (Bit 4) */ + #define GPIO_EMMC_MODE_REG_EMMC_WP_SEL_Msk (0x10UL) /*!< EMMC_WP_SEL (Bitfield-Mask: 0x01) */ + #define GPIO_EMMC_MODE_REG_EMMC_CD_SEL_Pos (3UL) /*!< EMMC_CD_SEL (Bit 3) */ + #define GPIO_EMMC_MODE_REG_EMMC_CD_SEL_Msk (0x8UL) /*!< EMMC_CD_SEL (Bitfield-Mask: 0x01) */ + #define GPIO_EMMC_MODE_REG_EMMC_OCTA_MODE_Pos (2UL) /*!< EMMC_OCTA_MODE (Bit 2) */ + #define GPIO_EMMC_MODE_REG_EMMC_OCTA_MODE_Msk (0x4UL) /*!< EMMC_OCTA_MODE (Bitfield-Mask: 0x01) */ + #define GPIO_EMMC_MODE_REG_EMMC_PORT_SEL_Pos (1UL) /*!< EMMC_PORT_SEL (Bit 1) */ + #define GPIO_EMMC_MODE_REG_EMMC_PORT_SEL_Msk (0x2UL) /*!< EMMC_PORT_SEL (Bitfield-Mask: 0x01) */ + #define GPIO_EMMC_MODE_REG_EMMC_ENABLE_Pos (0UL) /*!< EMMC_ENABLE (Bit 0) */ + #define GPIO_EMMC_MODE_REG_EMMC_ENABLE_Msk (0x1UL) /*!< EMMC_ENABLE (Bitfield-Mask: 0x01) */ +/* =================================================== GPIO_CLK_SEL_REG ==================================================== */ + #define GPIO_GPIO_CLK_SEL_REG_MCLK_OUTPUT_EN_Pos (10UL) /*!< MCLK_OUTPUT_EN (Bit 10) */ + #define GPIO_GPIO_CLK_SEL_REG_MCLK_OUTPUT_EN_Msk (0x400UL) /*!< MCLK_OUTPUT_EN (Bitfield-Mask: 0x01) */ + #define GPIO_GPIO_CLK_SEL_REG_DPLL480M_OUTPUT_EN_Pos (9UL) /*!< DPLL480M_OUTPUT_EN (Bit 9) */ + #define GPIO_GPIO_CLK_SEL_REG_DPLL480M_OUTPUT_EN_Msk (0x200UL) /*!< DPLL480M_OUTPUT_EN (Bitfield-Mask: 0x01) */ + #define GPIO_GPIO_CLK_SEL_REG_FPLL98M_OUTPUT_EN_Pos (8UL) /*!< FPLL98M_OUTPUT_EN (Bit 8) */ + #define GPIO_GPIO_CLK_SEL_REG_FPLL98M_OUTPUT_EN_Msk (0x100UL) /*!< FPLL98M_OUTPUT_EN (Bitfield-Mask: 0x01) */ + #define GPIO_GPIO_CLK_SEL_REG_OSC32K_OUTPUT_EN_Pos (7UL) /*!< OSC32K_OUTPUT_EN (Bit 7) */ + #define GPIO_GPIO_CLK_SEL_REG_OSC32K_OUTPUT_EN_Msk (0x80UL) /*!< OSC32K_OUTPUT_EN (Bitfield-Mask: 0x01) */ + #define GPIO_GPIO_CLK_SEL_REG_XTAL32K_OUTPUT_EN_Pos (6UL) /*!< XTAL32K_OUTPUT_EN (Bit 6) */ + #define GPIO_GPIO_CLK_SEL_REG_XTAL32K_OUTPUT_EN_Msk (0x40UL) /*!< XTAL32K_OUTPUT_EN (Bitfield-Mask: 0x01) */ + #define GPIO_GPIO_CLK_SEL_REG_RC10M_OUTPUT_EN_Pos (5UL) /*!< RC10M_OUTPUT_EN (Bit 5) */ + #define GPIO_GPIO_CLK_SEL_REG_RC10M_OUTPUT_EN_Msk (0x20UL) /*!< RC10M_OUTPUT_EN (Bitfield-Mask: 0x01) */ + #define GPIO_GPIO_CLK_SEL_REG_XTAL40M_OUTPUT_EN_Pos (4UL) /*!< XTAL40M_OUTPUT_EN (Bit 4) */ + #define GPIO_GPIO_CLK_SEL_REG_XTAL40M_OUTPUT_EN_Msk (0x10UL) /*!< XTAL40M_OUTPUT_EN (Bitfield-Mask: 0x01) */ + #define GPIO_GPIO_CLK_SEL_REG_FUNC_CLOCK_EN_Pos (3UL) /*!< FUNC_CLOCK_EN (Bit 3) */ + #define GPIO_GPIO_CLK_SEL_REG_FUNC_CLOCK_EN_Msk (0x8UL) /*!< FUNC_CLOCK_EN (Bitfield-Mask: 0x01) */ + #define GPIO_GPIO_CLK_SEL_REG_FUNC_CLOCK_SEL_Pos (0UL) /*!< FUNC_CLOCK_SEL (Bit 0) */ + #define GPIO_GPIO_CLK_SEL_REG_FUNC_CLOCK_SEL_Msk (0x7UL) /*!< FUNC_CLOCK_SEL (Bitfield-Mask: 0x07) */ +/* ================================================== GPIO_INT_CLR_P0_REG ================================================== */ + #define GPIO_GPIO_INT_CLR_P0_REG_GPIO_CLEAR_P0_Pos (0UL) /*!< GPIO_CLEAR_P0 (Bit 0) */ + #define GPIO_GPIO_INT_CLR_P0_REG_GPIO_CLEAR_P0_Msk (0x3fffUL) /*!< GPIO_CLEAR_P0 (Bitfield-Mask: 0x3fff) */ +/* ================================================== GPIO_INT_CLR_P1_REG ================================================== */ + #define GPIO_GPIO_INT_CLR_P1_REG_GPIO_CLEAR_P1_Pos (0UL) /*!< GPIO_CLEAR_P1 (Bit 0) */ + #define GPIO_GPIO_INT_CLR_P1_REG_GPIO_CLEAR_P1_Msk (0xffffUL) /*!< GPIO_CLEAR_P1 (Bitfield-Mask: 0xffff) */ +/* ================================================== GPIO_INT_POL_P0_REG ================================================== */ + #define GPIO_GPIO_INT_POL_P0_REG_GPIO_POL_P0_Pos (0UL) /*!< GPIO_POL_P0 (Bit 0) */ + #define GPIO_GPIO_INT_POL_P0_REG_GPIO_POL_P0_Msk (0x3fffUL) /*!< GPIO_POL_P0 (Bitfield-Mask: 0x3fff) */ +/* ================================================== GPIO_INT_POL_P1_REG ================================================== */ + #define GPIO_GPIO_INT_POL_P1_REG_GPIO_POL_P1_Pos (0UL) /*!< GPIO_POL_P1 (Bit 0) */ + #define GPIO_GPIO_INT_POL_P1_REG_GPIO_POL_P1_Msk (0xffffUL) /*!< GPIO_POL_P1 (Bitfield-Mask: 0xffff) */ +/* ================================================== GPIO_INT_SEL_P0_REG ================================================== */ + #define GPIO_GPIO_INT_SEL_P0_REG_GPIO_SELECT_P0_Pos (0UL) /*!< GPIO_SELECT_P0 (Bit 0) */ + #define GPIO_GPIO_INT_SEL_P0_REG_GPIO_SELECT_P0_Msk (0x3fffUL) /*!< GPIO_SELECT_P0 (Bitfield-Mask: 0x3fff) */ +/* ================================================== GPIO_INT_SEL_P1_REG ================================================== */ + #define GPIO_GPIO_INT_SEL_P1_REG_GPIO_SELECT_P1_Pos (0UL) /*!< GPIO_SELECT_P1 (Bit 0) */ + #define GPIO_GPIO_INT_SEL_P1_REG_GPIO_SELECT_P1_Msk (0xffffUL) /*!< GPIO_SELECT_P1 (Bitfield-Mask: 0xffff) */ +/* ================================================== GPIO_INT_STS_P0_REG ================================================== */ + #define GPIO_GPIO_INT_STS_P0_REG_GPIO_STAT_P0_Pos (0UL) /*!< GPIO_STAT_P0 (Bit 0) */ + #define GPIO_GPIO_INT_STS_P0_REG_GPIO_STAT_P0_Msk (0x3fffUL) /*!< GPIO_STAT_P0 (Bitfield-Mask: 0x3fff) */ +/* ================================================== GPIO_INT_STS_P1_REG ================================================== */ + #define GPIO_GPIO_INT_STS_P1_REG_GPIO_STAT_P1_Pos (0UL) /*!< GPIO_STAT_P1 (Bit 0) */ + #define GPIO_GPIO_INT_STS_P1_REG_GPIO_STAT_P1_Msk (0xffffUL) /*!< GPIO_STAT_P1 (Bitfield-Mask: 0xffff) */ +/* =================================================== GPIO_SEL1_P0_REG ==================================================== */ + #define GPIO_GPIO_SEL1_P0_REG_GPIO_SEL1_P0_Pos (0UL) /*!< GPIO_SEL1_P0 (Bit 0) */ + #define GPIO_GPIO_SEL1_P0_REG_GPIO_SEL1_P0_Msk (0x3fffUL) /*!< GPIO_SEL1_P0 (Bitfield-Mask: 0x3fff) */ +/* =================================================== GPIO_SEL1_P1_REG ==================================================== */ + #define GPIO_GPIO_SEL1_P1_REG_GPIO_SEL1_P1_Pos (0UL) /*!< GPIO_SEL1_P1 (Bit 0) */ + #define GPIO_GPIO_SEL1_P1_REG_GPIO_SEL1_P1_Msk (0xffffUL) /*!< GPIO_SEL1_P1 (Bitfield-Mask: 0xffff) */ +/* ==================================================== GPIO_SEL_P0_REG ==================================================== */ + #define GPIO_GPIO_SEL_P0_REG_GPIO_SEL_P0_Pos (0UL) /*!< GPIO_SEL_P0 (Bit 0) */ + #define GPIO_GPIO_SEL_P0_REG_GPIO_SEL_P0_Msk (0x3fffUL) /*!< GPIO_SEL_P0 (Bitfield-Mask: 0x3fff) */ +/* ==================================================== GPIO_SEL_P1_REG ==================================================== */ + #define GPIO_GPIO_SEL_P1_REG_GPIO_SEL_P1_Pos (0UL) /*!< GPIO_SEL_P1 (Bit 0) */ + #define GPIO_GPIO_SEL_P1_REG_GPIO_SEL_P1_Msk (0xffffUL) /*!< GPIO_SEL_P1 (Bitfield-Mask: 0xffff) */ +/* ==================================================== P0_00_MODE_REG ===================================================== */ + #define GPIO_P0_00_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_00_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_00_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_00_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_00_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_00_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_00_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_00_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_00_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_00_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_00_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_00_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_00_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_00_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_01_MODE_REG ===================================================== */ + #define GPIO_P0_01_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_01_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_01_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_01_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_01_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_01_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_01_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_01_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_01_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_01_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_01_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_01_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_01_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_01_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_02_MODE_REG ===================================================== */ + #define GPIO_P0_02_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_02_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_02_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_02_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_02_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_02_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_02_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_02_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_02_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_02_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_02_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_02_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_02_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_02_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_03_MODE_REG ===================================================== */ + #define GPIO_P0_03_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_03_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_03_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_03_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_03_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_03_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_03_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_03_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_03_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_03_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_03_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_03_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_03_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_03_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_04_MODE_REG ===================================================== */ + #define GPIO_P0_04_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_04_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_04_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_04_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_04_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_04_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_04_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_04_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_04_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_04_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_04_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_04_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_04_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_04_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_05_MODE_REG ===================================================== */ + #define GPIO_P0_05_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_05_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_05_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_05_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_05_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_05_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_05_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_05_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_05_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_05_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_05_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_05_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_05_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_05_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_06_MODE_REG ===================================================== */ + #define GPIO_P0_06_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_06_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_06_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_06_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_06_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_06_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_06_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_06_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_06_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_06_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_06_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_06_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_06_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_06_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_07_MODE_REG ===================================================== */ + #define GPIO_P0_07_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_07_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_07_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_07_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_07_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_07_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_07_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_07_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_07_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_07_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_07_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_07_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_07_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_07_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_08_MODE_REG ===================================================== */ + #define GPIO_P0_08_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_08_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_08_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_08_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_08_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_08_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_08_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_08_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_08_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_08_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_08_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_08_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_08_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_08_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_09_MODE_REG ===================================================== */ + #define GPIO_P0_09_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_09_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_09_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_09_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_09_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_09_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_09_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_09_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_09_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_09_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_09_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_09_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_09_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_09_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_10_MODE_REG ===================================================== */ + #define GPIO_P0_10_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_10_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_10_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_10_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_10_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_10_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_10_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_10_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_10_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_10_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_10_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_10_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_10_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_10_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_11_MODE_REG ===================================================== */ + #define GPIO_P0_11_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_11_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_11_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_11_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_11_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_11_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_11_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_11_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_11_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_11_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_11_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_11_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_11_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_11_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_12_MODE_REG ===================================================== */ + #define GPIO_P0_12_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_12_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_12_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_12_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_12_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_12_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_12_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_12_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_12_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_12_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_12_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_12_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_12_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_12_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P0_13_MODE_REG ===================================================== */ + #define GPIO_P0_13_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P0_13_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P0_13_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P0_13_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P0_13_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P0_13_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P0_13_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P0_13_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P0_13_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P0_13_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P0_13_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P0_13_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P0_13_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P0_13_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ====================================================== P0_DATA_REG ====================================================== */ + #define GPIO_P0_DATA_REG_P0_DATA_Pos (0UL) /*!< P0_DATA (Bit 0) */ + #define GPIO_P0_DATA_REG_P0_DATA_Msk (0x3fffUL) /*!< P0_DATA (Bitfield-Mask: 0x3fff) */ +/* =================================================== P0_RESET_DATA_REG =================================================== */ + #define GPIO_P0_RESET_DATA_REG_P0_RESET_Pos (0UL) /*!< P0_RESET (Bit 0) */ + #define GPIO_P0_RESET_DATA_REG_P0_RESET_Msk (0x3fffUL) /*!< P0_RESET (Bitfield-Mask: 0x3fff) */ +/* ==================================================== P0_SET_DATA_REG ==================================================== */ + #define GPIO_P0_SET_DATA_REG_P0_SET_Pos (0UL) /*!< P0_SET (Bit 0) */ + #define GPIO_P0_SET_DATA_REG_P0_SET_Msk (0x3fffUL) /*!< P0_SET (Bitfield-Mask: 0x3fff) */ +/* ==================================================== P1_00_MODE_REG ===================================================== */ + #define GPIO_P1_00_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_00_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_00_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_00_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_00_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_00_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_00_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_00_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_00_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_00_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_00_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_00_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_00_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_00_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_01_MODE_REG ===================================================== */ + #define GPIO_P1_01_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_01_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_01_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_01_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_01_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_01_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_01_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_01_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_01_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_01_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_01_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_01_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_01_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_01_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_02_MODE_REG ===================================================== */ + #define GPIO_P1_02_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_02_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_02_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_02_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_02_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_02_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_02_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_02_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_02_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_02_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_02_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_02_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_02_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_02_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_03_MODE_REG ===================================================== */ + #define GPIO_P1_03_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_03_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_03_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_03_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_03_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_03_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_03_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_03_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_03_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_03_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_03_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_03_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_03_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_03_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_04_MODE_REG ===================================================== */ + #define GPIO_P1_04_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_04_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_04_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_04_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_04_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_04_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_04_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_04_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_04_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_04_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_04_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_04_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_04_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_04_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_05_MODE_REG ===================================================== */ + #define GPIO_P1_05_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_05_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_05_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_05_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_05_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_05_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_05_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_05_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_05_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_05_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_05_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_05_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_05_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_05_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_06_MODE_REG ===================================================== */ + #define GPIO_P1_06_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_06_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_06_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_06_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_06_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_06_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_06_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_06_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_06_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_06_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_06_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_06_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_06_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_06_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_07_MODE_REG ===================================================== */ + #define GPIO_P1_07_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_07_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_07_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_07_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_07_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_07_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_07_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_07_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_07_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_07_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_07_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_07_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_07_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_07_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_08_MODE_REG ===================================================== */ + #define GPIO_P1_08_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_08_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_08_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_08_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_08_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_08_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_08_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_08_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_08_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_08_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_08_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_08_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_08_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_08_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_09_MODE_REG ===================================================== */ + #define GPIO_P1_09_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_09_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_09_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_09_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_09_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_09_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_09_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_09_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_09_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_09_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_09_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_09_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_09_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_09_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_10_MODE_REG ===================================================== */ + #define GPIO_P1_10_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_10_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_10_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_10_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_10_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_10_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_10_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_10_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_10_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_10_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_10_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_10_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_10_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_10_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_11_MODE_REG ===================================================== */ + #define GPIO_P1_11_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_11_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_11_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_11_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_11_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_11_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_11_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_11_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_11_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_11_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_11_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_11_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_11_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_11_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_12_MODE_REG ===================================================== */ + #define GPIO_P1_12_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_12_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_12_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_12_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_12_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_12_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_12_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_12_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_12_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_12_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_12_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_12_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_12_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_12_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_13_MODE_REG ===================================================== */ + #define GPIO_P1_13_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_13_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_13_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_13_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_13_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_13_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_13_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_13_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_13_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_13_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_13_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_13_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_13_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_13_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_14_MODE_REG ===================================================== */ + #define GPIO_P1_14_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_14_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_14_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_14_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_14_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_14_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_14_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_14_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_14_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_14_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_14_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_14_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_14_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_14_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ==================================================== P1_15_MODE_REG ===================================================== */ + #define GPIO_P1_15_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_P1_15_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_P1_15_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_P1_15_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_P1_15_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_P1_15_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_P1_15_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_P1_15_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_P1_15_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_P1_15_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_P1_15_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_P1_15_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_P1_15_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_P1_15_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ====================================================== P1_DATA_REG ====================================================== */ + #define GPIO_P1_DATA_REG_P1_DATA_Pos (0UL) /*!< P1_DATA (Bit 0) */ + #define GPIO_P1_DATA_REG_P1_DATA_Msk (0xffffUL) /*!< P1_DATA (Bitfield-Mask: 0xffff) */ +/* =================================================== P1_RESET_DATA_REG =================================================== */ + #define GPIO_P1_RESET_DATA_REG_P1_RESET_Pos (0UL) /*!< P1_RESET (Bit 0) */ + #define GPIO_P1_RESET_DATA_REG_P1_RESET_Msk (0xffffUL) /*!< P1_RESET (Bitfield-Mask: 0xffff) */ +/* ==================================================== P1_SET_DATA_REG ==================================================== */ + #define GPIO_P1_SET_DATA_REG_P1_SET_Pos (0UL) /*!< P1_SET (Bit 0) */ + #define GPIO_P1_SET_DATA_REG_P1_SET_Msk (0xffffUL) /*!< P1_SET (Bitfield-Mask: 0xffff) */ +/* ================================================== RAMBIST_ENABLE1_REG ================================================== */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPC0_VMX32_BIST_ENABLE_Pos (31UL) /*!< LDPC0_VMX32_BIST_ENABLE (Bit 31) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPC0_VMX32_BIST_ENABLE_Msk (0x80000000UL) /*!< LDPC0_VMX32_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPC0_VMX10_BIST_ENABLE_Pos (30UL) /*!< LDPC0_VMX10_BIST_ENABLE (Bit 30) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPC0_VMX10_BIST_ENABLE_Msk (0x40000000UL) /*!< LDPC0_VMX10_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPC0_VR_BIST_ENABLE_Pos (29UL) /*!< LDPC0_VR_BIST_ENABLE (Bit 29) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPC0_VR_BIST_ENABLE_Msk (0x20000000UL) /*!< LDPC0_VR_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPC0_CR_BIST_ENABLE_Pos (28UL) /*!< LDPC0_CR_BIST_ENABLE (Bit 28) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPC0_CR_BIST_ENABLE_Msk (0x10000000UL) /*!< LDPC0_CR_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM6_BIST_ENABLE_Pos (27UL) /*!< FFTMEM6_BIST_ENABLE (Bit 27) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM6_BIST_ENABLE_Msk (0x8000000UL) /*!< FFTMEM6_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM5_BIST_ENABLE_Pos (26UL) /*!< FFTMEM5_BIST_ENABLE (Bit 26) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM5_BIST_ENABLE_Msk (0x4000000UL) /*!< FFTMEM5_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM4_BIST_ENABLE_Pos (25UL) /*!< FFTMEM4_BIST_ENABLE (Bit 25) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM4_BIST_ENABLE_Msk (0x2000000UL) /*!< FFTMEM4_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM3_BIST_ENABLE_Pos (24UL) /*!< FFTMEM3_BIST_ENABLE (Bit 24) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM3_BIST_ENABLE_Msk (0x1000000UL) /*!< FFTMEM3_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM2_BIST_ENABLE_Pos (23UL) /*!< FFTMEM2_BIST_ENABLE (Bit 23) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM2_BIST_ENABLE_Msk (0x800000UL) /*!< FFTMEM2_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM1_BIST_ENABLE_Pos (22UL) /*!< FFTMEM1_BIST_ENABLE (Bit 22) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM1_BIST_ENABLE_Msk (0x400000UL) /*!< FFTMEM1_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM0_BIST_ENABLE_Pos (21UL) /*!< FFTMEM0_BIST_ENABLE (Bit 21) */ + #define GPIO_RAMBIST_ENABLE1_REG_FFTMEM0_BIST_ENABLE_Msk (0x200000UL) /*!< FFTMEM0_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_RADAR_BIST_ENABLE_Pos (20UL) /*!< RADAR_BIST_ENABLE (Bit 20) */ + #define GPIO_RAMBIST_ENABLE1_REG_RADAR_BIST_ENABLE_Msk (0x100000UL) /*!< RADAR_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_BFMEE_BIST_ENABLE_Pos (19UL) /*!< BFMEE_BIST_ENABLE (Bit 19) */ + #define GPIO_RAMBIST_ENABLE1_REG_BFMEE_BIST_ENABLE_Msk (0x80000UL) /*!< BFMEE_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPCTX_BIST_ENABLE_Pos (18UL) /*!< LDPCTX_BIST_ENABLE (Bit 18) */ + #define GPIO_RAMBIST_ENABLE1_REG_LDPCTX_BIST_ENABLE_Msk (0x40000UL) /*!< LDPCTX_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_MPIFRX_BIST_ENABLE_Pos (17UL) /*!< MPIFRX_BIST_ENABLE (Bit 17) */ + #define GPIO_RAMBIST_ENABLE1_REG_MPIFRX_BIST_ENABLE_Msk (0x20000UL) /*!< MPIFRX_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_MPIFTX_BIST_ENABLE_Pos (16UL) /*!< MPIFTX_BIST_ENABLE (Bit 16) */ + #define GPIO_RAMBIST_ENABLE1_REG_MPIFTX_BIST_ENABLE_Msk (0x10000UL) /*!< MPIFTX_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_SBOXRAM_BIST_ENABLE_Pos (15UL) /*!< SBOXRAM_BIST_ENABLE (Bit 15) */ + #define GPIO_RAMBIST_ENABLE1_REG_SBOXRAM_BIST_ENABLE_Msk (0x8000UL) /*!< SBOXRAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_MACRX_BIST_ENABLE_Pos (14UL) /*!< MACRX_BIST_ENABLE (Bit 14) */ + #define GPIO_RAMBIST_ENABLE1_REG_MACRX_BIST_ENABLE_Msk (0x4000UL) /*!< MACRX_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_MACTX_BIST_ENABLE_Pos (13UL) /*!< MACTX_BIST_ENABLE (Bit 13) */ + #define GPIO_RAMBIST_ENABLE1_REG_MACTX_BIST_ENABLE_Msk (0x2000UL) /*!< MACTX_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_MIBRAM_BIST_ENABLE_Pos (12UL) /*!< MIBRAM_BIST_ENABLE (Bit 12) */ + #define GPIO_RAMBIST_ENABLE1_REG_MIBRAM_BIST_ENABLE_Msk (0x1000UL) /*!< MIBRAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_KEYSTG1_BIST_ENABLE_Pos (11UL) /*!< KEYSTG1_BIST_ENABLE (Bit 11) */ + #define GPIO_RAMBIST_ENABLE1_REG_KEYSTG1_BIST_ENABLE_Msk (0x800UL) /*!< KEYSTG1_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_KEYSTG0_BIST_ENABLE_Pos (10UL) /*!< KEYSTG0_BIST_ENABLE (Bit 10) */ + #define GPIO_RAMBIST_ENABLE1_REG_KEYSTG0_BIST_ENABLE_Msk (0x400UL) /*!< KEYSTG0_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_CC312RAM_BIST_ENABLE_Pos (9UL) /*!< CC312RAM_BIST_ENABLE (Bit 9) */ + #define GPIO_RAMBIST_ENABLE1_REG_CC312RAM_BIST_ENABLE_Msk (0x200UL) /*!< CC312RAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_AGCRAM_BIST_ENABLE_Pos (8UL) /*!< AGCRAM_BIST_ENABLE (Bit 8) */ + #define GPIO_RAMBIST_ENABLE1_REG_AGCRAM_BIST_ENABLE_Msk (0x100UL) /*!< AGCRAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_RETMEM_BIST_ENABLE_Pos (7UL) /*!< RETMEM_BIST_ENABLE (Bit 7) */ + #define GPIO_RAMBIST_ENABLE1_REG_RETMEM_BIST_ENABLE_Msk (0x80UL) /*!< RETMEM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM5_BIST_ENABLE_Pos (6UL) /*!< SYSRAM5_BIST_ENABLE (Bit 6) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM5_BIST_ENABLE_Msk (0x40UL) /*!< SYSRAM5_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM4_BIST_ENABLE_Pos (5UL) /*!< SYSRAM4_BIST_ENABLE (Bit 5) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM4_BIST_ENABLE_Msk (0x20UL) /*!< SYSRAM4_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM3_BIST_ENABLE_Pos (4UL) /*!< SYSRAM3_BIST_ENABLE (Bit 4) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM3_BIST_ENABLE_Msk (0x10UL) /*!< SYSRAM3_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM2_BIST_ENABLE_Pos (3UL) /*!< SYSRAM2_BIST_ENABLE (Bit 3) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM2_BIST_ENABLE_Msk (0x8UL) /*!< SYSRAM2_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM1_BIST_ENABLE_Pos (2UL) /*!< SYSRAM1_BIST_ENABLE (Bit 2) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM1_BIST_ENABLE_Msk (0x4UL) /*!< SYSRAM1_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM0_BIST_ENABLE_Pos (1UL) /*!< SYSRAM0_BIST_ENABLE (Bit 1) */ + #define GPIO_RAMBIST_ENABLE1_REG_SYSRAM0_BIST_ENABLE_Msk (0x2UL) /*!< SYSRAM0_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE1_REG_MROM_BIST_ENABLE_Pos (0UL) /*!< MROM_BIST_ENABLE (Bit 0) */ + #define GPIO_RAMBIST_ENABLE1_REG_MROM_BIST_ENABLE_Msk (0x1UL) /*!< MROM_BIST_ENABLE (Bitfield-Mask: 0x01) */ +/* ================================================== RAMBIST_ENABLE2_REG ================================================== */ + #define GPIO_RAMBIST_ENABLE2_REG_DCACHE_TAG_RAM_BIST_ENABLE_Pos (10UL) /*!< DCACHE_TAG_RAM_BIST_ENABLE (Bit 10) */ + #define GPIO_RAMBIST_ENABLE2_REG_DCACHE_TAG_RAM_BIST_ENABLE_Msk (0x400UL) /*!< DCACHE_TAG_RAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_DCACHE_DATA_RAM_BIST_ENABLE_Pos (9UL) /*!< DCACHE_DATA_RAM_BIST_ENABLE (Bit 9) */ + #define GPIO_RAMBIST_ENABLE2_REG_DCACHE_DATA_RAM_BIST_ENABLE_Msk (0x200UL) /*!< DCACHE_DATA_RAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_CACHE_MEM10_BIST_ENABLE_Pos (8UL) /*!< CACHE_MEM10_BIST_ENABLE (Bit 8) */ + #define GPIO_RAMBIST_ENABLE2_REG_CACHE_MEM10_BIST_ENABLE_Msk (0x100UL) /*!< CACHE_MEM10_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_SDIO_RAM_BIST_ENABLE_Pos (7UL) /*!< SDIO_RAM_BIST_ENABLE (Bit 7) */ + #define GPIO_RAMBIST_ENABLE2_REG_SDIO_RAM_BIST_ENABLE_Msk (0x80UL) /*!< SDIO_RAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_EMMCRAM_BIST_ENABLE_Pos (6UL) /*!< EMMCRAM_BIST_ENABLE (Bit 6) */ + #define GPIO_RAMBIST_ENABLE2_REG_EMMCRAM_BIST_ENABLE_Msk (0x40UL) /*!< EMMCRAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_BDFD1_RAM_BIST_ENABLE_Pos (5UL) /*!< BDFD1_RAM_BIST_ENABLE (Bit 5) */ + #define GPIO_RAMBIST_ENABLE2_REG_BDFD1_RAM_BIST_ENABLE_Msk (0x20UL) /*!< BDFD1_RAM_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_HDXY_BIST_ENABLE_Pos (4UL) /*!< LDPC0_HDXY_BIST_ENABLE (Bit 4) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_HDXY_BIST_ENABLE_Msk (0x10UL) /*!< LDPC0_HDXY_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_VMY54_BIST_ENABLE_Pos (3UL) /*!< LDPC0_VMY54_BIST_ENABLE (Bit 3) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_VMY54_BIST_ENABLE_Msk (0x8UL) /*!< LDPC0_VMY54_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_VMY32_BIST_ENABLE_Pos (2UL) /*!< LDPC0_VMY32_BIST_ENABLE (Bit 2) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_VMY32_BIST_ENABLE_Msk (0x4UL) /*!< LDPC0_VMY32_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_VMY10_BIST_ENABLE_Pos (1UL) /*!< LDPC0_VMY10_BIST_ENABLE (Bit 1) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_VMY10_BIST_ENABLE_Msk (0x2UL) /*!< LDPC0_VMY10_BIST_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_VMX54_BIST_ENABLE_Pos (0UL) /*!< LDPC0_VMX54_BIST_ENABLE (Bit 0) */ + #define GPIO_RAMBIST_ENABLE2_REG_LDPC0_VMX54_BIST_ENABLE_Msk (0x1UL) /*!< LDPC0_VMX54_BIST_ENABLE (Bitfield-Mask: 0x01) */ +/* ================================================== RAMBIST_RESULT1_REG ================================================== */ + #define GPIO_RAMBIST_RESULT1_REG_RAM_GRP1_BIST_FAIL_Pos (0UL) /*!< RAM_GRP1_BIST_FAIL (Bit 0) */ + #define GPIO_RAMBIST_RESULT1_REG_RAM_GRP1_BIST_FAIL_Msk (0xffffffffUL) /*!< RAM_GRP1_BIST_FAIL (Bitfield-Mask: 0xffffffff) */ +/* ================================================== RAMBIST_RESULT2_REG ================================================== */ + #define GPIO_RAMBIST_RESULT2_REG_RAM_GRP2_BIST_FAIL_Pos (0UL) /*!< RAM_GRP2_BIST_FAIL (Bit 0) */ + #define GPIO_RAMBIST_RESULT2_REG_RAM_GRP2_BIST_FAIL_Msk (0xffffffffUL) /*!< RAM_GRP2_BIST_FAIL (Bitfield-Mask: 0xffffffff) */ +/* ================================================== RAMBIST_RESULT3_REG ================================================== */ + #define GPIO_RAMBIST_RESULT3_REG_RAM_GRP3_BIST_FAIL_Pos (0UL) /*!< RAM_GRP3_BIST_FAIL (Bit 0) */ + #define GPIO_RAMBIST_RESULT3_REG_RAM_GRP3_BIST_FAIL_Msk (0xfUL) /*!< RAM_GRP3_BIST_FAIL (Bitfield-Mask: 0x0f) */ +/* ================================================== RAMBIST_STATUS1_REG ================================================== */ + #define GPIO_RAMBIST_STATUS1_REG_RAM_GRP1_BIST_BUSY_Pos (0UL) /*!< RAM_GRP1_BIST_BUSY (Bit 0) */ + #define GPIO_RAMBIST_STATUS1_REG_RAM_GRP1_BIST_BUSY_Msk (0xffffffffUL) /*!< RAM_GRP1_BIST_BUSY (Bitfield-Mask: 0xffffffff) */ +/* ================================================== RAMBIST_STATUS2_REG ================================================== */ + #define GPIO_RAMBIST_STATUS2_REG_RAM_GRP2_BIST_BUSY_Pos (0UL) /*!< RAM_GRP2_BIST_BUSY (Bit 0) */ + #define GPIO_RAMBIST_STATUS2_REG_RAM_GRP2_BIST_BUSY_Msk (0xffffffffUL) /*!< RAM_GRP2_BIST_BUSY (Bitfield-Mask: 0xffffffff) */ +/* ================================================== RAMBIST_STATUS3_REG ================================================== */ + #define GPIO_RAMBIST_STATUS3_REG_RAM_GRP3_BIST_BUSY_Pos (0UL) /*!< RAM_GRP3_BIST_BUSY (Bit 0) */ + #define GPIO_RAMBIST_STATUS3_REG_RAM_GRP3_BIST_BUSY_Msk (0xfUL) /*!< RAM_GRP3_BIST_BUSY (Bitfield-Mask: 0x0f) */ +/* ================================================== ROMBIST_RESULT_REG =================================================== */ + #define GPIO_ROMBIST_RESULT_REG_ROMBIST_RESULT_Pos (0UL) /*!< ROMBIST_RESULT (Bit 0) */ + #define GPIO_ROMBIST_RESULT_REG_ROMBIST_RESULT_Msk (0xffffffffUL) /*!< ROMBIST_RESULT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== SDIO_MODE_REG ===================================================== */ + #define GPIO_SDIO_MODE_REG_SDIO_PULL_SEL_Pos (10UL) /*!< SDIO_PULL_SEL (Bit 10) */ + #define GPIO_SDIO_MODE_REG_SDIO_PULL_SEL_Msk (0xfc00UL) /*!< SDIO_PULL_SEL (Bitfield-Mask: 0x3f) */ + #define GPIO_SDIO_MODE_REG_SDIO_PULL_EN_Pos (4UL) /*!< SDIO_PULL_EN (Bit 4) */ + #define GPIO_SDIO_MODE_REG_SDIO_PULL_EN_Msk (0x3f0UL) /*!< SDIO_PULL_EN (Bitfield-Mask: 0x3f) */ + #define GPIO_SDIO_MODE_REG_CFG_DRV_Pos (2UL) /*!< CFG_DRV (Bit 2) */ + #define GPIO_SDIO_MODE_REG_CFG_DRV_Msk (0xcUL) /*!< CFG_DRV (Bitfield-Mask: 0x03) */ + #define GPIO_SDIO_MODE_REG_SDIO_PORT_SEL_Pos (1UL) /*!< SDIO_PORT_SEL (Bit 1) */ + #define GPIO_SDIO_MODE_REG_SDIO_PORT_SEL_Msk (0x2UL) /*!< SDIO_PORT_SEL (Bitfield-Mask: 0x01) */ + #define GPIO_SDIO_MODE_REG_SDIO_PAD_ENABLE_Pos (0UL) /*!< SDIO_PAD_ENABLE (Bit 0) */ + #define GPIO_SDIO_MODE_REG_SDIO_PAD_ENABLE_Msk (0x1UL) /*!< SDIO_PAD_ENABLE (Bitfield-Mask: 0x01) */ +/* ===================================================== SW0_MODE_REG ====================================================== */ + #define GPIO_SW0_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_SW0_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_SW0_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_SW0_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_SW0_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_SW0_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_SW0_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_SW0_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_SW0_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_SW0_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_SW0_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_SW0_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_SW0_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_SW0_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ===================================================== SW1_MODE_REG ====================================================== */ + #define GPIO_SW1_MODE_REG_POE_Pos (15UL) /*!< POE (Bit 15) */ + #define GPIO_SW1_MODE_REG_POE_Msk (0x8000UL) /*!< POE (Bitfield-Mask: 0x01) */ + #define GPIO_SW1_MODE_REG_SR_Pos (14UL) /*!< SR (Bit 14) */ + #define GPIO_SW1_MODE_REG_SR_Msk (0x4000UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define GPIO_SW1_MODE_REG_DS_Pos (12UL) /*!< DS (Bit 12) */ + #define GPIO_SW1_MODE_REG_DS_Msk (0x3000UL) /*!< DS (Bitfield-Mask: 0x03) */ + #define GPIO_SW1_MODE_REG_IS_Pos (11UL) /*!< IS (Bit 11) */ + #define GPIO_SW1_MODE_REG_IS_Msk (0x800UL) /*!< IS (Bitfield-Mask: 0x01) */ + #define GPIO_SW1_MODE_REG_PPOD_Pos (10UL) /*!< PPOD (Bit 10) */ + #define GPIO_SW1_MODE_REG_PPOD_Msk (0x400UL) /*!< PPOD (Bitfield-Mask: 0x01) */ + #define GPIO_SW1_MODE_REG_PUPD_Pos (8UL) /*!< PUPD (Bit 8) */ + #define GPIO_SW1_MODE_REG_PUPD_Msk (0x300UL) /*!< PUPD (Bitfield-Mask: 0x03) */ + #define GPIO_SW1_MODE_REG_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define GPIO_SW1_MODE_REG_PID_Msk (0x7fUL) /*!< PID (Bitfield-Mask: 0x7f) */ +/* ====================================================== SW_DATA_REG ====================================================== */ + #define GPIO_SW_DATA_REG_SWD_DATA_Pos (0UL) /*!< SWD_DATA (Bit 0) */ + #define GPIO_SW_DATA_REG_SWD_DATA_Msk (0x3UL) /*!< SWD_DATA (Bitfield-Mask: 0x03) */ +/* =================================================== SW_RESET_DATA_REG =================================================== */ + #define GPIO_SW_RESET_DATA_REG_SWD_RESET_Pos (0UL) /*!< SWD_RESET (Bit 0) */ + #define GPIO_SW_RESET_DATA_REG_SWD_RESET_Msk (0x3UL) /*!< SWD_RESET (Bitfield-Mask: 0x03) */ +/* ==================================================== SW_SET_DATA_REG ==================================================== */ + #define GPIO_SW_SET_DATA_REG_SWD_SET_Pos (0UL) /*!< SWD_SET (Bit 0) */ + #define GPIO_SW_SET_DATA_REG_SWD_SET_Msk (0x3UL) /*!< SWD_SET (Bitfield-Mask: 0x03) */ +/* ==================================================== TEST_CTRL2_REG ===================================================== */ + #define GPIO_TEST_CTRL2_REG_SCAN_CONTROL_Pos (0UL) /*!< SCAN_CONTROL (Bit 0) */ + #define GPIO_TEST_CTRL2_REG_SCAN_CONTROL_Msk (0x3fUL) /*!< SCAN_CONTROL (Bitfield-Mask: 0x3f) */ +/* ===================================================== TEST_CTRL_REG ===================================================== */ + #define GPIO_TEST_CTRL_REG_RF_ONLY_MODE_SEL_Pos (20UL) /*!< RF_ONLY_MODE_SEL (Bit 20) */ + #define GPIO_TEST_CTRL_REG_RF_ONLY_MODE_SEL_Msk (0x100000UL) /*!< RF_ONLY_MODE_SEL (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_RF_ONLY_MODE_EN_Pos (19UL) /*!< RF_ONLY_MODE_EN (Bit 19) */ + #define GPIO_TEST_CTRL_REG_RF_ONLY_MODE_EN_Msk (0x80000UL) /*!< RF_ONLY_MODE_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_POLARTX_SCAN_TEST_EN_Pos (18UL) /*!< POLARTX_SCAN_TEST_EN (Bit 18) */ + #define GPIO_TEST_CTRL_REG_POLARTX_SCAN_TEST_EN_Msk (0x40000UL) /*!< POLARTX_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_UPSAM_2G4_2_SCAN_TEST_EN_Pos (17UL) /*!< UPSAM_2G4_2_SCAN_TEST_EN (Bit 17) */ + #define GPIO_TEST_CTRL_REG_UPSAM_2G4_2_SCAN_TEST_EN_Msk (0x20000UL) /*!< UPSAM_2G4_2_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_UPSAM_2G4_1_SCAN_TEST_EN_Pos (16UL) /*!< UPSAM_2G4_1_SCAN_TEST_EN (Bit 16) */ + #define GPIO_TEST_CTRL_REG_UPSAM_2G4_1_SCAN_TEST_EN_Msk (0x10000UL) /*!< UPSAM_2G4_1_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_UPSAM_5G0_2_SCAN_TEST_EN_Pos (15UL) /*!< UPSAM_5G0_2_SCAN_TEST_EN (Bit 15) */ + #define GPIO_TEST_CTRL_REG_UPSAM_5G0_2_SCAN_TEST_EN_Msk (0x8000UL) /*!< UPSAM_5G0_2_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_UPSAM_5G0_1_SCAN_TEST_EN_Pos (14UL) /*!< UPSAM_5G0_1_SCAN_TEST_EN (Bit 14) */ + #define GPIO_TEST_CTRL_REG_UPSAM_5G0_1_SCAN_TEST_EN_Msk (0x4000UL) /*!< UPSAM_5G0_1_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_FILCAL_SCAN_TEST_EN_Pos (13UL) /*!< FILCAL_SCAN_TEST_EN (Bit 13) */ + #define GPIO_TEST_CTRL_REG_FILCAL_SCAN_TEST_EN_Msk (0x2000UL) /*!< FILCAL_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_AFC_SCAN_TEST_EN_Pos (12UL) /*!< AFC_SCAN_TEST_EN (Bit 12) */ + #define GPIO_TEST_CTRL_REG_AFC_SCAN_TEST_EN_Msk (0x1000UL) /*!< AFC_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_LOCAL_SCAN_TEST_EN_Pos (11UL) /*!< LOCAL_SCAN_TEST_EN (Bit 11) */ + #define GPIO_TEST_CTRL_REG_LOCAL_SCAN_TEST_EN_Msk (0x800UL) /*!< LOCAL_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_LD_SCAN_TEST_EN_Pos (10UL) /*!< LD_SCAN_TEST_EN (Bit 10) */ + #define GPIO_TEST_CTRL_REG_LD_SCAN_TEST_EN_Msk (0x400UL) /*!< LD_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_ADCSEN_SCAN_TEST_EN_Pos (9UL) /*!< ADCSEN_SCAN_TEST_EN (Bit 9) */ + #define GPIO_TEST_CTRL_REG_ADCSEN_SCAN_TEST_EN_Msk (0x200UL) /*!< ADCSEN_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_RTC_SCAN_TEST_EN_Pos (8UL) /*!< RTC_SCAN_TEST_EN (Bit 8) */ + #define GPIO_TEST_CTRL_REG_RTC_SCAN_TEST_EN_Msk (0x100UL) /*!< RTC_SCAN_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_RFMON_TBUS_SEL_Pos (6UL) /*!< RFMON_TBUS_SEL (Bit 6) */ + #define GPIO_TEST_CTRL_REG_RFMON_TBUS_SEL_Msk (0xc0UL) /*!< RFMON_TBUS_SEL (Bitfield-Mask: 0x03) */ + #define GPIO_TEST_CTRL_REG_AUXADC_TEST_EN_Pos (5UL) /*!< AUXADC_TEST_EN (Bit 5) */ + #define GPIO_TEST_CTRL_REG_AUXADC_TEST_EN_Msk (0x20UL) /*!< AUXADC_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_IQDAC_TEST_EN_Pos (4UL) /*!< IQDAC_TEST_EN (Bit 4) */ + #define GPIO_TEST_CTRL_REG_IQDAC_TEST_EN_Msk (0x10UL) /*!< IQDAC_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_IQADC_TEST_EN_Pos (3UL) /*!< IQADC_TEST_EN (Bit 3) */ + #define GPIO_TEST_CTRL_REG_IQADC_TEST_EN_Msk (0x8UL) /*!< IQADC_TEST_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_RTC_MONITOR_EN_Pos (2UL) /*!< RTC_MONITOR_EN (Bit 2) */ + #define GPIO_TEST_CTRL_REG_RTC_MONITOR_EN_Msk (0x4UL) /*!< RTC_MONITOR_EN (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_RFPT_ENABLE_Pos (1UL) /*!< RFPT_ENABLE (Bit 1) */ + #define GPIO_TEST_CTRL_REG_RFPT_ENABLE_Msk (0x2UL) /*!< RFPT_ENABLE (Bitfield-Mask: 0x01) */ + #define GPIO_TEST_CTRL_REG_SHOW_CLOCKS_Pos (0UL) /*!< SHOW_CLOCKS (Bit 0) */ + #define GPIO_TEST_CTRL_REG_SHOW_CLOCKS_Msk (0x1UL) /*!< SHOW_CLOCKS (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ GPREG ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= DEBUG_REG ======================================================= */ + #define GPREG_DEBUG_REG_ETM_TRACE_MAP_ON_PINS_EN_Pos (4UL) /*!< ETM_TRACE_MAP_ON_PINS_EN (Bit 4) */ + #define GPREG_DEBUG_REG_ETM_TRACE_MAP_ON_PINS_EN_Msk (0x10UL) /*!< ETM_TRACE_MAP_ON_PINS_EN (Bitfield-Mask: 0x01) */ + #define GPREG_DEBUG_REG_SYS_CPUWAIT_ON_JTAG_Pos (3UL) /*!< SYS_CPUWAIT_ON_JTAG (Bit 3) */ + #define GPREG_DEBUG_REG_SYS_CPUWAIT_ON_JTAG_Msk (0x8UL) /*!< SYS_CPUWAIT_ON_JTAG (Bitfield-Mask: 0x01) */ + #define GPREG_DEBUG_REG_SYS_CPUWAIT_Pos (2UL) /*!< SYS_CPUWAIT (Bit 2) */ + #define GPREG_DEBUG_REG_SYS_CPUWAIT_Msk (0x4UL) /*!< SYS_CPUWAIT (Bitfield-Mask: 0x01) */ + #define GPREG_DEBUG_REG_SYS_CPU_IS_HALTED_Pos (1UL) /*!< SYS_CPU_IS_HALTED (Bit 1) */ + #define GPREG_DEBUG_REG_SYS_CPU_IS_HALTED_Msk (0x2UL) /*!< SYS_CPU_IS_HALTED (Bitfield-Mask: 0x01) */ + #define GPREG_DEBUG_REG_SYS_CPU_FREEZE_EN_Pos (0UL) /*!< SYS_CPU_FREEZE_EN (Bit 0) */ + #define GPREG_DEBUG_REG_SYS_CPU_FREEZE_EN_Msk (0x1UL) /*!< SYS_CPU_FREEZE_EN (Bitfield-Mask: 0x01) */ +/* ===================================================== GP_STATUS_REG ===================================================== */ + #define GPREG_GP_STATUS_REG_CAL_PHASE_Pos (0UL) /*!< CAL_PHASE (Bit 0) */ + #define GPREG_GP_STATUS_REG_CAL_PHASE_Msk (0x1UL) /*!< CAL_PHASE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ HW_ACC ================ */ +/* =========================================================================================================================== */ + +/* ================================================== CRC_1_ADDR_MAX_REG =================================================== */ + #define HW_ACC_CRC_1_ADDR_MAX_REG_CRC_1_ADDR_MAX_Pos (0UL) /*!< CRC_1_ADDR_MAX (Bit 0) */ + #define HW_ACC_CRC_1_ADDR_MAX_REG_CRC_1_ADDR_MAX_Msk (0xffffffffUL) /*!< CRC_1_ADDR_MAX (Bitfield-Mask: 0xffffffff) */ +/* ================================================== CRC_1_ADDR_MIN_REG =================================================== */ + #define HW_ACC_CRC_1_ADDR_MIN_REG_CRC_1_ADDR_MIN_Pos (0UL) /*!< CRC_1_ADDR_MIN (Bit 0) */ + #define HW_ACC_CRC_1_ADDR_MIN_REG_CRC_1_ADDR_MIN_Msk (0xffffffffUL) /*!< CRC_1_ADDR_MIN (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CRC_1_CAL_VAL_REG =================================================== */ + #define HW_ACC_CRC_1_CAL_VAL_REG_CRC_1_CAL_VAL_Pos (0UL) /*!< CRC_1_CAL_VAL (Bit 0) */ + #define HW_ACC_CRC_1_CAL_VAL_REG_CRC_1_CAL_VAL_Msk (0xffffffffUL) /*!< CRC_1_CAL_VAL (Bitfield-Mask: 0xffffffff) */ +/* ================================================= CRC_1_CAL_VAL_REV_REG ================================================= */ + #define HW_ACC_CRC_1_CAL_VAL_REV_REG_CRC_1_CAL_VAL_REV_Pos (0UL) /*!< CRC_1_CAL_VAL_REV (Bit 0) */ + #define HW_ACC_CRC_1_CAL_VAL_REV_REG_CRC_1_CAL_VAL_REV_Msk (0xffffffffUL) /*!< CRC_1_CAL_VAL_REV (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CRC_1_CONFIG_REG ==================================================== */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_OP_TYPE_Pos (26UL) /*!< CRC_1_OP_TYPE (Bit 26) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_OP_TYPE_Msk (0xc000000UL) /*!< CRC_1_OP_TYPE (Bitfield-Mask: 0x03) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_CHK_MST_Pos (25UL) /*!< CRC_1_CHK_MST (Bit 25) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_CHK_MST_Msk (0x2000000UL) /*!< CRC_1_CHK_MST (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_CHK_ADDR_Pos (24UL) /*!< CRC_1_CHK_ADDR (Bit 24) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_CHK_ADDR_Msk (0x1000000UL) /*!< CRC_1_CHK_ADDR (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_MST_TYPE_Pos (16UL) /*!< CRC_1_MST_TYPE (Bit 16) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_MST_TYPE_Msk (0x1f0000UL) /*!< CRC_1_MST_TYPE (Bitfield-Mask: 0x1f) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_SWAP_EN_Pos (13UL) /*!< CRC_1_SWAP_EN (Bit 13) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_SWAP_EN_Msk (0x2000UL) /*!< CRC_1_SWAP_EN (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_ENDIAN_TYPE_Pos (12UL) /*!< CRC_1_ENDIAN_TYPE (Bit 12) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_ENDIAN_TYPE_Msk (0x1000UL) /*!< CRC_1_ENDIAN_TYPE (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_PAR_TYPE_Pos (9UL) /*!< CRC_1_PAR_TYPE (Bit 9) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_PAR_TYPE_Msk (0x600UL) /*!< CRC_1_PAR_TYPE (Bitfield-Mask: 0x03) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_ACC_TYPE_Pos (8UL) /*!< CRC_1_ACC_TYPE (Bit 8) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_ACC_TYPE_Msk (0x100UL) /*!< CRC_1_ACC_TYPE (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_PATH_SEL_Pos (0UL) /*!< CRC_1_PATH_SEL (Bit 0) */ + #define HW_ACC_CRC_1_CONFIG_REG_CRC_1_PATH_SEL_Msk (0x1fUL) /*!< CRC_1_PATH_SEL (Bitfield-Mask: 0x1f) */ +/* ==================================================== CRC_1_OP_EN_REG ==================================================== */ + #define HW_ACC_CRC_1_OP_EN_REG_CRC_1_OP_EN_Pos (0UL) /*!< CRC_1_OP_EN (Bit 0) */ + #define HW_ACC_CRC_1_OP_EN_REG_CRC_1_OP_EN_Msk (0x1UL) /*!< CRC_1_OP_EN (Bitfield-Mask: 0x01) */ +/* ================================================= CRC_1_PSEUDO_VAL_REG ================================================== */ + #define HW_ACC_CRC_1_PSEUDO_VAL_REG_CRC_1_PSEUDO_VAL_Pos (0UL) /*!< CRC_1_PSEUDO_VAL (Bit 0) */ + #define HW_ACC_CRC_1_PSEUDO_VAL_REG_CRC_1_PSEUDO_VAL_Msk (0xffffffffUL) /*!< CRC_1_PSEUDO_VAL (Bitfield-Mask: 0xffffffff) */ +/* ================================================== CRC_1_REQ_CTRL_REG =================================================== */ + #define HW_ACC_CRC_1_REQ_CTRL_REG_CRC_1_REQ_STOP_Pos (2UL) /*!< CRC_1_REQ_STOP (Bit 2) */ + #define HW_ACC_CRC_1_REQ_CTRL_REG_CRC_1_REQ_STOP_Msk (0x4UL) /*!< CRC_1_REQ_STOP (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_1_REQ_CTRL_REG_CRC_1_REQ_START_Pos (1UL) /*!< CRC_1_REQ_START (Bit 1) */ + #define HW_ACC_CRC_1_REQ_CTRL_REG_CRC_1_REQ_START_Msk (0x2UL) /*!< CRC_1_REQ_START (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_1_REQ_CTRL_REG_CRC_1_REQ_CLR_Pos (0UL) /*!< CRC_1_REQ_CLR (Bit 0) */ + #define HW_ACC_CRC_1_REQ_CTRL_REG_CRC_1_REQ_CLR_Msk (0x1UL) /*!< CRC_1_REQ_CLR (Bitfield-Mask: 0x01) */ +/* ================================================== CRC_1_SEED_VAL_REG =================================================== */ + #define HW_ACC_CRC_1_SEED_VAL_REG_CRC_1_SEED_VAL_Pos (0UL) /*!< CRC_1_SEED_VAL (Bit 0) */ + #define HW_ACC_CRC_1_SEED_VAL_REG_CRC_1_SEED_VAL_Msk (0xffffffffUL) /*!< CRC_1_SEED_VAL (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== CRC_1_STA_REG ===================================================== */ + #define HW_ACC_CRC_1_STA_REG_CRC_1_CAL_STA_Pos (24UL) /*!< CRC_1_CAL_STA (Bit 24) */ + #define HW_ACC_CRC_1_STA_REG_CRC_1_CAL_STA_Msk (0x3000000UL) /*!< CRC_1_CAL_STA (Bitfield-Mask: 0x03) */ +/* =================================================== CRC_ADDR_MAX_REG ==================================================== */ + #define HW_ACC_CRC_ADDR_MAX_REG_CRC_ADDR_MAX_Pos (0UL) /*!< CRC_ADDR_MAX (Bit 0) */ + #define HW_ACC_CRC_ADDR_MAX_REG_CRC_ADDR_MAX_Msk (0xffffffffUL) /*!< CRC_ADDR_MAX (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CRC_ADDR_MIN_REG ==================================================== */ + #define HW_ACC_CRC_ADDR_MIN_REG_CRC_ADDR_MIN_Pos (0UL) /*!< CRC_ADDR_MIN (Bit 0) */ + #define HW_ACC_CRC_ADDR_MIN_REG_CRC_ADDR_MIN_Msk (0xffffffffUL) /*!< CRC_ADDR_MIN (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== CRC_CAL_VAL_REG ==================================================== */ + #define HW_ACC_CRC_CAL_VAL_REG_CRC_CAL_VAL_Pos (0UL) /*!< CRC_CAL_VAL (Bit 0) */ + #define HW_ACC_CRC_CAL_VAL_REG_CRC_CAL_VAL_Msk (0xffffffffUL) /*!< CRC_CAL_VAL (Bitfield-Mask: 0xffffffff) */ +/* ================================================== CRC_CAL_VAL_REV_REG ================================================== */ + #define HW_ACC_CRC_CAL_VAL_REV_REG_CRC_CAL_VAL_REV_Pos (0UL) /*!< CRC_CAL_VAL_REV (Bit 0) */ + #define HW_ACC_CRC_CAL_VAL_REV_REG_CRC_CAL_VAL_REV_Msk (0xffffffffUL) /*!< CRC_CAL_VAL_REV (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== CRC_CONFIG_REG ===================================================== */ + #define HW_ACC_CRC_CONFIG_REG_CRC_OP_TYPE_Pos (26UL) /*!< CRC_OP_TYPE (Bit 26) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_OP_TYPE_Msk (0xc000000UL) /*!< CRC_OP_TYPE (Bitfield-Mask: 0x03) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_CHK_MST_Pos (25UL) /*!< CRC_CHK_MST (Bit 25) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_CHK_MST_Msk (0x2000000UL) /*!< CRC_CHK_MST (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_CHK_ADDR_Pos (24UL) /*!< CRC_CHK_ADDR (Bit 24) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_CHK_ADDR_Msk (0x1000000UL) /*!< CRC_CHK_ADDR (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_MST_TYPE_Pos (16UL) /*!< CRC_MST_TYPE (Bit 16) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_MST_TYPE_Msk (0x1f0000UL) /*!< CRC_MST_TYPE (Bitfield-Mask: 0x1f) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_SWAP_EN_Pos (13UL) /*!< CRC_SWAP_EN (Bit 13) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_SWAP_EN_Msk (0x2000UL) /*!< CRC_SWAP_EN (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_ENDIAN_TYPE_Pos (12UL) /*!< CRC_ENDIAN_TYPE (Bit 12) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_ENDIAN_TYPE_Msk (0x1000UL) /*!< CRC_ENDIAN_TYPE (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_PAR_TYPE_Pos (9UL) /*!< CRC_PAR_TYPE (Bit 9) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_PAR_TYPE_Msk (0x600UL) /*!< CRC_PAR_TYPE (Bitfield-Mask: 0x03) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_ACC_TYPE_Pos (8UL) /*!< CRC_ACC_TYPE (Bit 8) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_ACC_TYPE_Msk (0x100UL) /*!< CRC_ACC_TYPE (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_PATH_SEL_Pos (0UL) /*!< CRC_PATH_SEL (Bit 0) */ + #define HW_ACC_CRC_CONFIG_REG_CRC_PATH_SEL_Msk (0x1fUL) /*!< CRC_PATH_SEL (Bitfield-Mask: 0x1f) */ +/* ===================================================== CRC_OP_EN_REG ===================================================== */ + #define HW_ACC_CRC_OP_EN_REG_CRC_OP_EN_Pos (0UL) /*!< CRC_OP_EN (Bit 0) */ + #define HW_ACC_CRC_OP_EN_REG_CRC_OP_EN_Msk (0x1UL) /*!< CRC_OP_EN (Bitfield-Mask: 0x01) */ +/* ================================================== CRC_PSEUDO_VAL_REG =================================================== */ + #define HW_ACC_CRC_PSEUDO_VAL_REG_CRC_PSEUDO_VAL_Pos (0UL) /*!< CRC_PSEUDO_VAL (Bit 0) */ + #define HW_ACC_CRC_PSEUDO_VAL_REG_CRC_PSEUDO_VAL_Msk (0xffffffffUL) /*!< CRC_PSEUDO_VAL (Bitfield-Mask: 0xffffffff) */ +/* =================================================== CRC_REQ_CTRL_REG ==================================================== */ + #define HW_ACC_CRC_REQ_CTRL_REG_CRC_REQ_STOP_Pos (2UL) /*!< CRC_REQ_STOP (Bit 2) */ + #define HW_ACC_CRC_REQ_CTRL_REG_CRC_REQ_STOP_Msk (0x4UL) /*!< CRC_REQ_STOP (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_REQ_CTRL_REG_CRC_REQ_START_Pos (1UL) /*!< CRC_REQ_START (Bit 1) */ + #define HW_ACC_CRC_REQ_CTRL_REG_CRC_REQ_START_Msk (0x2UL) /*!< CRC_REQ_START (Bitfield-Mask: 0x01) */ + #define HW_ACC_CRC_REQ_CTRL_REG_CRC_REQ_CLR_Pos (0UL) /*!< CRC_REQ_CLR (Bit 0) */ + #define HW_ACC_CRC_REQ_CTRL_REG_CRC_REQ_CLR_Msk (0x1UL) /*!< CRC_REQ_CLR (Bitfield-Mask: 0x01) */ +/* =================================================== CRC_SEED_VAL_REG ==================================================== */ + #define HW_ACC_CRC_SEED_VAL_REG_CRC_SEED_VAL_Pos (0UL) /*!< CRC_SEED_VAL (Bit 0) */ + #define HW_ACC_CRC_SEED_VAL_REG_CRC_SEED_VAL_Msk (0xffffffffUL) /*!< CRC_SEED_VAL (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== CRC_STA_REG ====================================================== */ + #define HW_ACC_CRC_STA_REG_CRC_CAL_STA_Pos (24UL) /*!< CRC_CAL_STA (Bit 24) */ + #define HW_ACC_CRC_STA_REG_CRC_CAL_STA_Msk (0x3000000UL) /*!< CRC_CAL_STA (Bitfield-Mask: 0x03) */ +/* ================================================== HW_CHS_ADDR_MAX_REG ================================================== */ + #define HW_ACC_HW_CHS_ADDR_MAX_REG_HW_CHS_ADDR_MAX_Pos (0UL) /*!< HW_CHS_ADDR_MAX (Bit 0) */ + #define HW_ACC_HW_CHS_ADDR_MAX_REG_HW_CHS_ADDR_MAX_Msk (0xffffffffUL) /*!< HW_CHS_ADDR_MAX (Bitfield-Mask: 0xffffffff) */ +/* ================================================== HW_CHS_ADDR_MIN_REG ================================================== */ + #define HW_ACC_HW_CHS_ADDR_MIN_REG_HW_CHS_ADDR_MIN_Pos (0UL) /*!< HW_CHS_ADDR_MIN (Bit 0) */ + #define HW_ACC_HW_CHS_ADDR_MIN_REG_HW_CHS_ADDR_MIN_Msk (0xffffffffUL) /*!< HW_CHS_ADDR_MIN (Bitfield-Mask: 0xffffffff) */ +/* ================================================== HW_CHS_CAL_STA_REG =================================================== */ + #define HW_ACC_HW_CHS_CAL_STA_REG_HW_CHS_CAL_STA_Pos (24UL) /*!< HW_CHS_CAL_STA (Bit 24) */ + #define HW_ACC_HW_CHS_CAL_STA_REG_HW_CHS_CAL_STA_Msk (0x3000000UL) /*!< HW_CHS_CAL_STA (Bitfield-Mask: 0x03) */ + #define HW_ACC_HW_CHS_CAL_STA_REG_HW_CHS_CAL_NUM_Pos (0UL) /*!< HW_CHS_CAL_NUM (Bit 0) */ + #define HW_ACC_HW_CHS_CAL_STA_REG_HW_CHS_CAL_NUM_Msk (0xfffffUL) /*!< HW_CHS_CAL_NUM (Bitfield-Mask: 0xfffff) */ +/* ================================================== HW_CHS_CAL_VAL_REG =================================================== */ + #define HW_ACC_HW_CHS_CAL_VAL_REG_HW_CHS_CAL_VAL_Pos (0UL) /*!< HW_CHS_CAL_VAL (Bit 0) */ + #define HW_ACC_HW_CHS_CAL_VAL_REG_HW_CHS_CAL_VAL_Msk (0xffffUL) /*!< HW_CHS_CAL_VAL (Bitfield-Mask: 0xffff) */ +/* =================================================== HW_CHS_CONFIG_REG =================================================== */ + #define HW_ACC_HW_CHS_CONFIG_REG_HW_CHS_CHK_ADDR_Pos (24UL) /*!< HW_CHS_CHK_ADDR (Bit 24) */ + #define HW_ACC_HW_CHS_CONFIG_REG_HW_CHS_CHK_ADDR_Msk (0x1000000UL) /*!< HW_CHS_CHK_ADDR (Bitfield-Mask: 0x01) */ + #define HW_ACC_HW_CHS_CONFIG_REG_HW_CHS_MST_TYPE_Pos (16UL) /*!< HW_CHS_MST_TYPE (Bit 16) */ + #define HW_ACC_HW_CHS_CONFIG_REG_HW_CHS_MST_TYPE_Msk (0x1f0000UL) /*!< HW_CHS_MST_TYPE (Bitfield-Mask: 0x1f) */ + #define HW_ACC_HW_CHS_CONFIG_REG_HW_CHS_PAR_TYPE_Pos (9UL) /*!< HW_CHS_PAR_TYPE (Bit 9) */ + #define HW_ACC_HW_CHS_CONFIG_REG_HW_CHS_PAR_TYPE_Msk (0x600UL) /*!< HW_CHS_PAR_TYPE (Bitfield-Mask: 0x03) */ + #define HW_ACC_HW_CHS_CONFIG_REG_HW_CHS_PATH_SEL_Pos (0UL) /*!< HW_CHS_PATH_SEL (Bit 0) */ + #define HW_ACC_HW_CHS_CONFIG_REG_HW_CHS_PATH_SEL_Msk (0x1fUL) /*!< HW_CHS_PATH_SEL (Bitfield-Mask: 0x1f) */ +/* =================================================== HW_CHS_OP_EN_REG ==================================================== */ + #define HW_ACC_HW_CHS_OP_EN_REG_HW_CHS_OP_EN_Pos (0UL) /*!< HW_CHS_OP_EN (Bit 0) */ + #define HW_ACC_HW_CHS_OP_EN_REG_HW_CHS_OP_EN_Msk (0x1UL) /*!< HW_CHS_OP_EN (Bitfield-Mask: 0x01) */ +/* ================================================= HW_CHS_PSEUDO_VAL_REG ================================================= */ +/* ================================================== HW_CHS_REQ_CTRL_REG ================================================== */ + #define HW_ACC_HW_CHS_REQ_CTRL_REG_HW_CHS_REQ_START_Pos (1UL) /*!< HW_CHS_REQ_START (Bit 1) */ + #define HW_ACC_HW_CHS_REQ_CTRL_REG_HW_CHS_REQ_START_Msk (0x2UL) /*!< HW_CHS_REQ_START (Bitfield-Mask: 0x01) */ + #define HW_ACC_HW_CHS_REQ_CTRL_REG_HW_CHS_REQ_CLR_Pos (0UL) /*!< HW_CHS_REQ_CLR (Bit 0) */ + #define HW_ACC_HW_CHS_REQ_CTRL_REG_HW_CHS_REQ_CLR_Msk (0x1UL) /*!< HW_CHS_REQ_CLR (Bitfield-Mask: 0x01) */ +/* ==================================================== PRNG_OP_EN_REG ===================================================== */ + #define HW_ACC_PRNG_OP_EN_REG_PRNG_OP_EN_Pos (0UL) /*!< PRNG_OP_EN (Bit 0) */ + #define HW_ACC_PRNG_OP_EN_REG_PRNG_OP_EN_Msk (0x1UL) /*!< PRNG_OP_EN (Bitfield-Mask: 0x01) */ +/* =================================================== PRNG_PAR_TYPE_REG =================================================== */ + #define HW_ACC_PRNG_PAR_TYPE_REG_PRNG_PAR_TYPE_Pos (0UL) /*!< PRNG_PAR_TYPE (Bit 0) */ + #define HW_ACC_PRNG_PAR_TYPE_REG_PRNG_PAR_TYPE_Msk (0x3UL) /*!< PRNG_PAR_TYPE (Bitfield-Mask: 0x03) */ +/* =================================================== PRNG_REG_CAL_VAL ==================================================== */ + #define HW_ACC_PRNG_REG_CAL_VAL_PRNG_CAL_VAL_REG_Pos (0UL) /*!< PRNG_CAL_VAL_REG (Bit 0) */ + #define HW_ACC_PRNG_REG_CAL_VAL_PRNG_CAL_VAL_REG_Msk (0xffffffffUL) /*!< PRNG_CAL_VAL_REG (Bitfield-Mask: 0xffffffff) */ +/* =================================================== PRNG_REQ_CLR_REG ==================================================== */ + #define HW_ACC_PRNG_REQ_CLR_REG_PRNG_REQ_GET_Pos (1UL) /*!< PRNG_REQ_GET (Bit 1) */ + #define HW_ACC_PRNG_REQ_CLR_REG_PRNG_REQ_GET_Msk (0x2UL) /*!< PRNG_REQ_GET (Bitfield-Mask: 0x01) */ + #define HW_ACC_PRNG_REQ_CLR_REG_PRNG_REQ_CLR_Pos (0UL) /*!< PRNG_REQ_CLR (Bit 0) */ + #define HW_ACC_PRNG_REQ_CLR_REG_PRNG_REQ_CLR_Msk (0x1UL) /*!< PRNG_REQ_CLR (Bitfield-Mask: 0x01) */ +/* ===================================================== PRNG_SEED_REG ===================================================== */ + #define HW_ACC_PRNG_SEED_REG_PRNG_SEED_VAL_Pos (0UL) /*!< PRNG_SEED_VAL (Bit 0) */ + #define HW_ACC_PRNG_SEED_REG_PRNG_SEED_VAL_Msk (0x7fffffffUL) /*!< PRNG_SEED_VAL (Bitfield-Mask: 0x7fffffff) */ + +/* =========================================================================================================================== */ +/* ================ I2C ================ */ +/* =========================================================================================================================== */ + +/* =============================================== I2C_ACK_GENERAL_CALL_REG ================================================ */ + #define I2C_I2C_ACK_GENERAL_CALL_REG_ACK_GEN_CALL_Pos (0UL) /*!< ACK_GEN_CALL (Bit 0) */ + #define I2C_I2C_ACK_GENERAL_CALL_REG_ACK_GEN_CALL_Msk (0x1UL) /*!< ACK_GEN_CALL (Bitfield-Mask: 0x01) */ +/* ================================================= I2C_CLR_ACTIVITY_REG ================================================== */ + #define I2C_I2C_CLR_ACTIVITY_REG_CLR_ACTIVITY_Pos (0UL) /*!< CLR_ACTIVITY (Bit 0) */ + #define I2C_I2C_CLR_ACTIVITY_REG_CLR_ACTIVITY_Msk (0x1UL) /*!< CLR_ACTIVITY (Bitfield-Mask: 0x01) */ +/* ================================================= I2C_CLR_GEN_CALL_REG ================================================== */ + #define I2C_I2C_CLR_GEN_CALL_REG_CLR_GEN_CALL_Pos (0UL) /*!< CLR_GEN_CALL (Bit 0) */ + #define I2C_I2C_CLR_GEN_CALL_REG_CLR_GEN_CALL_Msk (0x1UL) /*!< CLR_GEN_CALL (Bitfield-Mask: 0x01) */ +/* =================================================== I2C_CLR_INTR_REG ==================================================== */ + #define I2C_I2C_CLR_INTR_REG_CLR_INTR_Pos (0UL) /*!< CLR_INTR (Bit 0) */ + #define I2C_I2C_CLR_INTR_REG_CLR_INTR_Msk (0x1UL) /*!< CLR_INTR (Bitfield-Mask: 0x01) */ +/* ================================================== I2C_CLR_RD_REQ_REG =================================================== */ + #define I2C_I2C_CLR_RD_REQ_REG_CLR_RD_REQ_Pos (0UL) /*!< CLR_RD_REQ (Bit 0) */ + #define I2C_I2C_CLR_RD_REQ_REG_CLR_RD_REQ_Msk (0x1UL) /*!< CLR_RD_REQ (Bitfield-Mask: 0x01) */ +/* ================================================== I2C_CLR_RX_DONE_REG ================================================== */ + #define I2C_I2C_CLR_RX_DONE_REG_CLR_RX_DONE_Pos (0UL) /*!< CLR_RX_DONE (Bit 0) */ + #define I2C_I2C_CLR_RX_DONE_REG_CLR_RX_DONE_Msk (0x1UL) /*!< CLR_RX_DONE (Bitfield-Mask: 0x01) */ +/* ================================================== I2C_CLR_RX_OVER_REG ================================================== */ + #define I2C_I2C_CLR_RX_OVER_REG_CLR_RX_OVER_Pos (0UL) /*!< CLR_RX_OVER (Bit 0) */ + #define I2C_I2C_CLR_RX_OVER_REG_CLR_RX_OVER_Msk (0x1UL) /*!< CLR_RX_OVER (Bitfield-Mask: 0x01) */ +/* ================================================= I2C_CLR_RX_UNDER_REG ================================================== */ + #define I2C_I2C_CLR_RX_UNDER_REG_CLR_RX_UNDER_Pos (0UL) /*!< CLR_RX_UNDER (Bit 0) */ + #define I2C_I2C_CLR_RX_UNDER_REG_CLR_RX_UNDER_Msk (0x1UL) /*!< CLR_RX_UNDER (Bitfield-Mask: 0x01) */ +/* ================================================= I2C_CLR_START_DET_REG ================================================= */ + #define I2C_I2C_CLR_START_DET_REG_CLR_START_DET_Pos (0UL) /*!< CLR_START_DET (Bit 0) */ + #define I2C_I2C_CLR_START_DET_REG_CLR_START_DET_Msk (0x1UL) /*!< CLR_START_DET (Bitfield-Mask: 0x01) */ +/* ================================================= I2C_CLR_STOP_DET_REG ================================================== */ + #define I2C_I2C_CLR_STOP_DET_REG_CLR_STOP_DET_Pos (0UL) /*!< CLR_STOP_DET (Bit 0) */ + #define I2C_I2C_CLR_STOP_DET_REG_CLR_STOP_DET_Msk (0x1UL) /*!< CLR_STOP_DET (Bitfield-Mask: 0x01) */ +/* ================================================== I2C_CLR_TX_ABRT_REG ================================================== */ + #define I2C_I2C_CLR_TX_ABRT_REG_CLR_TX_ABRT_Pos (0UL) /*!< CLR_TX_ABRT (Bit 0) */ + #define I2C_I2C_CLR_TX_ABRT_REG_CLR_TX_ABRT_Msk (0x1UL) /*!< CLR_TX_ABRT (Bitfield-Mask: 0x01) */ +/* ================================================== I2C_CLR_TX_OVER_REG ================================================== */ + #define I2C_I2C_CLR_TX_OVER_REG_CLR_TX_OVER_Pos (0UL) /*!< CLR_TX_OVER (Bit 0) */ + #define I2C_I2C_CLR_TX_OVER_REG_CLR_TX_OVER_Msk (0x1UL) /*!< CLR_TX_OVER (Bitfield-Mask: 0x01) */ +/* ================================================== I2C_COMP_PARAM1_REG ================================================== */ + #define I2C_I2C_COMP_PARAM1_REG_IC_COMP_PARAM1_Pos (0UL) /*!< IC_COMP_PARAM1 (Bit 0) */ + #define I2C_I2C_COMP_PARAM1_REG_IC_COMP_PARAM1_Msk (0xffffffffUL) /*!< IC_COMP_PARAM1 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== I2C_COMP_TYPE_REG =================================================== */ + #define I2C_I2C_COMP_TYPE_REG_IC_COMP_TYPE_Pos (0UL) /*!< IC_COMP_TYPE (Bit 0) */ + #define I2C_I2C_COMP_TYPE_REG_IC_COMP_TYPE_Msk (0xffffffffUL) /*!< IC_COMP_TYPE (Bitfield-Mask: 0xffffffff) */ +/* ================================================= I2C_COMP_VERSION_REG ================================================== */ + #define I2C_I2C_COMP_VERSION_REG_IC_COMP_VERSION_Pos (0UL) /*!< IC_COMP_VERSION (Bit 0) */ + #define I2C_I2C_COMP_VERSION_REG_IC_COMP_VERSION_Msk (0xffffffffUL) /*!< IC_COMP_VERSION (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== I2C_CON_REG ====================================================== */ + #define I2C_I2C_CON_REG_I2C_STOP_DET_IF_MASTER_ACTIVE_Pos (10UL) /*!< I2C_STOP_DET_IF_MASTER_ACTIVE (Bit 10) */ + #define I2C_I2C_CON_REG_I2C_STOP_DET_IF_MASTER_ACTIVE_Msk (0x400UL) /*!< I2C_STOP_DET_IF_MASTER_ACTIVE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_CON_REG_I2C_RX_FIFO_FULL_HLD_CTRL_Pos (9UL) /*!< I2C_RX_FIFO_FULL_HLD_CTRL (Bit 9) */ + #define I2C_I2C_CON_REG_I2C_RX_FIFO_FULL_HLD_CTRL_Msk (0x200UL) /*!< I2C_RX_FIFO_FULL_HLD_CTRL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_CON_REG_I2C_TX_EMPTY_CTRL_Pos (8UL) /*!< I2C_TX_EMPTY_CTRL (Bit 8) */ + #define I2C_I2C_CON_REG_I2C_TX_EMPTY_CTRL_Msk (0x100UL) /*!< I2C_TX_EMPTY_CTRL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_CON_REG_I2C_STOP_DET_IFADDRESSED_Pos (7UL) /*!< I2C_STOP_DET_IFADDRESSED (Bit 7) */ + #define I2C_I2C_CON_REG_I2C_STOP_DET_IFADDRESSED_Msk (0x80UL) /*!< I2C_STOP_DET_IFADDRESSED (Bitfield-Mask: 0x01) */ + #define I2C_I2C_CON_REG_I2C_SLAVE_DISABLE_Pos (6UL) /*!< I2C_SLAVE_DISABLE (Bit 6) */ + #define I2C_I2C_CON_REG_I2C_SLAVE_DISABLE_Msk (0x40UL) /*!< I2C_SLAVE_DISABLE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_CON_REG_I2C_RESTART_EN_Pos (5UL) /*!< I2C_RESTART_EN (Bit 5) */ + #define I2C_I2C_CON_REG_I2C_RESTART_EN_Msk (0x20UL) /*!< I2C_RESTART_EN (Bitfield-Mask: 0x01) */ + #define I2C_I2C_CON_REG_I2C_10BITADDR_MASTER_Pos (4UL) /*!< I2C_10BITADDR_MASTER (Bit 4) */ + #define I2C_I2C_CON_REG_I2C_10BITADDR_MASTER_Msk (0x10UL) /*!< I2C_10BITADDR_MASTER (Bitfield-Mask: 0x01) */ + #define I2C_I2C_CON_REG_I2C_10BITADDR_SLAVE_Pos (3UL) /*!< I2C_10BITADDR_SLAVE (Bit 3) */ + #define I2C_I2C_CON_REG_I2C_10BITADDR_SLAVE_Msk (0x8UL) /*!< I2C_10BITADDR_SLAVE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_CON_REG_I2C_SPEED_Pos (1UL) /*!< I2C_SPEED (Bit 1) */ + #define I2C_I2C_CON_REG_I2C_SPEED_Msk (0x6UL) /*!< I2C_SPEED (Bitfield-Mask: 0x03) */ + #define I2C_I2C_CON_REG_I2C_MASTER_MODE_Pos (0UL) /*!< I2C_MASTER_MODE (Bit 0) */ + #define I2C_I2C_CON_REG_I2C_MASTER_MODE_Msk (0x1UL) /*!< I2C_MASTER_MODE (Bitfield-Mask: 0x01) */ +/* =================================================== I2C_DATA_CMD_REG ==================================================== */ + #define I2C_I2C_DATA_CMD_REG_I2C_RESTART_Pos (10UL) /*!< I2C_RESTART (Bit 10) */ + #define I2C_I2C_DATA_CMD_REG_I2C_RESTART_Msk (0x400UL) /*!< I2C_RESTART (Bitfield-Mask: 0x01) */ + #define I2C_I2C_DATA_CMD_REG_I2C_STOP_Pos (9UL) /*!< I2C_STOP (Bit 9) */ + #define I2C_I2C_DATA_CMD_REG_I2C_STOP_Msk (0x200UL) /*!< I2C_STOP (Bitfield-Mask: 0x01) */ + #define I2C_I2C_DATA_CMD_REG_I2C_CMD_Pos (8UL) /*!< I2C_CMD (Bit 8) */ + #define I2C_I2C_DATA_CMD_REG_I2C_CMD_Msk (0x100UL) /*!< I2C_CMD (Bitfield-Mask: 0x01) */ + #define I2C_I2C_DATA_CMD_REG_I2C_DAT_Pos (0UL) /*!< I2C_DAT (Bit 0) */ + #define I2C_I2C_DATA_CMD_REG_I2C_DAT_Msk (0xffUL) /*!< I2C_DAT (Bitfield-Mask: 0xff) */ +/* ==================================================== I2C_DMA_CR_REG ===================================================== */ + #define I2C_I2C_DMA_CR_REG_TDMAE_Pos (1UL) /*!< TDMAE (Bit 1) */ + #define I2C_I2C_DMA_CR_REG_TDMAE_Msk (0x2UL) /*!< TDMAE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_DMA_CR_REG_RDMAE_Pos (0UL) /*!< RDMAE (Bit 0) */ + #define I2C_I2C_DMA_CR_REG_RDMAE_Msk (0x1UL) /*!< RDMAE (Bitfield-Mask: 0x01) */ +/* =================================================== I2C_DMA_RDLR_REG ==================================================== */ + #define I2C_I2C_DMA_RDLR_REG_DMARDL_Pos (0UL) /*!< DMARDL (Bit 0) */ + #define I2C_I2C_DMA_RDLR_REG_DMARDL_Msk (0x1fUL) /*!< DMARDL (Bitfield-Mask: 0x1f) */ +/* =================================================== I2C_DMA_TDLR_REG ==================================================== */ + #define I2C_I2C_DMA_TDLR_REG_DMATDL_Pos (0UL) /*!< DMATDL (Bit 0) */ + #define I2C_I2C_DMA_TDLR_REG_DMATDL_Msk (0x1fUL) /*!< DMATDL (Bitfield-Mask: 0x1f) */ +/* ==================================================== I2C_ENABLE_REG ===================================================== */ + #define I2C_I2C_ENABLE_REG_I2C_TX_CMD_BLOCK_Pos (2UL) /*!< I2C_TX_CMD_BLOCK (Bit 2) */ + #define I2C_I2C_ENABLE_REG_I2C_TX_CMD_BLOCK_Msk (0x4UL) /*!< I2C_TX_CMD_BLOCK (Bitfield-Mask: 0x01) */ + #define I2C_I2C_ENABLE_REG_I2C_ABORT_Pos (1UL) /*!< I2C_ABORT (Bit 1) */ + #define I2C_I2C_ENABLE_REG_I2C_ABORT_Msk (0x2UL) /*!< I2C_ABORT (Bitfield-Mask: 0x01) */ + #define I2C_I2C_ENABLE_REG_I2C_EN_Pos (0UL) /*!< I2C_EN (Bit 0) */ + #define I2C_I2C_ENABLE_REG_I2C_EN_Msk (0x1UL) /*!< I2C_EN (Bitfield-Mask: 0x01) */ +/* ================================================= I2C_ENABLE_STATUS_REG ================================================= */ + #define I2C_I2C_ENABLE_STATUS_REG_SLV_RX_DATA_LOST_Pos (2UL) /*!< SLV_RX_DATA_LOST (Bit 2) */ + #define I2C_I2C_ENABLE_STATUS_REG_SLV_RX_DATA_LOST_Msk (0x4UL) /*!< SLV_RX_DATA_LOST (Bitfield-Mask: 0x01) */ + #define I2C_I2C_ENABLE_STATUS_REG_SLV_DISABLED_WHILE_BUSY_Pos (1UL) /*!< SLV_DISABLED_WHILE_BUSY (Bit 1) */ + #define I2C_I2C_ENABLE_STATUS_REG_SLV_DISABLED_WHILE_BUSY_Msk (0x2UL) /*!< SLV_DISABLED_WHILE_BUSY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_ENABLE_STATUS_REG_IC_EN_Pos (0UL) /*!< IC_EN (Bit 0) */ + #define I2C_I2C_ENABLE_STATUS_REG_IC_EN_Msk (0x1UL) /*!< IC_EN (Bitfield-Mask: 0x01) */ +/* ================================================== I2C_FS_SCL_HCNT_REG ================================================== */ + #define I2C_I2C_FS_SCL_HCNT_REG_IC_FS_SCL_HCNT_Pos (0UL) /*!< IC_FS_SCL_HCNT (Bit 0) */ + #define I2C_I2C_FS_SCL_HCNT_REG_IC_FS_SCL_HCNT_Msk (0xffffUL) /*!< IC_FS_SCL_HCNT (Bitfield-Mask: 0xffff) */ +/* ================================================== I2C_FS_SCL_LCNT_REG ================================================== */ + #define I2C_I2C_FS_SCL_LCNT_REG_IC_FS_SCL_LCNT_Pos (0UL) /*!< IC_FS_SCL_LCNT (Bit 0) */ + #define I2C_I2C_FS_SCL_LCNT_REG_IC_FS_SCL_LCNT_Msk (0xffffUL) /*!< IC_FS_SCL_LCNT (Bitfield-Mask: 0xffff) */ +/* =================================================== I2C_HS_MADDR_REG ==================================================== */ + #define I2C_I2C_HS_MADDR_REG_I2C_IC_HS_MAR_Pos (0UL) /*!< I2C_IC_HS_MAR (Bit 0) */ + #define I2C_I2C_HS_MADDR_REG_I2C_IC_HS_MAR_Msk (0x7UL) /*!< I2C_IC_HS_MAR (Bitfield-Mask: 0x07) */ +/* ================================================== I2C_HS_SCL_HCNT_REG ================================================== */ + #define I2C_I2C_HS_SCL_HCNT_REG_IC_HS_SCL_HCNT_Pos (0UL) /*!< IC_HS_SCL_HCNT (Bit 0) */ + #define I2C_I2C_HS_SCL_HCNT_REG_IC_HS_SCL_HCNT_Msk (0xffffUL) /*!< IC_HS_SCL_HCNT (Bitfield-Mask: 0xffff) */ +/* ================================================== I2C_HS_SCL_LCNT_REG ================================================== */ + #define I2C_I2C_HS_SCL_LCNT_REG_IC_HS_SCL_LCNT_Pos (0UL) /*!< IC_HS_SCL_LCNT (Bit 0) */ + #define I2C_I2C_HS_SCL_LCNT_REG_IC_HS_SCL_LCNT_Msk (0xffffUL) /*!< IC_HS_SCL_LCNT (Bitfield-Mask: 0xffff) */ +/* ================================================= I2C_IC_FS_SPKLEN_REG ================================================== */ + #define I2C_I2C_IC_FS_SPKLEN_REG_I2C_FS_SPKLEN_Pos (0UL) /*!< I2C_FS_SPKLEN (Bit 0) */ + #define I2C_I2C_IC_FS_SPKLEN_REG_I2C_FS_SPKLEN_Msk (0xffUL) /*!< I2C_FS_SPKLEN (Bitfield-Mask: 0xff) */ +/* ================================================= I2C_IC_HS_SPKLEN_REG ================================================== */ + #define I2C_I2C_IC_HS_SPKLEN_REG_I2C_HS_SPKLEN_Pos (0UL) /*!< I2C_HS_SPKLEN (Bit 0) */ + #define I2C_I2C_IC_HS_SPKLEN_REG_I2C_HS_SPKLEN_Msk (0xffUL) /*!< I2C_HS_SPKLEN (Bitfield-Mask: 0xff) */ +/* =================================================== I2C_INTR_MASK_REG =================================================== */ + #define I2C_I2C_INTR_MASK_REG_M_SCL_STUCK_AT_LOW_Pos (14UL) /*!< M_SCL_STUCK_AT_LOW (Bit 14) */ + #define I2C_I2C_INTR_MASK_REG_M_SCL_STUCK_AT_LOW_Msk (0x4000UL) /*!< M_SCL_STUCK_AT_LOW (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_MASTER_ON_HOLD_Pos (13UL) /*!< M_MASTER_ON_HOLD (Bit 13) */ + #define I2C_I2C_INTR_MASK_REG_M_MASTER_ON_HOLD_Msk (0x2000UL) /*!< M_MASTER_ON_HOLD (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_RESTART_DET_Pos (12UL) /*!< M_RESTART_DET (Bit 12) */ + #define I2C_I2C_INTR_MASK_REG_M_RESTART_DET_Msk (0x1000UL) /*!< M_RESTART_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_GEN_CALL_Pos (11UL) /*!< M_GEN_CALL (Bit 11) */ + #define I2C_I2C_INTR_MASK_REG_M_GEN_CALL_Msk (0x800UL) /*!< M_GEN_CALL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_START_DET_Pos (10UL) /*!< M_START_DET (Bit 10) */ + #define I2C_I2C_INTR_MASK_REG_M_START_DET_Msk (0x400UL) /*!< M_START_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_STOP_DET_Pos (9UL) /*!< M_STOP_DET (Bit 9) */ + #define I2C_I2C_INTR_MASK_REG_M_STOP_DET_Msk (0x200UL) /*!< M_STOP_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_ACTIVITY_Pos (8UL) /*!< M_ACTIVITY (Bit 8) */ + #define I2C_I2C_INTR_MASK_REG_M_ACTIVITY_Msk (0x100UL) /*!< M_ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_RX_DONE_Pos (7UL) /*!< M_RX_DONE (Bit 7) */ + #define I2C_I2C_INTR_MASK_REG_M_RX_DONE_Msk (0x80UL) /*!< M_RX_DONE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_TX_ABRT_Pos (6UL) /*!< M_TX_ABRT (Bit 6) */ + #define I2C_I2C_INTR_MASK_REG_M_TX_ABRT_Msk (0x40UL) /*!< M_TX_ABRT (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_RD_REQ_Pos (5UL) /*!< M_RD_REQ (Bit 5) */ + #define I2C_I2C_INTR_MASK_REG_M_RD_REQ_Msk (0x20UL) /*!< M_RD_REQ (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_TX_EMPTY_Pos (4UL) /*!< M_TX_EMPTY (Bit 4) */ + #define I2C_I2C_INTR_MASK_REG_M_TX_EMPTY_Msk (0x10UL) /*!< M_TX_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_TX_OVER_Pos (3UL) /*!< M_TX_OVER (Bit 3) */ + #define I2C_I2C_INTR_MASK_REG_M_TX_OVER_Msk (0x8UL) /*!< M_TX_OVER (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_RX_FULL_Pos (2UL) /*!< M_RX_FULL (Bit 2) */ + #define I2C_I2C_INTR_MASK_REG_M_RX_FULL_Msk (0x4UL) /*!< M_RX_FULL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_RX_OVER_Pos (1UL) /*!< M_RX_OVER (Bit 1) */ + #define I2C_I2C_INTR_MASK_REG_M_RX_OVER_Msk (0x2UL) /*!< M_RX_OVER (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_MASK_REG_M_RX_UNDER_Pos (0UL) /*!< M_RX_UNDER (Bit 0) */ + #define I2C_I2C_INTR_MASK_REG_M_RX_UNDER_Msk (0x1UL) /*!< M_RX_UNDER (Bitfield-Mask: 0x01) */ +/* =================================================== I2C_INTR_STAT_REG =================================================== */ + #define I2C_I2C_INTR_STAT_REG_R_SCL_STUCK_AT_LOW_Pos (14UL) /*!< R_SCL_STUCK_AT_LOW (Bit 14) */ + #define I2C_I2C_INTR_STAT_REG_R_SCL_STUCK_AT_LOW_Msk (0x4000UL) /*!< R_SCL_STUCK_AT_LOW (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_MASTER_ON_HOLD_Pos (13UL) /*!< R_MASTER_ON_HOLD (Bit 13) */ + #define I2C_I2C_INTR_STAT_REG_R_MASTER_ON_HOLD_Msk (0x2000UL) /*!< R_MASTER_ON_HOLD (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_RESTART_DET_Pos (12UL) /*!< R_RESTART_DET (Bit 12) */ + #define I2C_I2C_INTR_STAT_REG_R_RESTART_DET_Msk (0x1000UL) /*!< R_RESTART_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_GEN_CALL_Pos (11UL) /*!< R_GEN_CALL (Bit 11) */ + #define I2C_I2C_INTR_STAT_REG_R_GEN_CALL_Msk (0x800UL) /*!< R_GEN_CALL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_START_DET_Pos (10UL) /*!< R_START_DET (Bit 10) */ + #define I2C_I2C_INTR_STAT_REG_R_START_DET_Msk (0x400UL) /*!< R_START_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_STOP_DET_Pos (9UL) /*!< R_STOP_DET (Bit 9) */ + #define I2C_I2C_INTR_STAT_REG_R_STOP_DET_Msk (0x200UL) /*!< R_STOP_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_ACTIVITY_Pos (8UL) /*!< R_ACTIVITY (Bit 8) */ + #define I2C_I2C_INTR_STAT_REG_R_ACTIVITY_Msk (0x100UL) /*!< R_ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_RX_DONE_Pos (7UL) /*!< R_RX_DONE (Bit 7) */ + #define I2C_I2C_INTR_STAT_REG_R_RX_DONE_Msk (0x80UL) /*!< R_RX_DONE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_TX_ABRT_Pos (6UL) /*!< R_TX_ABRT (Bit 6) */ + #define I2C_I2C_INTR_STAT_REG_R_TX_ABRT_Msk (0x40UL) /*!< R_TX_ABRT (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_RD_REQ_Pos (5UL) /*!< R_RD_REQ (Bit 5) */ + #define I2C_I2C_INTR_STAT_REG_R_RD_REQ_Msk (0x20UL) /*!< R_RD_REQ (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_TX_EMPTY_Pos (4UL) /*!< R_TX_EMPTY (Bit 4) */ + #define I2C_I2C_INTR_STAT_REG_R_TX_EMPTY_Msk (0x10UL) /*!< R_TX_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_TX_OVER_Pos (3UL) /*!< R_TX_OVER (Bit 3) */ + #define I2C_I2C_INTR_STAT_REG_R_TX_OVER_Msk (0x8UL) /*!< R_TX_OVER (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_RX_FULL_Pos (2UL) /*!< R_RX_FULL (Bit 2) */ + #define I2C_I2C_INTR_STAT_REG_R_RX_FULL_Msk (0x4UL) /*!< R_RX_FULL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_RX_OVER_Pos (1UL) /*!< R_RX_OVER (Bit 1) */ + #define I2C_I2C_INTR_STAT_REG_R_RX_OVER_Msk (0x2UL) /*!< R_RX_OVER (Bitfield-Mask: 0x01) */ + #define I2C_I2C_INTR_STAT_REG_R_RX_UNDER_Pos (0UL) /*!< R_RX_UNDER (Bit 0) */ + #define I2C_I2C_INTR_STAT_REG_R_RX_UNDER_Msk (0x1UL) /*!< R_RX_UNDER (Bitfield-Mask: 0x01) */ +/* ================================================= I2C_RAW_INTR_STAT_REG ================================================= */ + #define I2C_I2C_RAW_INTR_STAT_REG_SCL_STUCK_AT_LOW_Pos (14UL) /*!< SCL_STUCK_AT_LOW (Bit 14) */ + #define I2C_I2C_RAW_INTR_STAT_REG_SCL_STUCK_AT_LOW_Msk (0x4000UL) /*!< SCL_STUCK_AT_LOW (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_MASTER_ON_HOLD_Pos (13UL) /*!< MASTER_ON_HOLD (Bit 13) */ + #define I2C_I2C_RAW_INTR_STAT_REG_MASTER_ON_HOLD_Msk (0x2000UL) /*!< MASTER_ON_HOLD (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RESTART_DET_Pos (12UL) /*!< RESTART_DET (Bit 12) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RESTART_DET_Msk (0x1000UL) /*!< RESTART_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_GEN_CALL_Pos (11UL) /*!< GEN_CALL (Bit 11) */ + #define I2C_I2C_RAW_INTR_STAT_REG_GEN_CALL_Msk (0x800UL) /*!< GEN_CALL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_START_DET_Pos (10UL) /*!< START_DET (Bit 10) */ + #define I2C_I2C_RAW_INTR_STAT_REG_START_DET_Msk (0x400UL) /*!< START_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_STOP_DET_Pos (9UL) /*!< STOP_DET (Bit 9) */ + #define I2C_I2C_RAW_INTR_STAT_REG_STOP_DET_Msk (0x200UL) /*!< STOP_DET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_ACTIVITY_Pos (8UL) /*!< ACTIVITY (Bit 8) */ + #define I2C_I2C_RAW_INTR_STAT_REG_ACTIVITY_Msk (0x100UL) /*!< ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RX_DONE_Pos (7UL) /*!< RX_DONE (Bit 7) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RX_DONE_Msk (0x80UL) /*!< RX_DONE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_TX_ABRT_Pos (6UL) /*!< TX_ABRT (Bit 6) */ + #define I2C_I2C_RAW_INTR_STAT_REG_TX_ABRT_Msk (0x40UL) /*!< TX_ABRT (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RD_REQ_Pos (5UL) /*!< RD_REQ (Bit 5) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RD_REQ_Msk (0x20UL) /*!< RD_REQ (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_TX_EMPTY_Pos (4UL) /*!< TX_EMPTY (Bit 4) */ + #define I2C_I2C_RAW_INTR_STAT_REG_TX_EMPTY_Msk (0x10UL) /*!< TX_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_TX_OVER_Pos (3UL) /*!< TX_OVER (Bit 3) */ + #define I2C_I2C_RAW_INTR_STAT_REG_TX_OVER_Msk (0x8UL) /*!< TX_OVER (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RX_FULL_Pos (2UL) /*!< RX_FULL (Bit 2) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RX_FULL_Msk (0x4UL) /*!< RX_FULL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RX_OVER_Pos (1UL) /*!< RX_OVER (Bit 1) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RX_OVER_Msk (0x2UL) /*!< RX_OVER (Bitfield-Mask: 0x01) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RX_UNDER_Pos (0UL) /*!< RX_UNDER (Bit 0) */ + #define I2C_I2C_RAW_INTR_STAT_REG_RX_UNDER_Msk (0x1UL) /*!< RX_UNDER (Bitfield-Mask: 0x01) */ +/* ===================================================== I2C_RXFLR_REG ===================================================== */ + #define I2C_I2C_RXFLR_REG_RXFLR_Pos (0UL) /*!< RXFLR (Bit 0) */ + #define I2C_I2C_RXFLR_REG_RXFLR_Msk (0x3fUL) /*!< RXFLR (Bitfield-Mask: 0x3f) */ +/* ===================================================== I2C_RX_TL_REG ===================================================== */ + #define I2C_I2C_RX_TL_REG_RX_TL_Pos (0UL) /*!< RX_TL (Bit 0) */ + #define I2C_I2C_RX_TL_REG_RX_TL_Msk (0x1fUL) /*!< RX_TL (Bitfield-Mask: 0x1f) */ +/* ====================================================== I2C_SAR_REG ====================================================== */ + #define I2C_I2C_SAR_REG_IC_SAR_Pos (0UL) /*!< IC_SAR (Bit 0) */ + #define I2C_I2C_SAR_REG_IC_SAR_Msk (0x3ffUL) /*!< IC_SAR (Bitfield-Mask: 0x3ff) */ +/* =================================================== I2C_SDA_HOLD_REG ==================================================== */ + #define I2C_I2C_SDA_HOLD_REG_I2C_SDA_RX_HOLD_Pos (16UL) /*!< I2C_SDA_RX_HOLD (Bit 16) */ + #define I2C_I2C_SDA_HOLD_REG_I2C_SDA_RX_HOLD_Msk (0xff0000UL) /*!< I2C_SDA_RX_HOLD (Bitfield-Mask: 0xff) */ + #define I2C_I2C_SDA_HOLD_REG_I2C_SDA_TX_HOLD_Pos (0UL) /*!< I2C_SDA_TX_HOLD (Bit 0) */ + #define I2C_I2C_SDA_HOLD_REG_I2C_SDA_TX_HOLD_Msk (0xffffUL) /*!< I2C_SDA_TX_HOLD (Bitfield-Mask: 0xffff) */ +/* =================================================== I2C_SDA_SETUP_REG =================================================== */ + #define I2C_I2C_SDA_SETUP_REG_SDA_SETUP_Pos (0UL) /*!< SDA_SETUP (Bit 0) */ + #define I2C_I2C_SDA_SETUP_REG_SDA_SETUP_Msk (0xffUL) /*!< SDA_SETUP (Bitfield-Mask: 0xff) */ +/* ================================================== I2C_SS_SCL_HCNT_REG ================================================== */ + #define I2C_I2C_SS_SCL_HCNT_REG_IC_SS_SCL_HCNT_Pos (0UL) /*!< IC_SS_SCL_HCNT (Bit 0) */ + #define I2C_I2C_SS_SCL_HCNT_REG_IC_SS_SCL_HCNT_Msk (0xffffUL) /*!< IC_SS_SCL_HCNT (Bitfield-Mask: 0xffff) */ +/* ================================================== I2C_SS_SCL_LCNT_REG ================================================== */ + #define I2C_I2C_SS_SCL_LCNT_REG_IC_SS_SCL_LCNT_Pos (0UL) /*!< IC_SS_SCL_LCNT (Bit 0) */ + #define I2C_I2C_SS_SCL_LCNT_REG_IC_SS_SCL_LCNT_Msk (0xffffUL) /*!< IC_SS_SCL_LCNT (Bitfield-Mask: 0xffff) */ +/* ==================================================== I2C_STATUS_REG ===================================================== */ + #define I2C_I2C_STATUS_REG_LV_HOLD_RX_FIFO_FULL_Pos (10UL) /*!< LV_HOLD_RX_FIFO_FULL (Bit 10) */ + #define I2C_I2C_STATUS_REG_LV_HOLD_RX_FIFO_FULL_Msk (0x400UL) /*!< LV_HOLD_RX_FIFO_FULL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_SLV_HOLD_TX_FIFO_EMPTY_Pos (9UL) /*!< SLV_HOLD_TX_FIFO_EMPTY (Bit 9) */ + #define I2C_I2C_STATUS_REG_SLV_HOLD_TX_FIFO_EMPTY_Msk (0x200UL) /*!< SLV_HOLD_TX_FIFO_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_MST_HOLD_RX_FIFO_FULL_Pos (8UL) /*!< MST_HOLD_RX_FIFO_FULL (Bit 8) */ + #define I2C_I2C_STATUS_REG_MST_HOLD_RX_FIFO_FULL_Msk (0x100UL) /*!< MST_HOLD_RX_FIFO_FULL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_MST_HOLD_TX_FIFO_EMPTY_Pos (7UL) /*!< MST_HOLD_TX_FIFO_EMPTY (Bit 7) */ + #define I2C_I2C_STATUS_REG_MST_HOLD_TX_FIFO_EMPTY_Msk (0x80UL) /*!< MST_HOLD_TX_FIFO_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_SLV_ACTIVITY_Pos (6UL) /*!< SLV_ACTIVITY (Bit 6) */ + #define I2C_I2C_STATUS_REG_SLV_ACTIVITY_Msk (0x40UL) /*!< SLV_ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_MST_ACTIVITY_Pos (5UL) /*!< MST_ACTIVITY (Bit 5) */ + #define I2C_I2C_STATUS_REG_MST_ACTIVITY_Msk (0x20UL) /*!< MST_ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_RFF_Pos (4UL) /*!< RFF (Bit 4) */ + #define I2C_I2C_STATUS_REG_RFF_Msk (0x10UL) /*!< RFF (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_RFNE_Pos (3UL) /*!< RFNE (Bit 3) */ + #define I2C_I2C_STATUS_REG_RFNE_Msk (0x8UL) /*!< RFNE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_TFE_Pos (2UL) /*!< TFE (Bit 2) */ + #define I2C_I2C_STATUS_REG_TFE_Msk (0x4UL) /*!< TFE (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_TFNF_Pos (1UL) /*!< TFNF (Bit 1) */ + #define I2C_I2C_STATUS_REG_TFNF_Msk (0x2UL) /*!< TFNF (Bitfield-Mask: 0x01) */ + #define I2C_I2C_STATUS_REG_I2C_ACTIVITY_Pos (0UL) /*!< I2C_ACTIVITY (Bit 0) */ + #define I2C_I2C_STATUS_REG_I2C_ACTIVITY_Msk (0x1UL) /*!< I2C_ACTIVITY (Bitfield-Mask: 0x01) */ +/* ====================================================== I2C_TAR_REG ====================================================== */ + #define I2C_I2C_TAR_REG_SPECIAL_Pos (11UL) /*!< SPECIAL (Bit 11) */ + #define I2C_I2C_TAR_REG_SPECIAL_Msk (0x800UL) /*!< SPECIAL (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TAR_REG_GC_OR_START_Pos (10UL) /*!< GC_OR_START (Bit 10) */ + #define I2C_I2C_TAR_REG_GC_OR_START_Msk (0x400UL) /*!< GC_OR_START (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TAR_REG_IC_TAR_Pos (0UL) /*!< IC_TAR (Bit 0) */ + #define I2C_I2C_TAR_REG_IC_TAR_Msk (0x3ffUL) /*!< IC_TAR (Bitfield-Mask: 0x3ff) */ +/* ===================================================== I2C_TXFLR_REG ===================================================== */ + #define I2C_I2C_TXFLR_REG_TXFLR_Pos (0UL) /*!< TXFLR (Bit 0) */ + #define I2C_I2C_TXFLR_REG_TXFLR_Msk (0x3fUL) /*!< TXFLR (Bitfield-Mask: 0x3f) */ +/* ================================================ I2C_TX_ABRT_SOURCE_REG ================================================= */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_USER_ABRT_Pos (16UL) /*!< ABRT_USER_ABRT (Bit 16) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_USER_ABRT_Msk (0x10000UL) /*!< ABRT_USER_ABRT (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SLVRD_INTX_Pos (15UL) /*!< ABRT_SLVRD_INTX (Bit 15) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SLVRD_INTX_Msk (0x8000UL) /*!< ABRT_SLVRD_INTX (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SLV_ARBLOST_Pos (14UL) /*!< ABRT_SLV_ARBLOST (Bit 14) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SLV_ARBLOST_Msk (0x4000UL) /*!< ABRT_SLV_ARBLOST (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SLVFLUSH_TXFIFO_Pos (13UL) /*!< ABRT_SLVFLUSH_TXFIFO (Bit 13) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SLVFLUSH_TXFIFO_Msk (0x2000UL) /*!< ABRT_SLVFLUSH_TXFIFO (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ARB_LOST_Pos (12UL) /*!< ARB_LOST (Bit 12) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ARB_LOST_Msk (0x1000UL) /*!< ARB_LOST (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_MASTER_DIS_Pos (11UL) /*!< ABRT_MASTER_DIS (Bit 11) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_MASTER_DIS_Msk (0x800UL) /*!< ABRT_MASTER_DIS (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_10B_RD_NORSTRT_Pos (10UL) /*!< ABRT_10B_RD_NORSTRT (Bit 10) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_10B_RD_NORSTRT_Msk (0x400UL) /*!< ABRT_10B_RD_NORSTRT (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SBYTE_NORSTRT_Pos (9UL) /*!< ABRT_SBYTE_NORSTRT (Bit 9) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SBYTE_NORSTRT_Msk (0x200UL) /*!< ABRT_SBYTE_NORSTRT (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_HS_NORSTRT_Pos (8UL) /*!< ABRT_HS_NORSTRT (Bit 8) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_HS_NORSTRT_Msk (0x100UL) /*!< ABRT_HS_NORSTRT (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SBYTE_ACKDET_Pos (7UL) /*!< ABRT_SBYTE_ACKDET (Bit 7) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_SBYTE_ACKDET_Msk (0x80UL) /*!< ABRT_SBYTE_ACKDET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_HS_ACKDET_Pos (6UL) /*!< ABRT_HS_ACKDET (Bit 6) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_HS_ACKDET_Msk (0x40UL) /*!< ABRT_HS_ACKDET (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_GCALL_READ_Pos (5UL) /*!< ABRT_GCALL_READ (Bit 5) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_GCALL_READ_Msk (0x20UL) /*!< ABRT_GCALL_READ (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_GCALL_NOACK_Pos (4UL) /*!< ABRT_GCALL_NOACK (Bit 4) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_GCALL_NOACK_Msk (0x10UL) /*!< ABRT_GCALL_NOACK (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_TXDATA_NOACK_Pos (3UL) /*!< ABRT_TXDATA_NOACK (Bit 3) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_TXDATA_NOACK_Msk (0x8UL) /*!< ABRT_TXDATA_NOACK (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_10ADDR2_NOACK_Pos (2UL) /*!< ABRT_10ADDR2_NOACK (Bit 2) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_10ADDR2_NOACK_Msk (0x4UL) /*!< ABRT_10ADDR2_NOACK (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_10ADDR1_NOACK_Pos (1UL) /*!< ABRT_10ADDR1_NOACK (Bit 1) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_10ADDR1_NOACK_Msk (0x2UL) /*!< ABRT_10ADDR1_NOACK (Bitfield-Mask: 0x01) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_7B_ADDR_NOACK_Pos (0UL) /*!< ABRT_7B_ADDR_NOACK (Bit 0) */ + #define I2C_I2C_TX_ABRT_SOURCE_REG_ABRT_7B_ADDR_NOACK_Msk (0x1UL) /*!< ABRT_7B_ADDR_NOACK (Bitfield-Mask: 0x01) */ +/* ===================================================== I2C_TX_TL_REG ===================================================== */ + #define I2C_I2C_TX_TL_REG_TX_TL_Pos (0UL) /*!< TX_TL (Bit 0) */ + #define I2C_I2C_TX_TL_REG_TX_TL_Msk (0x1fUL) /*!< TX_TL (Bitfield-Mask: 0x1f) */ + +/* =========================================================================================================================== */ +/* ================ I2C2 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== I2C2_ACK_GENERAL_CALL_REG =============================================== */ + #define I2C2_I2C2_ACK_GENERAL_CALL_REG_ACK_GEN_CALL_Pos (0UL) /*!< ACK_GEN_CALL (Bit 0) */ + #define I2C2_I2C2_ACK_GENERAL_CALL_REG_ACK_GEN_CALL_Msk (0x1UL) /*!< ACK_GEN_CALL (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_CLR_ACTIVITY_REG ================================================= */ + #define I2C2_I2C2_CLR_ACTIVITY_REG_CLR_ACTIVITY_Pos (0UL) /*!< CLR_ACTIVITY (Bit 0) */ + #define I2C2_I2C2_CLR_ACTIVITY_REG_CLR_ACTIVITY_Msk (0x1UL) /*!< CLR_ACTIVITY (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_CLR_GEN_CALL_REG ================================================= */ + #define I2C2_I2C2_CLR_GEN_CALL_REG_CLR_GEN_CALL_Pos (0UL) /*!< CLR_GEN_CALL (Bit 0) */ + #define I2C2_I2C2_CLR_GEN_CALL_REG_CLR_GEN_CALL_Msk (0x1UL) /*!< CLR_GEN_CALL (Bitfield-Mask: 0x01) */ +/* =================================================== I2C2_CLR_INTR_REG =================================================== */ + #define I2C2_I2C2_CLR_INTR_REG_CLR_INTR_Pos (0UL) /*!< CLR_INTR (Bit 0) */ + #define I2C2_I2C2_CLR_INTR_REG_CLR_INTR_Msk (0x1UL) /*!< CLR_INTR (Bitfield-Mask: 0x01) */ +/* ================================================== I2C2_CLR_RD_REQ_REG ================================================== */ + #define I2C2_I2C2_CLR_RD_REQ_REG_CLR_RD_REQ_Pos (0UL) /*!< CLR_RD_REQ (Bit 0) */ + #define I2C2_I2C2_CLR_RD_REQ_REG_CLR_RD_REQ_Msk (0x1UL) /*!< CLR_RD_REQ (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_CLR_RX_DONE_REG ================================================== */ + #define I2C2_I2C2_CLR_RX_DONE_REG_CLR_RX_DONE_Pos (0UL) /*!< CLR_RX_DONE (Bit 0) */ + #define I2C2_I2C2_CLR_RX_DONE_REG_CLR_RX_DONE_Msk (0x1UL) /*!< CLR_RX_DONE (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_CLR_RX_OVER_REG ================================================== */ + #define I2C2_I2C2_CLR_RX_OVER_REG_CLR_RX_OVER_Pos (0UL) /*!< CLR_RX_OVER (Bit 0) */ + #define I2C2_I2C2_CLR_RX_OVER_REG_CLR_RX_OVER_Msk (0x1UL) /*!< CLR_RX_OVER (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_CLR_RX_UNDER_REG ================================================= */ + #define I2C2_I2C2_CLR_RX_UNDER_REG_CLR_RX_UNDER_Pos (0UL) /*!< CLR_RX_UNDER (Bit 0) */ + #define I2C2_I2C2_CLR_RX_UNDER_REG_CLR_RX_UNDER_Msk (0x1UL) /*!< CLR_RX_UNDER (Bitfield-Mask: 0x01) */ +/* ================================================ I2C2_CLR_START_DET_REG ================================================= */ + #define I2C2_I2C2_CLR_START_DET_REG_CLR_START_DET_Pos (0UL) /*!< CLR_START_DET (Bit 0) */ + #define I2C2_I2C2_CLR_START_DET_REG_CLR_START_DET_Msk (0x1UL) /*!< CLR_START_DET (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_CLR_STOP_DET_REG ================================================= */ + #define I2C2_I2C2_CLR_STOP_DET_REG_CLR_STOP_DET_Pos (0UL) /*!< CLR_STOP_DET (Bit 0) */ + #define I2C2_I2C2_CLR_STOP_DET_REG_CLR_STOP_DET_Msk (0x1UL) /*!< CLR_STOP_DET (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_CLR_TX_ABRT_REG ================================================== */ + #define I2C2_I2C2_CLR_TX_ABRT_REG_CLR_TX_ABRT_Pos (0UL) /*!< CLR_TX_ABRT (Bit 0) */ + #define I2C2_I2C2_CLR_TX_ABRT_REG_CLR_TX_ABRT_Msk (0x1UL) /*!< CLR_TX_ABRT (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_CLR_TX_OVER_REG ================================================== */ + #define I2C2_I2C2_CLR_TX_OVER_REG_CLR_TX_OVER_Pos (0UL) /*!< CLR_TX_OVER (Bit 0) */ + #define I2C2_I2C2_CLR_TX_OVER_REG_CLR_TX_OVER_Msk (0x1UL) /*!< CLR_TX_OVER (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_COMP_PARAM1_REG ================================================== */ + #define I2C2_I2C2_COMP_PARAM1_REG_IC_COMP_PARAM1_Pos (0UL) /*!< IC_COMP_PARAM1 (Bit 0) */ + #define I2C2_I2C2_COMP_PARAM1_REG_IC_COMP_PARAM1_Msk (0xffffffffUL) /*!< IC_COMP_PARAM1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== I2C2_COMP_TYPE_REG =================================================== */ + #define I2C2_I2C2_COMP_TYPE_REG_IC_COMP_TYPE_Pos (0UL) /*!< IC_COMP_TYPE (Bit 0) */ + #define I2C2_I2C2_COMP_TYPE_REG_IC_COMP_TYPE_Msk (0xffffffffUL) /*!< IC_COMP_TYPE (Bitfield-Mask: 0xffffffff) */ +/* ================================================= I2C2_COMP_VERSION_REG ================================================= */ + #define I2C2_I2C2_COMP_VERSION_REG_IC_COMP_VERSION_Pos (0UL) /*!< IC_COMP_VERSION (Bit 0) */ + #define I2C2_I2C2_COMP_VERSION_REG_IC_COMP_VERSION_Msk (0xffffffffUL) /*!< IC_COMP_VERSION (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== I2C2_CON_REG ====================================================== */ + #define I2C2_I2C2_CON_REG_I2C_STOP_DET_IF_MASTER_ACTIVE_Pos (10UL) /*!< I2C_STOP_DET_IF_MASTER_ACTIVE (Bit 10) */ + #define I2C2_I2C2_CON_REG_I2C_STOP_DET_IF_MASTER_ACTIVE_Msk (0x400UL) /*!< I2C_STOP_DET_IF_MASTER_ACTIVE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_CON_REG_I2C_RX_FIFO_FULL_HLD_CTRL_Pos (9UL) /*!< I2C_RX_FIFO_FULL_HLD_CTRL (Bit 9) */ + #define I2C2_I2C2_CON_REG_I2C_RX_FIFO_FULL_HLD_CTRL_Msk (0x200UL) /*!< I2C_RX_FIFO_FULL_HLD_CTRL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_CON_REG_I2C_TX_EMPTY_CTRL_Pos (8UL) /*!< I2C_TX_EMPTY_CTRL (Bit 8) */ + #define I2C2_I2C2_CON_REG_I2C_TX_EMPTY_CTRL_Msk (0x100UL) /*!< I2C_TX_EMPTY_CTRL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_CON_REG_I2C_STOP_DET_IFADDRESSED_Pos (7UL) /*!< I2C_STOP_DET_IFADDRESSED (Bit 7) */ + #define I2C2_I2C2_CON_REG_I2C_STOP_DET_IFADDRESSED_Msk (0x80UL) /*!< I2C_STOP_DET_IFADDRESSED (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_CON_REG_I2C_SLAVE_DISABLE_Pos (6UL) /*!< I2C_SLAVE_DISABLE (Bit 6) */ + #define I2C2_I2C2_CON_REG_I2C_SLAVE_DISABLE_Msk (0x40UL) /*!< I2C_SLAVE_DISABLE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_CON_REG_I2C_RESTART_EN_Pos (5UL) /*!< I2C_RESTART_EN (Bit 5) */ + #define I2C2_I2C2_CON_REG_I2C_RESTART_EN_Msk (0x20UL) /*!< I2C_RESTART_EN (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_CON_REG_I2C_10BITADDR_MASTER_Pos (4UL) /*!< I2C_10BITADDR_MASTER (Bit 4) */ + #define I2C2_I2C2_CON_REG_I2C_10BITADDR_MASTER_Msk (0x10UL) /*!< I2C_10BITADDR_MASTER (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_CON_REG_I2C_10BITADDR_SLAVE_Pos (3UL) /*!< I2C_10BITADDR_SLAVE (Bit 3) */ + #define I2C2_I2C2_CON_REG_I2C_10BITADDR_SLAVE_Msk (0x8UL) /*!< I2C_10BITADDR_SLAVE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_CON_REG_I2C_SPEED_Pos (1UL) /*!< I2C_SPEED (Bit 1) */ + #define I2C2_I2C2_CON_REG_I2C_SPEED_Msk (0x6UL) /*!< I2C_SPEED (Bitfield-Mask: 0x03) */ + #define I2C2_I2C2_CON_REG_I2C_MASTER_MODE_Pos (0UL) /*!< I2C_MASTER_MODE (Bit 0) */ + #define I2C2_I2C2_CON_REG_I2C_MASTER_MODE_Msk (0x1UL) /*!< I2C_MASTER_MODE (Bitfield-Mask: 0x01) */ +/* =================================================== I2C2_DATA_CMD_REG =================================================== */ + #define I2C2_I2C2_DATA_CMD_REG_I2C_RESTART_Pos (10UL) /*!< I2C_RESTART (Bit 10) */ + #define I2C2_I2C2_DATA_CMD_REG_I2C_RESTART_Msk (0x400UL) /*!< I2C_RESTART (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_DATA_CMD_REG_I2C_STOP_Pos (9UL) /*!< I2C_STOP (Bit 9) */ + #define I2C2_I2C2_DATA_CMD_REG_I2C_STOP_Msk (0x200UL) /*!< I2C_STOP (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_DATA_CMD_REG_I2C_CMD_Pos (8UL) /*!< I2C_CMD (Bit 8) */ + #define I2C2_I2C2_DATA_CMD_REG_I2C_CMD_Msk (0x100UL) /*!< I2C_CMD (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_DATA_CMD_REG_I2C_DAT_Pos (0UL) /*!< I2C_DAT (Bit 0) */ + #define I2C2_I2C2_DATA_CMD_REG_I2C_DAT_Msk (0xffUL) /*!< I2C_DAT (Bitfield-Mask: 0xff) */ +/* ==================================================== I2C2_DMA_CR_REG ==================================================== */ + #define I2C2_I2C2_DMA_CR_REG_TDMAE_Pos (1UL) /*!< TDMAE (Bit 1) */ + #define I2C2_I2C2_DMA_CR_REG_TDMAE_Msk (0x2UL) /*!< TDMAE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_DMA_CR_REG_RDMAE_Pos (0UL) /*!< RDMAE (Bit 0) */ + #define I2C2_I2C2_DMA_CR_REG_RDMAE_Msk (0x1UL) /*!< RDMAE (Bitfield-Mask: 0x01) */ +/* =================================================== I2C2_DMA_RDLR_REG =================================================== */ + #define I2C2_I2C2_DMA_RDLR_REG_DMARDL_Pos (0UL) /*!< DMARDL (Bit 0) */ + #define I2C2_I2C2_DMA_RDLR_REG_DMARDL_Msk (0x1fUL) /*!< DMARDL (Bitfield-Mask: 0x1f) */ +/* =================================================== I2C2_DMA_TDLR_REG =================================================== */ + #define I2C2_I2C2_DMA_TDLR_REG_DMATDL_Pos (0UL) /*!< DMATDL (Bit 0) */ + #define I2C2_I2C2_DMA_TDLR_REG_DMATDL_Msk (0x1fUL) /*!< DMATDL (Bitfield-Mask: 0x1f) */ +/* ==================================================== I2C2_ENABLE_REG ==================================================== */ + #define I2C2_I2C2_ENABLE_REG_I2C_TX_CMD_BLOCK_Pos (2UL) /*!< I2C_TX_CMD_BLOCK (Bit 2) */ + #define I2C2_I2C2_ENABLE_REG_I2C_TX_CMD_BLOCK_Msk (0x4UL) /*!< I2C_TX_CMD_BLOCK (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_ENABLE_REG_I2C_ABORT_Pos (1UL) /*!< I2C_ABORT (Bit 1) */ + #define I2C2_I2C2_ENABLE_REG_I2C_ABORT_Msk (0x2UL) /*!< I2C_ABORT (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_ENABLE_REG_I2C_EN_Pos (0UL) /*!< I2C_EN (Bit 0) */ + #define I2C2_I2C2_ENABLE_REG_I2C_EN_Msk (0x1UL) /*!< I2C_EN (Bitfield-Mask: 0x01) */ +/* ================================================ I2C2_ENABLE_STATUS_REG ================================================= */ + #define I2C2_I2C2_ENABLE_STATUS_REG_SLV_RX_DATA_LOST_Pos (2UL) /*!< SLV_RX_DATA_LOST (Bit 2) */ + #define I2C2_I2C2_ENABLE_STATUS_REG_SLV_RX_DATA_LOST_Msk (0x4UL) /*!< SLV_RX_DATA_LOST (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_ENABLE_STATUS_REG_SLV_DISABLED_WHILE_BUSY_Pos (1UL) /*!< SLV_DISABLED_WHILE_BUSY (Bit 1) */ + #define I2C2_I2C2_ENABLE_STATUS_REG_SLV_DISABLED_WHILE_BUSY_Msk (0x2UL) /*!< SLV_DISABLED_WHILE_BUSY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_ENABLE_STATUS_REG_IC_EN_Pos (0UL) /*!< IC_EN (Bit 0) */ + #define I2C2_I2C2_ENABLE_STATUS_REG_IC_EN_Msk (0x1UL) /*!< IC_EN (Bitfield-Mask: 0x01) */ +/* ================================================= I2C2_FS_SCL_HCNT_REG ================================================== */ + #define I2C2_I2C2_FS_SCL_HCNT_REG_IC_FS_SCL_HCNT_Pos (0UL) /*!< IC_FS_SCL_HCNT (Bit 0) */ + #define I2C2_I2C2_FS_SCL_HCNT_REG_IC_FS_SCL_HCNT_Msk (0xffffUL) /*!< IC_FS_SCL_HCNT (Bitfield-Mask: 0xffff) */ +/* ================================================= I2C2_FS_SCL_LCNT_REG ================================================== */ + #define I2C2_I2C2_FS_SCL_LCNT_REG_IC_FS_SCL_LCNT_Pos (0UL) /*!< IC_FS_SCL_LCNT (Bit 0) */ + #define I2C2_I2C2_FS_SCL_LCNT_REG_IC_FS_SCL_LCNT_Msk (0xffffUL) /*!< IC_FS_SCL_LCNT (Bitfield-Mask: 0xffff) */ +/* =================================================== I2C2_HS_MADDR_REG =================================================== */ + #define I2C2_I2C2_HS_MADDR_REG_I2C_IC_HS_MAR_Pos (0UL) /*!< I2C_IC_HS_MAR (Bit 0) */ + #define I2C2_I2C2_HS_MADDR_REG_I2C_IC_HS_MAR_Msk (0x7UL) /*!< I2C_IC_HS_MAR (Bitfield-Mask: 0x07) */ +/* ================================================= I2C2_HS_SCL_HCNT_REG ================================================== */ + #define I2C2_I2C2_HS_SCL_HCNT_REG_IC_HS_SCL_HCNT_Pos (0UL) /*!< IC_HS_SCL_HCNT (Bit 0) */ + #define I2C2_I2C2_HS_SCL_HCNT_REG_IC_HS_SCL_HCNT_Msk (0xffffUL) /*!< IC_HS_SCL_HCNT (Bitfield-Mask: 0xffff) */ +/* ================================================= I2C2_HS_SCL_LCNT_REG ================================================== */ + #define I2C2_I2C2_HS_SCL_LCNT_REG_IC_HS_SCL_LCNT_Pos (0UL) /*!< IC_HS_SCL_LCNT (Bit 0) */ + #define I2C2_I2C2_HS_SCL_LCNT_REG_IC_HS_SCL_LCNT_Msk (0xffffUL) /*!< IC_HS_SCL_LCNT (Bitfield-Mask: 0xffff) */ +/* ================================================= I2C2_IC_FS_SPKLEN_REG ================================================= */ + #define I2C2_I2C2_IC_FS_SPKLEN_REG_I2C_FS_SPKLEN_Pos (0UL) /*!< I2C_FS_SPKLEN (Bit 0) */ + #define I2C2_I2C2_IC_FS_SPKLEN_REG_I2C_FS_SPKLEN_Msk (0xffUL) /*!< I2C_FS_SPKLEN (Bitfield-Mask: 0xff) */ +/* ================================================= I2C2_IC_HS_SPKLEN_REG ================================================= */ + #define I2C2_I2C2_IC_HS_SPKLEN_REG_I2C_HS_SPKLEN_Pos (0UL) /*!< I2C_HS_SPKLEN (Bit 0) */ + #define I2C2_I2C2_IC_HS_SPKLEN_REG_I2C_HS_SPKLEN_Msk (0xffUL) /*!< I2C_HS_SPKLEN (Bitfield-Mask: 0xff) */ +/* ================================================== I2C2_INTR_MASK_REG =================================================== */ + #define I2C2_I2C2_INTR_MASK_REG_M_SCL_STUCK_AT_LOW_Pos (14UL) /*!< M_SCL_STUCK_AT_LOW (Bit 14) */ + #define I2C2_I2C2_INTR_MASK_REG_M_SCL_STUCK_AT_LOW_Msk (0x4000UL) /*!< M_SCL_STUCK_AT_LOW (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_MASTER_ON_HOLD_Pos (13UL) /*!< M_MASTER_ON_HOLD (Bit 13) */ + #define I2C2_I2C2_INTR_MASK_REG_M_MASTER_ON_HOLD_Msk (0x2000UL) /*!< M_MASTER_ON_HOLD (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RESTART_DET_Pos (12UL) /*!< M_RESTART_DET (Bit 12) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RESTART_DET_Msk (0x1000UL) /*!< M_RESTART_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_GEN_CALL_Pos (11UL) /*!< M_GEN_CALL (Bit 11) */ + #define I2C2_I2C2_INTR_MASK_REG_M_GEN_CALL_Msk (0x800UL) /*!< M_GEN_CALL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_START_DET_Pos (10UL) /*!< M_START_DET (Bit 10) */ + #define I2C2_I2C2_INTR_MASK_REG_M_START_DET_Msk (0x400UL) /*!< M_START_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_STOP_DET_Pos (9UL) /*!< M_STOP_DET (Bit 9) */ + #define I2C2_I2C2_INTR_MASK_REG_M_STOP_DET_Msk (0x200UL) /*!< M_STOP_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_ACTIVITY_Pos (8UL) /*!< M_ACTIVITY (Bit 8) */ + #define I2C2_I2C2_INTR_MASK_REG_M_ACTIVITY_Msk (0x100UL) /*!< M_ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RX_DONE_Pos (7UL) /*!< M_RX_DONE (Bit 7) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RX_DONE_Msk (0x80UL) /*!< M_RX_DONE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_TX_ABRT_Pos (6UL) /*!< M_TX_ABRT (Bit 6) */ + #define I2C2_I2C2_INTR_MASK_REG_M_TX_ABRT_Msk (0x40UL) /*!< M_TX_ABRT (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RD_REQ_Pos (5UL) /*!< M_RD_REQ (Bit 5) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RD_REQ_Msk (0x20UL) /*!< M_RD_REQ (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_TX_EMPTY_Pos (4UL) /*!< M_TX_EMPTY (Bit 4) */ + #define I2C2_I2C2_INTR_MASK_REG_M_TX_EMPTY_Msk (0x10UL) /*!< M_TX_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_TX_OVER_Pos (3UL) /*!< M_TX_OVER (Bit 3) */ + #define I2C2_I2C2_INTR_MASK_REG_M_TX_OVER_Msk (0x8UL) /*!< M_TX_OVER (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RX_FULL_Pos (2UL) /*!< M_RX_FULL (Bit 2) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RX_FULL_Msk (0x4UL) /*!< M_RX_FULL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RX_OVER_Pos (1UL) /*!< M_RX_OVER (Bit 1) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RX_OVER_Msk (0x2UL) /*!< M_RX_OVER (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RX_UNDER_Pos (0UL) /*!< M_RX_UNDER (Bit 0) */ + #define I2C2_I2C2_INTR_MASK_REG_M_RX_UNDER_Msk (0x1UL) /*!< M_RX_UNDER (Bitfield-Mask: 0x01) */ +/* ================================================== I2C2_INTR_STAT_REG =================================================== */ + #define I2C2_I2C2_INTR_STAT_REG_R_SCL_STUCK_AT_LOW_Pos (14UL) /*!< R_SCL_STUCK_AT_LOW (Bit 14) */ + #define I2C2_I2C2_INTR_STAT_REG_R_SCL_STUCK_AT_LOW_Msk (0x4000UL) /*!< R_SCL_STUCK_AT_LOW (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_MASTER_ON_HOLD_Pos (13UL) /*!< R_MASTER_ON_HOLD (Bit 13) */ + #define I2C2_I2C2_INTR_STAT_REG_R_MASTER_ON_HOLD_Msk (0x2000UL) /*!< R_MASTER_ON_HOLD (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RESTART_DET_Pos (12UL) /*!< R_RESTART_DET (Bit 12) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RESTART_DET_Msk (0x1000UL) /*!< R_RESTART_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_GEN_CALL_Pos (11UL) /*!< R_GEN_CALL (Bit 11) */ + #define I2C2_I2C2_INTR_STAT_REG_R_GEN_CALL_Msk (0x800UL) /*!< R_GEN_CALL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_START_DET_Pos (10UL) /*!< R_START_DET (Bit 10) */ + #define I2C2_I2C2_INTR_STAT_REG_R_START_DET_Msk (0x400UL) /*!< R_START_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_STOP_DET_Pos (9UL) /*!< R_STOP_DET (Bit 9) */ + #define I2C2_I2C2_INTR_STAT_REG_R_STOP_DET_Msk (0x200UL) /*!< R_STOP_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_ACTIVITY_Pos (8UL) /*!< R_ACTIVITY (Bit 8) */ + #define I2C2_I2C2_INTR_STAT_REG_R_ACTIVITY_Msk (0x100UL) /*!< R_ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RX_DONE_Pos (7UL) /*!< R_RX_DONE (Bit 7) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RX_DONE_Msk (0x80UL) /*!< R_RX_DONE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_TX_ABRT_Pos (6UL) /*!< R_TX_ABRT (Bit 6) */ + #define I2C2_I2C2_INTR_STAT_REG_R_TX_ABRT_Msk (0x40UL) /*!< R_TX_ABRT (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RD_REQ_Pos (5UL) /*!< R_RD_REQ (Bit 5) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RD_REQ_Msk (0x20UL) /*!< R_RD_REQ (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_TX_EMPTY_Pos (4UL) /*!< R_TX_EMPTY (Bit 4) */ + #define I2C2_I2C2_INTR_STAT_REG_R_TX_EMPTY_Msk (0x10UL) /*!< R_TX_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_TX_OVER_Pos (3UL) /*!< R_TX_OVER (Bit 3) */ + #define I2C2_I2C2_INTR_STAT_REG_R_TX_OVER_Msk (0x8UL) /*!< R_TX_OVER (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RX_FULL_Pos (2UL) /*!< R_RX_FULL (Bit 2) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RX_FULL_Msk (0x4UL) /*!< R_RX_FULL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RX_OVER_Pos (1UL) /*!< R_RX_OVER (Bit 1) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RX_OVER_Msk (0x2UL) /*!< R_RX_OVER (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RX_UNDER_Pos (0UL) /*!< R_RX_UNDER (Bit 0) */ + #define I2C2_I2C2_INTR_STAT_REG_R_RX_UNDER_Msk (0x1UL) /*!< R_RX_UNDER (Bitfield-Mask: 0x01) */ +/* ================================================ I2C2_RAW_INTR_STAT_REG ================================================= */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_SCL_STUCK_AT_LOW_Pos (14UL) /*!< SCL_STUCK_AT_LOW (Bit 14) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_SCL_STUCK_AT_LOW_Msk (0x4000UL) /*!< SCL_STUCK_AT_LOW (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_MASTER_ON_HOLD_Pos (13UL) /*!< MASTER_ON_HOLD (Bit 13) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_MASTER_ON_HOLD_Msk (0x2000UL) /*!< MASTER_ON_HOLD (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RESTART_DET_Pos (12UL) /*!< RESTART_DET (Bit 12) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RESTART_DET_Msk (0x1000UL) /*!< RESTART_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_GEN_CALL_Pos (11UL) /*!< GEN_CALL (Bit 11) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_GEN_CALL_Msk (0x800UL) /*!< GEN_CALL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_START_DET_Pos (10UL) /*!< START_DET (Bit 10) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_START_DET_Msk (0x400UL) /*!< START_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_STOP_DET_Pos (9UL) /*!< STOP_DET (Bit 9) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_STOP_DET_Msk (0x200UL) /*!< STOP_DET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_ACTIVITY_Pos (8UL) /*!< ACTIVITY (Bit 8) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_ACTIVITY_Msk (0x100UL) /*!< ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RX_DONE_Pos (7UL) /*!< RX_DONE (Bit 7) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RX_DONE_Msk (0x80UL) /*!< RX_DONE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_TX_ABRT_Pos (6UL) /*!< TX_ABRT (Bit 6) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_TX_ABRT_Msk (0x40UL) /*!< TX_ABRT (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RD_REQ_Pos (5UL) /*!< RD_REQ (Bit 5) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RD_REQ_Msk (0x20UL) /*!< RD_REQ (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_TX_EMPTY_Pos (4UL) /*!< TX_EMPTY (Bit 4) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_TX_EMPTY_Msk (0x10UL) /*!< TX_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_TX_OVER_Pos (3UL) /*!< TX_OVER (Bit 3) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_TX_OVER_Msk (0x8UL) /*!< TX_OVER (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RX_FULL_Pos (2UL) /*!< RX_FULL (Bit 2) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RX_FULL_Msk (0x4UL) /*!< RX_FULL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RX_OVER_Pos (1UL) /*!< RX_OVER (Bit 1) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RX_OVER_Msk (0x2UL) /*!< RX_OVER (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RX_UNDER_Pos (0UL) /*!< RX_UNDER (Bit 0) */ + #define I2C2_I2C2_RAW_INTR_STAT_REG_RX_UNDER_Msk (0x1UL) /*!< RX_UNDER (Bitfield-Mask: 0x01) */ +/* ==================================================== I2C2_RXFLR_REG ===================================================== */ + #define I2C2_I2C2_RXFLR_REG_RXFLR_Pos (0UL) /*!< RXFLR (Bit 0) */ + #define I2C2_I2C2_RXFLR_REG_RXFLR_Msk (0x3fUL) /*!< RXFLR (Bitfield-Mask: 0x3f) */ +/* ==================================================== I2C2_RX_TL_REG ===================================================== */ + #define I2C2_I2C2_RX_TL_REG_RX_TL_Pos (0UL) /*!< RX_TL (Bit 0) */ + #define I2C2_I2C2_RX_TL_REG_RX_TL_Msk (0x1fUL) /*!< RX_TL (Bitfield-Mask: 0x1f) */ +/* ===================================================== I2C2_SAR_REG ====================================================== */ + #define I2C2_I2C2_SAR_REG_IC_SAR_Pos (0UL) /*!< IC_SAR (Bit 0) */ + #define I2C2_I2C2_SAR_REG_IC_SAR_Msk (0x3ffUL) /*!< IC_SAR (Bitfield-Mask: 0x3ff) */ +/* =================================================== I2C2_SDA_HOLD_REG =================================================== */ + #define I2C2_I2C2_SDA_HOLD_REG_I2C_SDA_RX_HOLD_Pos (16UL) /*!< I2C_SDA_RX_HOLD (Bit 16) */ + #define I2C2_I2C2_SDA_HOLD_REG_I2C_SDA_RX_HOLD_Msk (0xff0000UL) /*!< I2C_SDA_RX_HOLD (Bitfield-Mask: 0xff) */ + #define I2C2_I2C2_SDA_HOLD_REG_I2C_SDA_TX_HOLD_Pos (0UL) /*!< I2C_SDA_TX_HOLD (Bit 0) */ + #define I2C2_I2C2_SDA_HOLD_REG_I2C_SDA_TX_HOLD_Msk (0xffffUL) /*!< I2C_SDA_TX_HOLD (Bitfield-Mask: 0xffff) */ +/* ================================================== I2C2_SDA_SETUP_REG =================================================== */ + #define I2C2_I2C2_SDA_SETUP_REG_SDA_SETUP_Pos (0UL) /*!< SDA_SETUP (Bit 0) */ + #define I2C2_I2C2_SDA_SETUP_REG_SDA_SETUP_Msk (0xffUL) /*!< SDA_SETUP (Bitfield-Mask: 0xff) */ +/* ================================================= I2C2_SS_SCL_HCNT_REG ================================================== */ + #define I2C2_I2C2_SS_SCL_HCNT_REG_IC_SS_SCL_HCNT_Pos (0UL) /*!< IC_SS_SCL_HCNT (Bit 0) */ + #define I2C2_I2C2_SS_SCL_HCNT_REG_IC_SS_SCL_HCNT_Msk (0xffffUL) /*!< IC_SS_SCL_HCNT (Bitfield-Mask: 0xffff) */ +/* ================================================= I2C2_SS_SCL_LCNT_REG ================================================== */ + #define I2C2_I2C2_SS_SCL_LCNT_REG_IC_SS_SCL_LCNT_Pos (0UL) /*!< IC_SS_SCL_LCNT (Bit 0) */ + #define I2C2_I2C2_SS_SCL_LCNT_REG_IC_SS_SCL_LCNT_Msk (0xffffUL) /*!< IC_SS_SCL_LCNT (Bitfield-Mask: 0xffff) */ +/* ==================================================== I2C2_STATUS_REG ==================================================== */ + #define I2C2_I2C2_STATUS_REG_LV_HOLD_RX_FIFO_FULL_Pos (10UL) /*!< LV_HOLD_RX_FIFO_FULL (Bit 10) */ + #define I2C2_I2C2_STATUS_REG_LV_HOLD_RX_FIFO_FULL_Msk (0x400UL) /*!< LV_HOLD_RX_FIFO_FULL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_SLV_HOLD_TX_FIFO_EMPTY_Pos (9UL) /*!< SLV_HOLD_TX_FIFO_EMPTY (Bit 9) */ + #define I2C2_I2C2_STATUS_REG_SLV_HOLD_TX_FIFO_EMPTY_Msk (0x200UL) /*!< SLV_HOLD_TX_FIFO_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_MST_HOLD_RX_FIFO_FULL_Pos (8UL) /*!< MST_HOLD_RX_FIFO_FULL (Bit 8) */ + #define I2C2_I2C2_STATUS_REG_MST_HOLD_RX_FIFO_FULL_Msk (0x100UL) /*!< MST_HOLD_RX_FIFO_FULL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_MST_HOLD_TX_FIFO_EMPTY_Pos (7UL) /*!< MST_HOLD_TX_FIFO_EMPTY (Bit 7) */ + #define I2C2_I2C2_STATUS_REG_MST_HOLD_TX_FIFO_EMPTY_Msk (0x80UL) /*!< MST_HOLD_TX_FIFO_EMPTY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_SLV_ACTIVITY_Pos (6UL) /*!< SLV_ACTIVITY (Bit 6) */ + #define I2C2_I2C2_STATUS_REG_SLV_ACTIVITY_Msk (0x40UL) /*!< SLV_ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_MST_ACTIVITY_Pos (5UL) /*!< MST_ACTIVITY (Bit 5) */ + #define I2C2_I2C2_STATUS_REG_MST_ACTIVITY_Msk (0x20UL) /*!< MST_ACTIVITY (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_RFF_Pos (4UL) /*!< RFF (Bit 4) */ + #define I2C2_I2C2_STATUS_REG_RFF_Msk (0x10UL) /*!< RFF (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_RFNE_Pos (3UL) /*!< RFNE (Bit 3) */ + #define I2C2_I2C2_STATUS_REG_RFNE_Msk (0x8UL) /*!< RFNE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_TFE_Pos (2UL) /*!< TFE (Bit 2) */ + #define I2C2_I2C2_STATUS_REG_TFE_Msk (0x4UL) /*!< TFE (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_TFNF_Pos (1UL) /*!< TFNF (Bit 1) */ + #define I2C2_I2C2_STATUS_REG_TFNF_Msk (0x2UL) /*!< TFNF (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_STATUS_REG_I2C_ACTIVITY_Pos (0UL) /*!< I2C_ACTIVITY (Bit 0) */ + #define I2C2_I2C2_STATUS_REG_I2C_ACTIVITY_Msk (0x1UL) /*!< I2C_ACTIVITY (Bitfield-Mask: 0x01) */ +/* ===================================================== I2C2_TAR_REG ====================================================== */ + #define I2C2_I2C2_TAR_REG_SPECIAL_Pos (11UL) /*!< SPECIAL (Bit 11) */ + #define I2C2_I2C2_TAR_REG_SPECIAL_Msk (0x800UL) /*!< SPECIAL (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TAR_REG_GC_OR_START_Pos (10UL) /*!< GC_OR_START (Bit 10) */ + #define I2C2_I2C2_TAR_REG_GC_OR_START_Msk (0x400UL) /*!< GC_OR_START (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TAR_REG_IC_TAR_Pos (0UL) /*!< IC_TAR (Bit 0) */ + #define I2C2_I2C2_TAR_REG_IC_TAR_Msk (0x3ffUL) /*!< IC_TAR (Bitfield-Mask: 0x3ff) */ +/* ==================================================== I2C2_TXFLR_REG ===================================================== */ + #define I2C2_I2C2_TXFLR_REG_TXFLR_Pos (0UL) /*!< TXFLR (Bit 0) */ + #define I2C2_I2C2_TXFLR_REG_TXFLR_Msk (0x3fUL) /*!< TXFLR (Bitfield-Mask: 0x3f) */ +/* ================================================ I2C2_TX_ABRT_SOURCE_REG ================================================ */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_USER_ABRT_Pos (16UL) /*!< ABRT_USER_ABRT (Bit 16) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_USER_ABRT_Msk (0x10000UL) /*!< ABRT_USER_ABRT (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SLVRD_INTX_Pos (15UL) /*!< ABRT_SLVRD_INTX (Bit 15) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SLVRD_INTX_Msk (0x8000UL) /*!< ABRT_SLVRD_INTX (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SLV_ARBLOST_Pos (14UL) /*!< ABRT_SLV_ARBLOST (Bit 14) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SLV_ARBLOST_Msk (0x4000UL) /*!< ABRT_SLV_ARBLOST (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SLVFLUSH_TXFIFO_Pos (13UL) /*!< ABRT_SLVFLUSH_TXFIFO (Bit 13) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SLVFLUSH_TXFIFO_Msk (0x2000UL) /*!< ABRT_SLVFLUSH_TXFIFO (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ARB_LOST_Pos (12UL) /*!< ARB_LOST (Bit 12) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ARB_LOST_Msk (0x1000UL) /*!< ARB_LOST (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_MASTER_DIS_Pos (11UL) /*!< ABRT_MASTER_DIS (Bit 11) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_MASTER_DIS_Msk (0x800UL) /*!< ABRT_MASTER_DIS (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_10B_RD_NORSTRT_Pos (10UL) /*!< ABRT_10B_RD_NORSTRT (Bit 10) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_10B_RD_NORSTRT_Msk (0x400UL) /*!< ABRT_10B_RD_NORSTRT (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SBYTE_NORSTRT_Pos (9UL) /*!< ABRT_SBYTE_NORSTRT (Bit 9) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SBYTE_NORSTRT_Msk (0x200UL) /*!< ABRT_SBYTE_NORSTRT (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_HS_NORSTRT_Pos (8UL) /*!< ABRT_HS_NORSTRT (Bit 8) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_HS_NORSTRT_Msk (0x100UL) /*!< ABRT_HS_NORSTRT (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SBYTE_ACKDET_Pos (7UL) /*!< ABRT_SBYTE_ACKDET (Bit 7) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_SBYTE_ACKDET_Msk (0x80UL) /*!< ABRT_SBYTE_ACKDET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_HS_ACKDET_Pos (6UL) /*!< ABRT_HS_ACKDET (Bit 6) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_HS_ACKDET_Msk (0x40UL) /*!< ABRT_HS_ACKDET (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_GCALL_READ_Pos (5UL) /*!< ABRT_GCALL_READ (Bit 5) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_GCALL_READ_Msk (0x20UL) /*!< ABRT_GCALL_READ (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_GCALL_NOACK_Pos (4UL) /*!< ABRT_GCALL_NOACK (Bit 4) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_GCALL_NOACK_Msk (0x10UL) /*!< ABRT_GCALL_NOACK (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_TXDATA_NOACK_Pos (3UL) /*!< ABRT_TXDATA_NOACK (Bit 3) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_TXDATA_NOACK_Msk (0x8UL) /*!< ABRT_TXDATA_NOACK (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_10ADDR2_NOACK_Pos (2UL) /*!< ABRT_10ADDR2_NOACK (Bit 2) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_10ADDR2_NOACK_Msk (0x4UL) /*!< ABRT_10ADDR2_NOACK (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_10ADDR1_NOACK_Pos (1UL) /*!< ABRT_10ADDR1_NOACK (Bit 1) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_10ADDR1_NOACK_Msk (0x2UL) /*!< ABRT_10ADDR1_NOACK (Bitfield-Mask: 0x01) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_7B_ADDR_NOACK_Pos (0UL) /*!< ABRT_7B_ADDR_NOACK (Bit 0) */ + #define I2C2_I2C2_TX_ABRT_SOURCE_REG_ABRT_7B_ADDR_NOACK_Msk (0x1UL) /*!< ABRT_7B_ADDR_NOACK (Bitfield-Mask: 0x01) */ +/* ==================================================== I2C2_TX_TL_REG ===================================================== */ + #define I2C2_I2C2_TX_TL_REG_TX_TL_Pos (0UL) /*!< TX_TL (Bit 0) */ + #define I2C2_I2C2_TX_TL_REG_TX_TL_Msk (0x1fUL) /*!< TX_TL (Bitfield-Mask: 0x1f) */ + +/* =========================================================================================================================== */ +/* ================ KDMA ================ */ +/* =========================================================================================================================== */ + +/* ============================================== KDMA_AHB_HPROT_11_TO_8_REG =============================================== */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH11_SRC_HPROT_Pos (28UL) /*!< CH11_SRC_HPROT (Bit 28) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH11_SRC_HPROT_Msk (0xf0000000UL) /*!< CH11_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH11_DST_HPROT_Pos (24UL) /*!< CH11_DST_HPROT (Bit 24) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH11_DST_HPROT_Msk (0xf000000UL) /*!< CH11_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH10_SRC_HPROT_Pos (20UL) /*!< CH10_SRC_HPROT (Bit 20) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH10_SRC_HPROT_Msk (0xf00000UL) /*!< CH10_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH10_DST_HPROT_Pos (16UL) /*!< CH10_DST_HPROT (Bit 16) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH10_DST_HPROT_Msk (0xf0000UL) /*!< CH10_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH9_SRC_HPROT_Pos (12UL) /*!< CH9_SRC_HPROT (Bit 12) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH9_SRC_HPROT_Msk (0xf000UL) /*!< CH9_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH9_DST_HPROT_Pos (8UL) /*!< CH9_DST_HPROT (Bit 8) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH9_DST_HPROT_Msk (0xf00UL) /*!< CH9_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH8_SRC_HPROT_Pos (4UL) /*!< CH8_SRC_HPROT (Bit 4) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH8_SRC_HPROT_Msk (0xf0UL) /*!< CH8_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH8_DST_HPROT_Pos (0UL) /*!< CH8_DST_HPROT (Bit 0) */ + #define KDMA_KDMA_AHB_HPROT_11_TO_8_REG_CH8_DST_HPROT_Msk (0xfUL) /*!< CH8_DST_HPROT (Bitfield-Mask: 0x0f) */ +/* =============================================== KDMA_AHB_HPROT_3_TO_0_REG =============================================== */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH3_SRC_HPROT_Pos (28UL) /*!< CH3_SRC_HPROT (Bit 28) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH3_SRC_HPROT_Msk (0xf0000000UL) /*!< CH3_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH3_DST_HPROT_Pos (24UL) /*!< CH3_DST_HPROT (Bit 24) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH3_DST_HPROT_Msk (0xf000000UL) /*!< CH3_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH2_SRC_HPROT_Pos (20UL) /*!< CH2_SRC_HPROT (Bit 20) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH2_SRC_HPROT_Msk (0xf00000UL) /*!< CH2_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH2_DST_HPROT_Pos (16UL) /*!< CH2_DST_HPROT (Bit 16) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH2_DST_HPROT_Msk (0xf0000UL) /*!< CH2_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH1_SRC_HPROT_Pos (12UL) /*!< CH1_SRC_HPROT (Bit 12) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH1_SRC_HPROT_Msk (0xf000UL) /*!< CH1_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH1_DST_HPROT_Pos (8UL) /*!< CH1_DST_HPROT (Bit 8) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH1_DST_HPROT_Msk (0xf00UL) /*!< CH1_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH0_SRC_HPROT_Pos (4UL) /*!< CH0_SRC_HPROT (Bit 4) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH0_SRC_HPROT_Msk (0xf0UL) /*!< CH0_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH0_DST_HPROT_Pos (0UL) /*!< CH0_DST_HPROT (Bit 0) */ + #define KDMA_KDMA_AHB_HPROT_3_TO_0_REG_CH0_DST_HPROT_Msk (0xfUL) /*!< CH0_DST_HPROT (Bitfield-Mask: 0x0f) */ +/* =============================================== KDMA_AHB_HPROT_7_TO_4_REG =============================================== */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH7_SRC_HPROT_Pos (28UL) /*!< CH7_SRC_HPROT (Bit 28) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH7_SRC_HPROT_Msk (0xf0000000UL) /*!< CH7_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH7_DST_HPROT_Pos (24UL) /*!< CH7_DST_HPROT (Bit 24) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH7_DST_HPROT_Msk (0xf000000UL) /*!< CH7_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH6_SRC_HPROT_Pos (20UL) /*!< CH6_SRC_HPROT (Bit 20) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH6_SRC_HPROT_Msk (0xf00000UL) /*!< CH6_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH6_DST_HPROT_Pos (16UL) /*!< CH6_DST_HPROT (Bit 16) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH6_DST_HPROT_Msk (0xf0000UL) /*!< CH6_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH5_SRC_HPROT_Pos (12UL) /*!< CH5_SRC_HPROT (Bit 12) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH5_SRC_HPROT_Msk (0xf000UL) /*!< CH5_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH5_DST_HPROT_Pos (8UL) /*!< CH5_DST_HPROT (Bit 8) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH5_DST_HPROT_Msk (0xf00UL) /*!< CH5_DST_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH4_SRC_HPROT_Pos (4UL) /*!< CH4_SRC_HPROT (Bit 4) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH4_SRC_HPROT_Msk (0xf0UL) /*!< CH4_SRC_HPROT (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH4_DST_HPROT_Pos (0UL) /*!< CH4_DST_HPROT (Bit 0) */ + #define KDMA_KDMA_AHB_HPROT_7_TO_4_REG_CH4_DST_HPROT_Msk (0xfUL) /*!< CH4_DST_HPROT (Bitfield-Mask: 0x0f) */ +/* ============================================= KDMA_CFG_DESCRIPTOR_ADDR_REG ============================================== */ + #define KDMA_KDMA_CFG_DESCRIPTOR_ADDR_REG_CFG_DESCRIPTOR_ADDR_Pos (0UL) /*!< CFG_DESCRIPTOR_ADDR (Bit 0) */ + #define KDMA_KDMA_CFG_DESCRIPTOR_ADDR_REG_CFG_DESCRIPTOR_ADDR_Msk (0xffffffffUL) /*!< CFG_DESCRIPTOR_ADDR (Bitfield-Mask: 0xffffffff) */ +/* ================================================ KDMA_CHANNEL_ENABLE_REG ================================================ */ + #define KDMA_KDMA_CHANNEL_ENABLE_REG_CHANNEL_ENABLE_Pos (0UL) /*!< CHANNEL_ENABLE (Bit 0) */ + #define KDMA_KDMA_CHANNEL_ENABLE_REG_CHANNEL_ENABLE_Msk (0xfffUL) /*!< CHANNEL_ENABLE (Bitfield-Mask: 0xfff) */ +/* ==================================================== KDMA_ENABLE_REG ==================================================== */ + #define KDMA_KDMA_ENABLE_REG_DMA_ENABLE_Pos (0UL) /*!< DMA_ENABLE (Bit 0) */ + #define KDMA_KDMA_ENABLE_REG_DMA_ENABLE_Msk (0x1UL) /*!< DMA_ENABLE (Bitfield-Mask: 0x01) */ +/* ================================================= KDMA_IRQ_DONE_CLR_REG ================================================= */ + #define KDMA_KDMA_IRQ_DONE_CLR_REG_IRQ_DONE_CLR_Pos (0UL) /*!< IRQ_DONE_CLR (Bit 0) */ + #define KDMA_KDMA_IRQ_DONE_CLR_REG_IRQ_DONE_CLR_Msk (0xfffUL) /*!< IRQ_DONE_CLR (Bitfield-Mask: 0xfff) */ +/* =================================================== KDMA_IRQ_DONE_REG =================================================== */ + #define KDMA_KDMA_IRQ_DONE_REG_IRQ_DONE_Pos (0UL) /*!< IRQ_DONE (Bit 0) */ + #define KDMA_KDMA_IRQ_DONE_REG_IRQ_DONE_Msk (0xfffUL) /*!< IRQ_DONE (Bitfield-Mask: 0xfff) */ +/* ================================================ KDMA_IRQ_DONE_TYPE_REG ================================================= */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL11_DONE_TYPE_Pos (22UL) /*!< CHANNEL11_DONE_TYPE (Bit 22) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL11_DONE_TYPE_Msk (0xc00000UL) /*!< CHANNEL11_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL10_DONE_TYPE_Pos (20UL) /*!< CHANNEL10_DONE_TYPE (Bit 20) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL10_DONE_TYPE_Msk (0x300000UL) /*!< CHANNEL10_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL9_DONE_TYPE_Pos (18UL) /*!< CHANNEL9_DONE_TYPE (Bit 18) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL9_DONE_TYPE_Msk (0xc0000UL) /*!< CHANNEL9_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL8_DONE_TYPE_Pos (16UL) /*!< CHANNEL8_DONE_TYPE (Bit 16) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL8_DONE_TYPE_Msk (0x30000UL) /*!< CHANNEL8_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL7_DONE_TYPE_Pos (14UL) /*!< CHANNEL7_DONE_TYPE (Bit 14) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL7_DONE_TYPE_Msk (0xc000UL) /*!< CHANNEL7_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL6_DONE_TYPE_Pos (12UL) /*!< CHANNEL6_DONE_TYPE (Bit 12) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL6_DONE_TYPE_Msk (0x3000UL) /*!< CHANNEL6_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL5_DONE_TYPE_Pos (10UL) /*!< CHANNEL5_DONE_TYPE (Bit 10) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL5_DONE_TYPE_Msk (0xc00UL) /*!< CHANNEL5_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL4_DONE_TYPE_Pos (8UL) /*!< CHANNEL4_DONE_TYPE (Bit 8) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL4_DONE_TYPE_Msk (0x300UL) /*!< CHANNEL4_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL3_DONE_TYPE_Pos (6UL) /*!< CHANNEL3_DONE_TYPE (Bit 6) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL3_DONE_TYPE_Msk (0xc0UL) /*!< CHANNEL3_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL2_DONE_TYPE_Pos (4UL) /*!< CHANNEL2_DONE_TYPE (Bit 4) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL2_DONE_TYPE_Msk (0x30UL) /*!< CHANNEL2_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL1_DONE_TYPE_Pos (2UL) /*!< CHANNEL1_DONE_TYPE (Bit 2) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL1_DONE_TYPE_Msk (0xcUL) /*!< CHANNEL1_DONE_TYPE (Bitfield-Mask: 0x03) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL0_DONE_TYPE_Pos (0UL) /*!< CHANNEL0_DONE_TYPE (Bit 0) */ + #define KDMA_KDMA_IRQ_DONE_TYPE_REG_CHANNEL0_DONE_TYPE_Msk (0x3UL) /*!< CHANNEL0_DONE_TYPE (Bitfield-Mask: 0x03) */ +/* ================================================= KDMA_IRQ_ERR_CLR_REG ================================================== */ + #define KDMA_KDMA_IRQ_ERR_CLR_REG_IRQ_ERR_CLR_Pos (0UL) /*!< IRQ_ERR_CLR (Bit 0) */ + #define KDMA_KDMA_IRQ_ERR_CLR_REG_IRQ_ERR_CLR_Msk (0xfffUL) /*!< IRQ_ERR_CLR (Bitfield-Mask: 0xfff) */ +/* =================================================== KDMA_IRQ_ERR_REG ==================================================== */ + #define KDMA_KDMA_IRQ_ERR_REG_IRQ_ERR_Pos (0UL) /*!< IRQ_ERR (Bit 0) */ + #define KDMA_KDMA_IRQ_ERR_REG_IRQ_ERR_Msk (0xfffUL) /*!< IRQ_ERR (Bitfield-Mask: 0xfff) */ +/* ================================================= KDMA_LLI_COUNTER_REG ================================================== */ + #define KDMA_KDMA_LLI_COUNTER_REG_LAST_DONE_CHANNEL_Pos (16UL) /*!< LAST_DONE_CHANNEL (Bit 16) */ + #define KDMA_KDMA_LLI_COUNTER_REG_LAST_DONE_CHANNEL_Msk (0xf0000UL) /*!< LAST_DONE_CHANNEL (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_LLI_COUNTER_REG_LLI_COUNTER_Pos (0UL) /*!< LLI_COUNTER (Bit 0) */ + #define KDMA_KDMA_LLI_COUNTER_REG_LLI_COUNTER_Msk (0xffffUL) /*!< LLI_COUNTER (Bitfield-Mask: 0xffff) */ +/* ==================================================== KDMA_RESET_REG ===================================================== */ + #define KDMA_KDMA_RESET_REG_DMA_RESET_Pos (0UL) /*!< DMA_RESET (Bit 0) */ + #define KDMA_KDMA_RESET_REG_DMA_RESET_Msk (0x1UL) /*!< DMA_RESET (Bitfield-Mask: 0x01) */ +/* ================================================ KDMA_STATUS_COUNTER_REG ================================================ */ + #define KDMA_KDMA_STATUS_COUNTER_REG_ARB_LAST_FLAG_Pos (31UL) /*!< ARB_LAST_FLAG (Bit 31) */ + #define KDMA_KDMA_STATUS_COUNTER_REG_ARB_LAST_FLAG_Msk (0x80000000UL) /*!< ARB_LAST_FLAG (Bitfield-Mask: 0x01) */ + #define KDMA_KDMA_STATUS_COUNTER_REG_ARB_DONE_COUNTER_Pos (16UL) /*!< ARB_DONE_COUNTER (Bit 16) */ + #define KDMA_KDMA_STATUS_COUNTER_REG_ARB_DONE_COUNTER_Msk (0x7fff0000UL) /*!< ARB_DONE_COUNTER (Bitfield-Mask: 0x7fff) */ + #define KDMA_KDMA_STATUS_COUNTER_REG_TRANSFER_LAST_FLAG_Pos (15UL) /*!< TRANSFER_LAST_FLAG (Bit 15) */ + #define KDMA_KDMA_STATUS_COUNTER_REG_TRANSFER_LAST_FLAG_Msk (0x8000UL) /*!< TRANSFER_LAST_FLAG (Bitfield-Mask: 0x01) */ + #define KDMA_KDMA_STATUS_COUNTER_REG_TRANSFER_DONE_COUNTER_Pos (0UL) /*!< TRANSFER_DONE_COUNTER (Bit 0) */ + #define KDMA_KDMA_STATUS_COUNTER_REG_TRANSFER_DONE_COUNTER_Msk (0x7fffUL) /*!< TRANSFER_DONE_COUNTER (Bitfield-Mask: 0x7fff) */ +/* ============================================= KDMA_STATUS_DESC_ADDR_PRE_REG ============================================= */ + #define KDMA_KDMA_STATUS_DESC_ADDR_PRE_REG_ADDRESS_Pos (0UL) /*!< ADDRESS (Bit 0) */ + #define KDMA_KDMA_STATUS_DESC_ADDR_PRE_REG_ADDRESS_Msk (0xffffffffUL) /*!< ADDRESS (Bitfield-Mask: 0xffffffff) */ +/* =============================================== KDMA_STATUS_DESC_ADDR_REG =============================================== */ + #define KDMA_KDMA_STATUS_DESC_ADDR_REG_ADDRESS_Pos (0UL) /*!< ADDRESS (Bit 0) */ + #define KDMA_KDMA_STATUS_DESC_ADDR_REG_ADDRESS_Msk (0xffffffffUL) /*!< ADDRESS (Bitfield-Mask: 0xffffffff) */ +/* ================================================= KDMA_STATUS_DESC_REG ================================================== */ + #define KDMA_KDMA_STATUS_DESC_REG_TASK_DESCRIPTOR_Pos (0UL) /*!< TASK_DESCRIPTOR (Bit 0) */ + #define KDMA_KDMA_STATUS_DESC_REG_TASK_DESCRIPTOR_Msk (0xffffffffUL) /*!< TASK_DESCRIPTOR (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== KDMA_STATUS_REG ==================================================== */ + #define KDMA_KDMA_STATUS_REG_CURRENT_STATE_Pos (20UL) /*!< CURRENT_STATE (Bit 20) */ + #define KDMA_KDMA_STATUS_REG_CURRENT_STATE_Msk (0xf00000UL) /*!< CURRENT_STATE (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_STATUS_REG_CURRENT_ACTIVE_CH_Pos (16UL) /*!< CURRENT_ACTIVE_CH (Bit 16) */ + #define KDMA_KDMA_STATUS_REG_CURRENT_ACTIVE_CH_Msk (0xf0000UL) /*!< CURRENT_ACTIVE_CH (Bitfield-Mask: 0x0f) */ + #define KDMA_KDMA_STATUS_REG_PENDING_CH_Pos (0UL) /*!< PENDING_CH (Bit 0) */ + #define KDMA_KDMA_STATUS_REG_PENDING_CH_Msk (0xfffUL) /*!< PENDING_CH (Bitfield-Mask: 0xfff) */ +/* ================================================== KDMA_SW_REQUEST_REG ================================================== */ + #define KDMA_KDMA_SW_REQUEST_REG_SW_REQUEST_Pos (0UL) /*!< SW_REQUEST (Bit 0) */ + #define KDMA_KDMA_SW_REQUEST_REG_SW_REQUEST_Msk (0xfffUL) /*!< SW_REQUEST (Bitfield-Mask: 0xfff) */ + +/* =========================================================================================================================== */ +/* ================ MEMCTRL ================ */ +/* =========================================================================================================================== */ + +/* ================================================== MEMCTRL_AUD_ARB_REG ================================================== */ + #define MEMCTRL_MEMCTRL_AUD_ARB_REG_APB_AHB_CPUS_PRIO_Pos (1UL) /*!< APB_AHB_CPUS_PRIO (Bit 1) */ + #define MEMCTRL_MEMCTRL_AUD_ARB_REG_APB_AHB_CPUS_PRIO_Msk (0x2UL) /*!< APB_AHB_CPUS_PRIO (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_AUD_ARB_REG_APB_AHB_DMA_PRIO_Pos (0UL) /*!< APB_AHB_DMA_PRIO (Bit 0) */ + #define MEMCTRL_MEMCTRL_AUD_ARB_REG_APB_AHB_DMA_PRIO_Msk (0x1UL) /*!< APB_AHB_DMA_PRIO (Bitfield-Mask: 0x01) */ +/* ================================================= MEMCTRL_CC312_ARB_REG ================================================= */ + #define MEMCTRL_MEMCTRL_CC312_ARB_REG_APB_AHB_CPUS_PRIO_Pos (1UL) /*!< APB_AHB_CPUS_PRIO (Bit 1) */ + #define MEMCTRL_MEMCTRL_CC312_ARB_REG_APB_AHB_CPUS_PRIO_Msk (0x2UL) /*!< APB_AHB_CPUS_PRIO (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_CC312_ARB_REG_APB_AHB_DMA_PRIO_Pos (0UL) /*!< APB_AHB_DMA_PRIO (Bit 0) */ + #define MEMCTRL_MEMCTRL_CC312_ARB_REG_APB_AHB_DMA_PRIO_Msk (0x1UL) /*!< APB_AHB_DMA_PRIO (Bitfield-Mask: 0x01) */ +/* =============================================== MEMCTRL_CIS_BASE_ADDR_REG =============================================== */ + #define MEMCTRL_MEMCTRL_CIS_BASE_ADDR_REG_MEM_CIS_BASE_ADDR_Pos (0UL) /*!< MEM_CIS_BASE_ADDR (Bit 0) */ + #define MEMCTRL_MEMCTRL_CIS_BASE_ADDR_REG_MEM_CIS_BASE_ADDR_Msk (0x7fffffUL) /*!< MEM_CIS_BASE_ADDR (Bitfield-Mask: 0x7fffff) */ +/* ============================================== MEMCTRL_DYNAMIC_CLK_ON_REG =============================================== */ + #define MEMCTRL_MEMCTRL_DYNAMIC_CLK_ON_REG_MEM_UNIT_Pos (5UL) /*!< MEM_UNIT (Bit 5) */ + #define MEMCTRL_MEMCTRL_DYNAMIC_CLK_ON_REG_MEM_UNIT_Msk (0x20UL) /*!< MEM_UNIT (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_DYNAMIC_CLK_ON_REG_MMI2MEM_Pos (3UL) /*!< MMI2MEM (Bit 3) */ + #define MEMCTRL_MEMCTRL_DYNAMIC_CLK_ON_REG_MMI2MEM_Msk (0x8UL) /*!< MMI2MEM (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_DYNAMIC_CLK_ON_REG_ARBITER_Pos (1UL) /*!< ARBITER (Bit 1) */ + #define MEMCTRL_MEMCTRL_DYNAMIC_CLK_ON_REG_ARBITER_Msk (0x2UL) /*!< ARBITER (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_DYNAMIC_CLK_ON_REG_AHB2MEM_Pos (0UL) /*!< AHB2MEM (Bit 0) */ + #define MEMCTRL_MEMCTRL_DYNAMIC_CLK_ON_REG_AHB2MEM_Msk (0x1UL) /*!< AHB2MEM (Bitfield-Mask: 0x01) */ +/* ================================================ MEMCTRL_MST_CLK_EN_REG ================================================= */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_CIS_CLK_EN_Pos (5UL) /*!< MST_CIS_CLK_EN (Bit 5) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_CIS_CLK_EN_Msk (0x20UL) /*!< MST_CIS_CLK_EN (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_WIFI_HSU_CLK_EN_Pos (4UL) /*!< MST_WIFI_HSU_CLK_EN (Bit 4) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_WIFI_HSU_CLK_EN_Msk (0x10UL) /*!< MST_WIFI_HSU_CLK_EN (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_WIFI_MAC_CLK_EN_Pos (3UL) /*!< MST_WIFI_MAC_CLK_EN (Bit 3) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_WIFI_MAC_CLK_EN_Msk (0x8UL) /*!< MST_WIFI_MAC_CLK_EN (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_DMA_CLK_EN_Pos (2UL) /*!< MST_DMA_CLK_EN (Bit 2) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_DMA_CLK_EN_Msk (0x4UL) /*!< MST_DMA_CLK_EN (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_CPUS_CLK_EN_Pos (1UL) /*!< MST_CPUS_CLK_EN (Bit 1) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_CPUS_CLK_EN_Msk (0x2UL) /*!< MST_CPUS_CLK_EN (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_CPUC_CLK_EN_Pos (0UL) /*!< MST_CPUC_CLK_EN (Bit 0) */ + #define MEMCTRL_MEMCTRL_MST_CLK_EN_REG_MST_CPUC_CLK_EN_Msk (0x1UL) /*!< MST_CPUC_CLK_EN (Bitfield-Mask: 0x01) */ +/* ================================================= MEMCTRL_PRIO_ARB_REG ================================================== */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_CIS_RAM_Pos (10UL) /*!< PRIO_ARB_CIS_RAM (Bit 10) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_CIS_RAM_Msk (0xc00UL) /*!< PRIO_ARB_CIS_RAM (Bitfield-Mask: 0x03) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_WIFI_HSU_RAM_Pos (8UL) /*!< PRIO_ARB_WIFI_HSU_RAM (Bit 8) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_WIFI_HSU_RAM_Msk (0x300UL) /*!< PRIO_ARB_WIFI_HSU_RAM (Bitfield-Mask: 0x03) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_WIFI_MAC_RAM_Pos (6UL) /*!< PRIO_ARB_WIFI_MAC_RAM (Bit 6) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_WIFI_MAC_RAM_Msk (0xc0UL) /*!< PRIO_ARB_WIFI_MAC_RAM (Bitfield-Mask: 0x03) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_DMA_RAM_Pos (4UL) /*!< PRIO_ARB_DMA_RAM (Bit 4) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_DMA_RAM_Msk (0x30UL) /*!< PRIO_ARB_DMA_RAM (Bitfield-Mask: 0x03) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_CPUS_RAM_Pos (2UL) /*!< PRIO_ARB_CPUS_RAM (Bit 2) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_CPUS_RAM_Msk (0xcUL) /*!< PRIO_ARB_CPUS_RAM (Bitfield-Mask: 0x03) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_CPUC_RAM_Pos (0UL) /*!< PRIO_ARB_CPUC_RAM (Bit 0) */ + #define MEMCTRL_MEMCTRL_PRIO_ARB_REG_PRIO_ARB_CPUC_RAM_Msk (0x3UL) /*!< PRIO_ARB_CPUC_RAM (Bitfield-Mask: 0x03) */ +/* =================================================== MEMCTRL_STALL_REG =================================================== */ + #define MEMCTRL_MEMCTRL_STALL_REG_CIS_MAX_STALL_Pos (20UL) /*!< CIS_MAX_STALL (Bit 20) */ + #define MEMCTRL_MEMCTRL_STALL_REG_CIS_MAX_STALL_Msk (0xf00000UL) /*!< CIS_MAX_STALL (Bitfield-Mask: 0x0f) */ + #define MEMCTRL_MEMCTRL_STALL_REG_WIFI_HSU_MAX_STALL_Pos (16UL) /*!< WIFI_HSU_MAX_STALL (Bit 16) */ + #define MEMCTRL_MEMCTRL_STALL_REG_WIFI_HSU_MAX_STALL_Msk (0xf0000UL) /*!< WIFI_HSU_MAX_STALL (Bitfield-Mask: 0x0f) */ + #define MEMCTRL_MEMCTRL_STALL_REG_WIFI_MAC_MAX_STALL_Pos (12UL) /*!< WIFI_MAC_MAX_STALL (Bit 12) */ + #define MEMCTRL_MEMCTRL_STALL_REG_WIFI_MAC_MAX_STALL_Msk (0xf000UL) /*!< WIFI_MAC_MAX_STALL (Bitfield-Mask: 0x0f) */ + #define MEMCTRL_MEMCTRL_STALL_REG_AHB_DMA_MAX_STALL_Pos (8UL) /*!< AHB_DMA_MAX_STALL (Bit 8) */ + #define MEMCTRL_MEMCTRL_STALL_REG_AHB_DMA_MAX_STALL_Msk (0xf00UL) /*!< AHB_DMA_MAX_STALL (Bitfield-Mask: 0x0f) */ + #define MEMCTRL_MEMCTRL_STALL_REG_AHB_CPUS_MAX_STALL_Pos (4UL) /*!< AHB_CPUS_MAX_STALL (Bit 4) */ + #define MEMCTRL_MEMCTRL_STALL_REG_AHB_CPUS_MAX_STALL_Msk (0xf0UL) /*!< AHB_CPUS_MAX_STALL (Bitfield-Mask: 0x0f) */ + #define MEMCTRL_MEMCTRL_STALL_REG_AHB_CPUC_MAX_STALL_Pos (0UL) /*!< AHB_CPUC_MAX_STALL (Bit 0) */ + #define MEMCTRL_MEMCTRL_STALL_REG_AHB_CPUC_MAX_STALL_Msk (0xfUL) /*!< AHB_CPUC_MAX_STALL (Bitfield-Mask: 0x0f) */ +/* ============================================== MEMCTRL_STATIC_CLK_OFF_REG =============================================== */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM23_Pos (23UL) /*!< SRAM23 (Bit 23) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM23_Msk (0x800000UL) /*!< SRAM23 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM22_Pos (22UL) /*!< SRAM22 (Bit 22) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM22_Msk (0x400000UL) /*!< SRAM22 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM21_Pos (21UL) /*!< SRAM21 (Bit 21) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM21_Msk (0x200000UL) /*!< SRAM21 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM20_Pos (20UL) /*!< SRAM20 (Bit 20) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM20_Msk (0x100000UL) /*!< SRAM20 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM19_Pos (19UL) /*!< SRAM19 (Bit 19) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM19_Msk (0x80000UL) /*!< SRAM19 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM18_Pos (18UL) /*!< SRAM18 (Bit 18) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM18_Msk (0x40000UL) /*!< SRAM18 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM17_Pos (17UL) /*!< SRAM17 (Bit 17) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM17_Msk (0x20000UL) /*!< SRAM17 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM16_Pos (16UL) /*!< SRAM16 (Bit 16) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM16_Msk (0x10000UL) /*!< SRAM16 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM15_Pos (15UL) /*!< SRAM15 (Bit 15) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM15_Msk (0x8000UL) /*!< SRAM15 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM14_Pos (14UL) /*!< SRAM14 (Bit 14) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM14_Msk (0x4000UL) /*!< SRAM14 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM13_Pos (13UL) /*!< SRAM13 (Bit 13) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM13_Msk (0x2000UL) /*!< SRAM13 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM12_Pos (12UL) /*!< SRAM12 (Bit 12) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM12_Msk (0x1000UL) /*!< SRAM12 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM11_Pos (11UL) /*!< SRAM11 (Bit 11) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM11_Msk (0x800UL) /*!< SRAM11 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM10_Pos (10UL) /*!< SRAM10 (Bit 10) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM10_Msk (0x400UL) /*!< SRAM10 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM9_Pos (9UL) /*!< SRAM9 (Bit 9) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM9_Msk (0x200UL) /*!< SRAM9 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM8_Pos (8UL) /*!< SRAM8 (Bit 8) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM8_Msk (0x100UL) /*!< SRAM8 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM7_Pos (7UL) /*!< SRAM7 (Bit 7) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM7_Msk (0x80UL) /*!< SRAM7 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM6_Pos (6UL) /*!< SRAM6 (Bit 6) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM6_Msk (0x40UL) /*!< SRAM6 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM5_Pos (5UL) /*!< SRAM5 (Bit 5) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM5_Msk (0x20UL) /*!< SRAM5 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM4_Pos (4UL) /*!< SRAM4 (Bit 4) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM4_Msk (0x10UL) /*!< SRAM4 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM3_Pos (3UL) /*!< SRAM3 (Bit 3) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM3_Msk (0x8UL) /*!< SRAM3 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM2_Pos (2UL) /*!< SRAM2 (Bit 2) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM2_Msk (0x4UL) /*!< SRAM2 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM1_Pos (1UL) /*!< SRAM1 (Bit 1) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM1_Msk (0x2UL) /*!< SRAM1 (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM0_Pos (0UL) /*!< SRAM0 (Bit 0) */ + #define MEMCTRL_MEMCTRL_STATIC_CLK_OFF_REG_SRAM0_Msk (0x1UL) /*!< SRAM0 (Bitfield-Mask: 0x01) */ +/* ================================================== MEMCTRL_STATUS_REG =================================================== */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM23_OFF_BUT_ACCESS_Pos (23UL) /*!< RAM23_OFF_BUT_ACCESS (Bit 23) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM23_OFF_BUT_ACCESS_Msk (0x800000UL) /*!< RAM23_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM22_OFF_BUT_ACCESS_Pos (22UL) /*!< RAM22_OFF_BUT_ACCESS (Bit 22) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM22_OFF_BUT_ACCESS_Msk (0x400000UL) /*!< RAM22_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM21_OFF_BUT_ACCESS_Pos (21UL) /*!< RAM21_OFF_BUT_ACCESS (Bit 21) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM21_OFF_BUT_ACCESS_Msk (0x200000UL) /*!< RAM21_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM20_OFF_BUT_ACCESS_Pos (20UL) /*!< RAM20_OFF_BUT_ACCESS (Bit 20) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM20_OFF_BUT_ACCESS_Msk (0x100000UL) /*!< RAM20_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM19_OFF_BUT_ACCESS_Pos (19UL) /*!< RAM19_OFF_BUT_ACCESS (Bit 19) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM19_OFF_BUT_ACCESS_Msk (0x80000UL) /*!< RAM19_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM18_OFF_BUT_ACCESS_Pos (18UL) /*!< RAM18_OFF_BUT_ACCESS (Bit 18) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM18_OFF_BUT_ACCESS_Msk (0x40000UL) /*!< RAM18_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM17_OFF_BUT_ACCESS_Pos (17UL) /*!< RAM17_OFF_BUT_ACCESS (Bit 17) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM17_OFF_BUT_ACCESS_Msk (0x20000UL) /*!< RAM17_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM16_OFF_BUT_ACCESS_Pos (16UL) /*!< RAM16_OFF_BUT_ACCESS (Bit 16) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM16_OFF_BUT_ACCESS_Msk (0x10000UL) /*!< RAM16_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM15_OFF_BUT_ACCESS_Pos (15UL) /*!< RAM15_OFF_BUT_ACCESS (Bit 15) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM15_OFF_BUT_ACCESS_Msk (0x8000UL) /*!< RAM15_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM14_OFF_BUT_ACCESS_Pos (14UL) /*!< RAM14_OFF_BUT_ACCESS (Bit 14) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM14_OFF_BUT_ACCESS_Msk (0x4000UL) /*!< RAM14_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM13_OFF_BUT_ACCESS_Pos (13UL) /*!< RAM13_OFF_BUT_ACCESS (Bit 13) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM13_OFF_BUT_ACCESS_Msk (0x2000UL) /*!< RAM13_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM12_OFF_BUT_ACCESS_Pos (12UL) /*!< RAM12_OFF_BUT_ACCESS (Bit 12) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM12_OFF_BUT_ACCESS_Msk (0x1000UL) /*!< RAM12_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM11_OFF_BUT_ACCESS_Pos (11UL) /*!< RAM11_OFF_BUT_ACCESS (Bit 11) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM11_OFF_BUT_ACCESS_Msk (0x800UL) /*!< RAM11_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM10_OFF_BUT_ACCESS_Pos (10UL) /*!< RAM10_OFF_BUT_ACCESS (Bit 10) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM10_OFF_BUT_ACCESS_Msk (0x400UL) /*!< RAM10_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM9_OFF_BUT_ACCESS_Pos (9UL) /*!< RAM9_OFF_BUT_ACCESS (Bit 9) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM9_OFF_BUT_ACCESS_Msk (0x200UL) /*!< RAM9_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM8_OFF_BUT_ACCESS_Pos (8UL) /*!< RAM8_OFF_BUT_ACCESS (Bit 8) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM8_OFF_BUT_ACCESS_Msk (0x100UL) /*!< RAM8_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM7_OFF_BUT_ACCESS_Pos (7UL) /*!< RAM7_OFF_BUT_ACCESS (Bit 7) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM7_OFF_BUT_ACCESS_Msk (0x80UL) /*!< RAM7_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM6_OFF_BUT_ACCESS_Pos (6UL) /*!< RAM6_OFF_BUT_ACCESS (Bit 6) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM6_OFF_BUT_ACCESS_Msk (0x40UL) /*!< RAM6_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM5_OFF_BUT_ACCESS_Pos (5UL) /*!< RAM5_OFF_BUT_ACCESS (Bit 5) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM5_OFF_BUT_ACCESS_Msk (0x20UL) /*!< RAM5_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM4_OFF_BUT_ACCESS_Pos (4UL) /*!< RAM4_OFF_BUT_ACCESS (Bit 4) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM4_OFF_BUT_ACCESS_Msk (0x10UL) /*!< RAM4_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM3_OFF_BUT_ACCESS_Pos (3UL) /*!< RAM3_OFF_BUT_ACCESS (Bit 3) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM3_OFF_BUT_ACCESS_Msk (0x8UL) /*!< RAM3_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM2_OFF_BUT_ACCESS_Pos (2UL) /*!< RAM2_OFF_BUT_ACCESS (Bit 2) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM2_OFF_BUT_ACCESS_Msk (0x4UL) /*!< RAM2_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM1_OFF_BUT_ACCESS_Pos (1UL) /*!< RAM1_OFF_BUT_ACCESS (Bit 1) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM1_OFF_BUT_ACCESS_Msk (0x2UL) /*!< RAM1_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM0_OFF_BUT_ACCESS_Pos (0UL) /*!< RAM0_OFF_BUT_ACCESS (Bit 0) */ + #define MEMCTRL_MEMCTRL_STATUS_REG_RAM0_OFF_BUT_ACCESS_Msk (0x1UL) /*!< RAM0_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ +/* ================================================== MEMCTRL_SYS_ARB_REG ================================================== */ + #define MEMCTRL_MEMCTRL_SYS_ARB_REG_APB_AHB_CPUS_PRIO_Pos (1UL) /*!< APB_AHB_CPUS_PRIO (Bit 1) */ + #define MEMCTRL_MEMCTRL_SYS_ARB_REG_APB_AHB_CPUS_PRIO_Msk (0x2UL) /*!< APB_AHB_CPUS_PRIO (Bitfield-Mask: 0x01) */ + #define MEMCTRL_MEMCTRL_SYS_ARB_REG_APB_AHB_DMA_PRIO_Pos (0UL) /*!< APB_AHB_DMA_PRIO (Bit 0) */ + #define MEMCTRL_MEMCTRL_SYS_ARB_REG_APB_AHB_DMA_PRIO_Msk (0x1UL) /*!< APB_AHB_DMA_PRIO (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ OQSPIF ================ */ +/* =========================================================================================================================== */ + +/* ================================================== OQSPIF_BURSTBRK_REG ================================================== */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_BRK_EN_Pos (23UL) /*!< OSPIC_BRK_EN (Bit 23) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_BRK_EN_Msk (0x800000UL) /*!< OSPIC_BRK_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_SEC_HF_DS_Pos (22UL) /*!< OSPIC_SEC_HF_DS (Bit 22) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_SEC_HF_DS_Msk (0x400000UL) /*!< OSPIC_SEC_HF_DS (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_BRK_TX_MD_Pos (20UL) /*!< OSPIC_BRK_TX_MD (Bit 20) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_BRK_TX_MD_Msk (0x300000UL) /*!< OSPIC_BRK_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_BRK_SZ_Pos (16UL) /*!< OSPIC_BRK_SZ (Bit 16) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_BRK_SZ_Msk (0xf0000UL) /*!< OSPIC_BRK_SZ (Bitfield-Mask: 0x0f) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_BRK_WRD_Pos (0UL) /*!< OSPIC_BRK_WRD (Bit 0) */ + #define OQSPIF_OQSPIF_BURSTBRK_REG_OSPIC_BRK_WRD_Msk (0xffffUL) /*!< OSPIC_BRK_WRD (Bitfield-Mask: 0xffff) */ +/* ================================================= OQSPIF_BURSTCMDA_REG ================================================== */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_DMY_TX_MD_Pos (30UL) /*!< OSPIC_DMY_TX_MD (Bit 30) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_DMY_TX_MD_Msk (0xc0000000UL) /*!< OSPIC_DMY_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_EXT_TX_MD_Pos (28UL) /*!< OSPIC_EXT_TX_MD (Bit 28) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_EXT_TX_MD_Msk (0x30000000UL) /*!< OSPIC_EXT_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_ADR_TX_MD_Pos (26UL) /*!< OSPIC_ADR_TX_MD (Bit 26) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_ADR_TX_MD_Msk (0xc000000UL) /*!< OSPIC_ADR_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_INST_TX_MD_Pos (24UL) /*!< OSPIC_INST_TX_MD (Bit 24) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_INST_TX_MD_Msk (0x3000000UL) /*!< OSPIC_INST_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_EXT_BYTE_Pos (16UL) /*!< OSPIC_EXT_BYTE (Bit 16) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_EXT_BYTE_Msk (0xff0000UL) /*!< OSPIC_EXT_BYTE (Bitfield-Mask: 0xff) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_INST_WB_Pos (8UL) /*!< OSPIC_INST_WB (Bit 8) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_INST_WB_Msk (0xff00UL) /*!< OSPIC_INST_WB (Bitfield-Mask: 0xff) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_INST_Pos (0UL) /*!< OSPIC_INST (Bit 0) */ + #define OQSPIF_OQSPIF_BURSTCMDA_REG_OSPIC_INST_Msk (0xffUL) /*!< OSPIC_INST (Bitfield-Mask: 0xff) */ +/* ================================================= OQSPIF_BURSTCMDB_REG ================================================== */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_CS_HIGH_MIN_Pos (16UL) /*!< OSPIC_CS_HIGH_MIN (Bit 16) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_CS_HIGH_MIN_Msk (0x70000UL) /*!< OSPIC_CS_HIGH_MIN (Bitfield-Mask: 0x07) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_WRAP_SIZE_Pos (14UL) /*!< OSPIC_WRAP_SIZE (Bit 14) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_WRAP_SIZE_Msk (0xc000UL) /*!< OSPIC_WRAP_SIZE (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_WRAP_LEN_Pos (12UL) /*!< OSPIC_WRAP_LEN (Bit 12) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_WRAP_LEN_Msk (0x3000UL) /*!< OSPIC_WRAP_LEN (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_WRAP_MD_Pos (11UL) /*!< OSPIC_WRAP_MD (Bit 11) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_WRAP_MD_Msk (0x800UL) /*!< OSPIC_WRAP_MD (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_INST_MD_Pos (10UL) /*!< OSPIC_INST_MD (Bit 10) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_INST_MD_Msk (0x400UL) /*!< OSPIC_INST_MD (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_DMY_EN_Pos (9UL) /*!< OSPIC_DMY_EN (Bit 9) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_DMY_EN_Msk (0x200UL) /*!< OSPIC_DMY_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_DMY_NUM_Pos (4UL) /*!< OSPIC_DMY_NUM (Bit 4) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_DMY_NUM_Msk (0x1f0UL) /*!< OSPIC_DMY_NUM (Bitfield-Mask: 0x1f) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_EXT_HF_DS_Pos (3UL) /*!< OSPIC_EXT_HF_DS (Bit 3) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_EXT_HF_DS_Msk (0x8UL) /*!< OSPIC_EXT_HF_DS (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_EXT_BYTE_EN_Pos (2UL) /*!< OSPIC_EXT_BYTE_EN (Bit 2) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_EXT_BYTE_EN_Msk (0x4UL) /*!< OSPIC_EXT_BYTE_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_DAT_RX_MD_Pos (0UL) /*!< OSPIC_DAT_RX_MD (Bit 0) */ + #define OQSPIF_OQSPIF_BURSTCMDB_REG_OSPIC_DAT_RX_MD_Msk (0x3UL) /*!< OSPIC_DAT_RX_MD (Bitfield-Mask: 0x03) */ +/* ================================================= OQSPIF_CHCKERASE_REG ================================================== */ + #define OQSPIF_OQSPIF_CHCKERASE_REG_OSPIC_CHCKERASE_Pos (0UL) /*!< OSPIC_CHCKERASE (Bit 0) */ + #define OQSPIF_OQSPIF_CHCKERASE_REG_OSPIC_CHCKERASE_Msk (0xffffffffUL) /*!< OSPIC_CHCKERASE (Bitfield-Mask: 0xffffffff) */ +/* ================================================== OQSPIF_CTRLBUS_REG =================================================== */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_DIS_CS_Pos (5UL) /*!< OSPIC_DIS_CS (Bit 5) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_DIS_CS_Msk (0x20UL) /*!< OSPIC_DIS_CS (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_EN_CS_Pos (4UL) /*!< OSPIC_EN_CS (Bit 4) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_EN_CS_Msk (0x10UL) /*!< OSPIC_EN_CS (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_SET_OCTAL_Pos (3UL) /*!< OSPIC_SET_OCTAL (Bit 3) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_SET_OCTAL_Msk (0x8UL) /*!< OSPIC_SET_OCTAL (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_SET_QUAD_Pos (2UL) /*!< OSPIC_SET_QUAD (Bit 2) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_SET_QUAD_Msk (0x4UL) /*!< OSPIC_SET_QUAD (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_SET_DUAL_Pos (1UL) /*!< OSPIC_SET_DUAL (Bit 1) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_SET_DUAL_Msk (0x2UL) /*!< OSPIC_SET_DUAL (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_SET_SINGLE_Pos (0UL) /*!< OSPIC_SET_SINGLE (Bit 0) */ + #define OQSPIF_OQSPIF_CTRLBUS_REG_OSPIC_SET_SINGLE_Msk (0x1UL) /*!< OSPIC_SET_SINGLE (Bitfield-Mask: 0x01) */ +/* ================================================== OQSPIF_CTRLMODE_REG ================================================== */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO_UH_DAT_Pos (28UL) /*!< OSPIC_IO_UH_DAT (Bit 28) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO_UH_DAT_Msk (0xf0000000UL) /*!< OSPIC_IO_UH_DAT (Bitfield-Mask: 0x0f) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO_UH_OEN_Pos (27UL) /*!< OSPIC_IO_UH_OEN (Bit 27) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO_UH_OEN_Msk (0x8000000UL) /*!< OSPIC_IO_UH_OEN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_INC_LIM_EN_Pos (18UL) /*!< OSPIC_INC_LIM_EN (Bit 18) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_INC_LIM_EN_Msk (0x40000UL) /*!< OSPIC_INC_LIM_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_RD_ERR_EN_Pos (17UL) /*!< OSPIC_RD_ERR_EN (Bit 17) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_RD_ERR_EN_Msk (0x20000UL) /*!< OSPIC_RD_ERR_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_MAN_DIRCHG_MD_Pos (16UL) /*!< OSPIC_MAN_DIRCHG_MD (Bit 16) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_MAN_DIRCHG_MD_Msk (0x10000UL) /*!< OSPIC_MAN_DIRCHG_MD (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_DMY_MD_Pos (15UL) /*!< OSPIC_DMY_MD (Bit 15) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_DMY_MD_Msk (0x8000UL) /*!< OSPIC_DMY_MD (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_CMD_X2_EN_Pos (14UL) /*!< OSPIC_CMD_X2_EN (Bit 14) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_CMD_X2_EN_Msk (0x4000UL) /*!< OSPIC_CMD_X2_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_USE_32BA_Pos (13UL) /*!< OSPIC_USE_32BA (Bit 13) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_USE_32BA_Msk (0x2000UL) /*!< OSPIC_USE_32BA (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_BUF_LIM_EN_Pos (12UL) /*!< OSPIC_BUF_LIM_EN (Bit 12) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_BUF_LIM_EN_Msk (0x1000UL) /*!< OSPIC_BUF_LIM_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_PCLK_MD_Pos (9UL) /*!< OSPIC_PCLK_MD (Bit 9) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_PCLK_MD_Msk (0xe00UL) /*!< OSPIC_PCLK_MD (Bitfield-Mask: 0x07) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_RPIPE_EN_Pos (8UL) /*!< OSPIC_RPIPE_EN (Bit 8) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_RPIPE_EN_Msk (0x100UL) /*!< OSPIC_RPIPE_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_RXD_NEG_Pos (7UL) /*!< OSPIC_RXD_NEG (Bit 7) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_RXD_NEG_Msk (0x80UL) /*!< OSPIC_RXD_NEG (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_HRDY_MD_Pos (6UL) /*!< OSPIC_HRDY_MD (Bit 6) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_HRDY_MD_Msk (0x40UL) /*!< OSPIC_HRDY_MD (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO3_DAT_Pos (5UL) /*!< OSPIC_IO3_DAT (Bit 5) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO3_DAT_Msk (0x20UL) /*!< OSPIC_IO3_DAT (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO2_DAT_Pos (4UL) /*!< OSPIC_IO2_DAT (Bit 4) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO2_DAT_Msk (0x10UL) /*!< OSPIC_IO2_DAT (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO3_OEN_Pos (3UL) /*!< OSPIC_IO3_OEN (Bit 3) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO3_OEN_Msk (0x8UL) /*!< OSPIC_IO3_OEN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO2_OEN_Pos (2UL) /*!< OSPIC_IO2_OEN (Bit 2) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_IO2_OEN_Msk (0x4UL) /*!< OSPIC_IO2_OEN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_CLK_MD_Pos (1UL) /*!< OSPIC_CLK_MD (Bit 1) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_CLK_MD_Msk (0x2UL) /*!< OSPIC_CLK_MD (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_AUTO_MD_Pos (0UL) /*!< OSPIC_AUTO_MD (Bit 0) */ + #define OQSPIF_OQSPIF_CTRLMODE_REG_OSPIC_AUTO_MD_Msk (0x1UL) /*!< OSPIC_AUTO_MD (Bitfield-Mask: 0x01) */ +/* ================================================== OQSPIF_CTR_CTRL_REG ================================================== */ + #define OQSPIF_OQSPIF_CTR_CTRL_REG_OSPIC_CTR_EN_Pos (0UL) /*!< OSPIC_CTR_EN (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_CTRL_REG_OSPIC_CTR_EN_Msk (0x1UL) /*!< OSPIC_CTR_EN (Bitfield-Mask: 0x01) */ +/* ================================================= OQSPIF_CTR_EADDR_REG ================================================== */ + #define OQSPIF_OQSPIF_CTR_EADDR_REG_OSPIC_CTR_EADDR_Pos (10UL) /*!< OSPIC_CTR_EADDR (Bit 10) */ + #define OQSPIF_OQSPIF_CTR_EADDR_REG_OSPIC_CTR_EADDR_Msk (0xfffffc00UL) /*!< OSPIC_CTR_EADDR (Bitfield-Mask: 0x3fffff) */ +/* ================================================ OQSPIF_CTR_KEY_0_3_REG ================================================= */ + #define OQSPIF_OQSPIF_CTR_KEY_0_3_REG_OSPIC_CTR_KEY_0_3_Pos (0UL) /*!< OSPIC_CTR_KEY_0_3 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_KEY_0_3_REG_OSPIC_CTR_KEY_0_3_Msk (0xffffffffUL) /*!< OSPIC_CTR_KEY_0_3 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== OQSPIF_CTR_KEY_12_15_REG ================================================ */ + #define OQSPIF_OQSPIF_CTR_KEY_12_15_REG_OSPIC_CTR_KEY_12_15_Pos (0UL) /*!< OSPIC_CTR_KEY_12_15 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_KEY_12_15_REG_OSPIC_CTR_KEY_12_15_Msk (0xffffffffUL) /*!< OSPIC_CTR_KEY_12_15 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== OQSPIF_CTR_KEY_16_19_REG ================================================ */ + #define OQSPIF_OQSPIF_CTR_KEY_16_19_REG_OSPIC_CTR_KEY_16_19_Pos (0UL) /*!< OSPIC_CTR_KEY_16_19 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_KEY_16_19_REG_OSPIC_CTR_KEY_16_19_Msk (0xffffffffUL) /*!< OSPIC_CTR_KEY_16_19 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== OQSPIF_CTR_KEY_20_23_REG ================================================ */ + #define OQSPIF_OQSPIF_CTR_KEY_20_23_REG_OSPIC_CTR_KEY_20_23_Pos (0UL) /*!< OSPIC_CTR_KEY_20_23 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_KEY_20_23_REG_OSPIC_CTR_KEY_20_23_Msk (0xffffffffUL) /*!< OSPIC_CTR_KEY_20_23 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== OQSPIF_CTR_KEY_24_27_REG ================================================ */ + #define OQSPIF_OQSPIF_CTR_KEY_24_27_REG_OSPIC_CTR_KEY_24_27_Pos (0UL) /*!< OSPIC_CTR_KEY_24_27 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_KEY_24_27_REG_OSPIC_CTR_KEY_24_27_Msk (0xffffffffUL) /*!< OSPIC_CTR_KEY_24_27 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== OQSPIF_CTR_KEY_28_31_REG ================================================ */ + #define OQSPIF_OQSPIF_CTR_KEY_28_31_REG_OSPIC_CTR_KEY_28_31_Pos (0UL) /*!< OSPIC_CTR_KEY_28_31 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_KEY_28_31_REG_OSPIC_CTR_KEY_28_31_Msk (0xffffffffUL) /*!< OSPIC_CTR_KEY_28_31 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ OQSPIF_CTR_KEY_4_7_REG ================================================= */ + #define OQSPIF_OQSPIF_CTR_KEY_4_7_REG_OSPIC_CTR_KEY_4_7_Pos (0UL) /*!< OSPIC_CTR_KEY_4_7 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_KEY_4_7_REG_OSPIC_CTR_KEY_4_7_Msk (0xffffffffUL) /*!< OSPIC_CTR_KEY_4_7 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ OQSPIF_CTR_KEY_8_11_REG ================================================ */ + #define OQSPIF_OQSPIF_CTR_KEY_8_11_REG_OSPIC_CTR_KEY_8_11_Pos (0UL) /*!< OSPIC_CTR_KEY_8_11 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_KEY_8_11_REG_OSPIC_CTR_KEY_8_11_Msk (0xffffffffUL) /*!< OSPIC_CTR_KEY_8_11 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== OQSPIF_CTR_NONCE_0_3_REG ================================================ */ + #define OQSPIF_OQSPIF_CTR_NONCE_0_3_REG_OSPIC_CTR_NONCE_0_3_Pos (0UL) /*!< OSPIC_CTR_NONCE_0_3 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_NONCE_0_3_REG_OSPIC_CTR_NONCE_0_3_Msk (0xffffffffUL) /*!< OSPIC_CTR_NONCE_0_3 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== OQSPIF_CTR_NONCE_4_7_REG ================================================ */ + #define OQSPIF_OQSPIF_CTR_NONCE_4_7_REG_OSPIC_CTR_NONCE_4_7_Pos (0UL) /*!< OSPIC_CTR_NONCE_4_7 (Bit 0) */ + #define OQSPIF_OQSPIF_CTR_NONCE_4_7_REG_OSPIC_CTR_NONCE_4_7_Msk (0xffffffffUL) /*!< OSPIC_CTR_NONCE_4_7 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= OQSPIF_CTR_SADDR_REG ================================================== */ + #define OQSPIF_OQSPIF_CTR_SADDR_REG_OSPIC_CTR_SADDR_Pos (10UL) /*!< OSPIC_CTR_SADDR (Bit 10) */ + #define OQSPIF_OQSPIF_CTR_SADDR_REG_OSPIC_CTR_SADDR_Msk (0xfffffc00UL) /*!< OSPIC_CTR_SADDR (Bitfield-Mask: 0x3fffff) */ +/* ================================================= OQSPIF_DUMMYDATA_REG ================================================== */ + #define OQSPIF_OQSPIF_DUMMYDATA_REG_OSPIC_DUMMYDATA_Pos (0UL) /*!< OSPIC_DUMMYDATA (Bit 0) */ + #define OQSPIF_OQSPIF_DUMMYDATA_REG_OSPIC_DUMMYDATA_Msk (0xffffffffUL) /*!< OSPIC_DUMMYDATA (Bitfield-Mask: 0xffffffff) */ +/* ================================================= OQSPIF_ERASECMDA_REG ================================================== */ + #define OQSPIF_OQSPIF_ERASECMDA_REG_OSPIC_RES_INST_Pos (24UL) /*!< OSPIC_RES_INST (Bit 24) */ + #define OQSPIF_OQSPIF_ERASECMDA_REG_OSPIC_RES_INST_Msk (0xff000000UL) /*!< OSPIC_RES_INST (Bitfield-Mask: 0xff) */ + #define OQSPIF_OQSPIF_ERASECMDA_REG_OSPIC_SUS_INST_Pos (16UL) /*!< OSPIC_SUS_INST (Bit 16) */ + #define OQSPIF_OQSPIF_ERASECMDA_REG_OSPIC_SUS_INST_Msk (0xff0000UL) /*!< OSPIC_SUS_INST (Bitfield-Mask: 0xff) */ + #define OQSPIF_OQSPIF_ERASECMDA_REG_OSPIC_WEN_INST_Pos (8UL) /*!< OSPIC_WEN_INST (Bit 8) */ + #define OQSPIF_OQSPIF_ERASECMDA_REG_OSPIC_WEN_INST_Msk (0xff00UL) /*!< OSPIC_WEN_INST (Bitfield-Mask: 0xff) */ + #define OQSPIF_OQSPIF_ERASECMDA_REG_OSPIC_ERS_INST_Pos (0UL) /*!< OSPIC_ERS_INST (Bit 0) */ + #define OQSPIF_OQSPIF_ERASECMDA_REG_OSPIC_ERS_INST_Msk (0xffUL) /*!< OSPIC_ERS_INST (Bitfield-Mask: 0xff) */ +/* ================================================= OQSPIF_ERASECMDB_REG ================================================== */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_RESSUS_DLY_Pos (24UL) /*!< OSPIC_RESSUS_DLY (Bit 24) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_RESSUS_DLY_Msk (0xff000000UL) /*!< OSPIC_RESSUS_DLY (Bitfield-Mask: 0xff) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_ERSRES_HLD_Pos (16UL) /*!< OSPIC_ERSRES_HLD (Bit 16) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_ERSRES_HLD_Msk (0xf0000UL) /*!< OSPIC_ERSRES_HLD (Bitfield-Mask: 0x0f) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_ERS_CS_HI_Pos (10UL) /*!< OSPIC_ERS_CS_HI (Bit 10) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_ERS_CS_HI_Msk (0x7c00UL) /*!< OSPIC_ERS_CS_HI (Bitfield-Mask: 0x1f) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_EAD_TX_MD_Pos (8UL) /*!< OSPIC_EAD_TX_MD (Bit 8) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_EAD_TX_MD_Msk (0x300UL) /*!< OSPIC_EAD_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_RES_TX_MD_Pos (6UL) /*!< OSPIC_RES_TX_MD (Bit 6) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_RES_TX_MD_Msk (0xc0UL) /*!< OSPIC_RES_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_SUS_TX_MD_Pos (4UL) /*!< OSPIC_SUS_TX_MD (Bit 4) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_SUS_TX_MD_Msk (0x30UL) /*!< OSPIC_SUS_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_WEN_TX_MD_Pos (2UL) /*!< OSPIC_WEN_TX_MD (Bit 2) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_WEN_TX_MD_Msk (0xcUL) /*!< OSPIC_WEN_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_ERS_TX_MD_Pos (0UL) /*!< OSPIC_ERS_TX_MD (Bit 0) */ + #define OQSPIF_OQSPIF_ERASECMDB_REG_OSPIC_ERS_TX_MD_Msk (0x3UL) /*!< OSPIC_ERS_TX_MD (Bitfield-Mask: 0x03) */ +/* ================================================= OQSPIF_ERASECMDC_REG ================================================== */ + #define OQSPIF_OQSPIF_ERASECMDC_REG_OSPIC_SUSSTS_DLY_Pos (0UL) /*!< OSPIC_SUSSTS_DLY (Bit 0) */ + #define OQSPIF_OQSPIF_ERASECMDC_REG_OSPIC_SUSSTS_DLY_Msk (0x3fUL) /*!< OSPIC_SUSSTS_DLY (Bitfield-Mask: 0x3f) */ +/* ================================================= OQSPIF_ERASECTRL_REG ================================================== */ + #define OQSPIF_OQSPIF_ERASECTRL_REG_OSPIC_ERS_RES_DIS_Pos (28UL) /*!< OSPIC_ERS_RES_DIS (Bit 28) */ + #define OQSPIF_OQSPIF_ERASECTRL_REG_OSPIC_ERS_RES_DIS_Msk (0x10000000UL) /*!< OSPIC_ERS_RES_DIS (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_ERASECTRL_REG_OSPIC_ERS_STATE_Pos (25UL) /*!< OSPIC_ERS_STATE (Bit 25) */ + #define OQSPIF_OQSPIF_ERASECTRL_REG_OSPIC_ERS_STATE_Msk (0xe000000UL) /*!< OSPIC_ERS_STATE (Bitfield-Mask: 0x07) */ + #define OQSPIF_OQSPIF_ERASECTRL_REG_OSPIC_ERASE_EN_Pos (24UL) /*!< OSPIC_ERASE_EN (Bit 24) */ + #define OQSPIF_OQSPIF_ERASECTRL_REG_OSPIC_ERASE_EN_Msk (0x1000000UL) /*!< OSPIC_ERASE_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_ERASECTRL_REG_OSPIC_ERS_ADDR_Pos (4UL) /*!< OSPIC_ERS_ADDR (Bit 4) */ + #define OQSPIF_OQSPIF_ERASECTRL_REG_OSPIC_ERS_ADDR_Msk (0xfffff0UL) /*!< OSPIC_ERS_ADDR (Bitfield-Mask: 0xfffff) */ +/* ===================================================== OQSPIF_GP_REG ===================================================== */ + #define OQSPIF_OQSPIF_GP_REG_OSPIC_PADS_SLEW_Pos (3UL) /*!< OSPIC_PADS_SLEW (Bit 3) */ + #define OQSPIF_OQSPIF_GP_REG_OSPIC_PADS_SLEW_Msk (0x18UL) /*!< OSPIC_PADS_SLEW (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_GP_REG_OSPIC_PADS_DRV_Pos (1UL) /*!< OSPIC_PADS_DRV (Bit 1) */ + #define OQSPIF_OQSPIF_GP_REG_OSPIC_PADS_DRV_Msk (0x6UL) /*!< OSPIC_PADS_DRV (Bitfield-Mask: 0x03) */ +/* ================================================== OQSPIF_READDATA_REG ================================================== */ + #define OQSPIF_OQSPIF_READDATA_REG_OSPIC_READDATA_Pos (0UL) /*!< OSPIC_READDATA (Bit 0) */ + #define OQSPIF_OQSPIF_READDATA_REG_OSPIC_READDATA_Msk (0xffffffffUL) /*!< OSPIC_READDATA (Bitfield-Mask: 0xffffffff) */ +/* ================================================== OQSPIF_RECVDATA_REG ================================================== */ + #define OQSPIF_OQSPIF_RECVDATA_REG_OSPIC_RECVDATA_Pos (0UL) /*!< OSPIC_RECVDATA (Bit 0) */ + #define OQSPIF_OQSPIF_RECVDATA_REG_OSPIC_RECVDATA_Msk (0xffffffffUL) /*!< OSPIC_RECVDATA (Bitfield-Mask: 0xffffffff) */ +/* ================================================= OQSPIF_STATUSCMD_REG ================================================== */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_DMY_ZERO_Pos (30UL) /*!< OSPIC_RSTAT_DMY_ZERO (Bit 30) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_DMY_ZERO_Msk (0x40000000UL) /*!< OSPIC_RSTAT_DMY_ZERO (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_DMY_TX_MD_Pos (28UL) /*!< OSPIC_RSTAT_DMY_TX_MD (Bit 28) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_DMY_TX_MD_Msk (0x30000000UL) /*!< OSPIC_RSTAT_DMY_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_DMY_NUM_Pos (24UL) /*!< OSPIC_RSTAT_DMY_NUM (Bit 24) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_DMY_NUM_Msk (0xf000000UL) /*!< OSPIC_RSTAT_DMY_NUM (Bitfield-Mask: 0x0f) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_DMY_EN_Pos (23UL) /*!< OSPIC_RSTAT_DMY_EN (Bit 23) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_DMY_EN_Msk (0x800000UL) /*!< OSPIC_RSTAT_DMY_EN (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_STSDLY_SEL_Pos (22UL) /*!< OSPIC_STSDLY_SEL (Bit 22) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_STSDLY_SEL_Msk (0x400000UL) /*!< OSPIC_STSDLY_SEL (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RESSTS_DLY_Pos (16UL) /*!< OSPIC_RESSTS_DLY (Bit 16) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RESSTS_DLY_Msk (0x3f0000UL) /*!< OSPIC_RESSTS_DLY (Bitfield-Mask: 0x3f) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_BUSY_VAL_Pos (15UL) /*!< OSPIC_BUSY_VAL (Bit 15) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_BUSY_VAL_Msk (0x8000UL) /*!< OSPIC_BUSY_VAL (Bitfield-Mask: 0x01) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_BUSY_POS_Pos (12UL) /*!< OSPIC_BUSY_POS (Bit 12) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_BUSY_POS_Msk (0x7000UL) /*!< OSPIC_BUSY_POS (Bitfield-Mask: 0x07) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_RX_MD_Pos (10UL) /*!< OSPIC_RSTAT_RX_MD (Bit 10) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_RX_MD_Msk (0xc00UL) /*!< OSPIC_RSTAT_RX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_TX_MD_Pos (8UL) /*!< OSPIC_RSTAT_TX_MD (Bit 8) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_TX_MD_Msk (0x300UL) /*!< OSPIC_RSTAT_TX_MD (Bitfield-Mask: 0x03) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_INST_Pos (0UL) /*!< OSPIC_RSTAT_INST (Bit 0) */ + #define OQSPIF_OQSPIF_STATUSCMD_REG_OSPIC_RSTAT_INST_Msk (0xffUL) /*!< OSPIC_RSTAT_INST (Bitfield-Mask: 0xff) */ +/* =================================================== OQSPIF_STATUS_REG =================================================== */ + #define OQSPIF_OQSPIF_STATUS_REG_OSPIC_BUSY_Pos (0UL) /*!< OSPIC_BUSY (Bit 0) */ + #define OQSPIF_OQSPIF_STATUS_REG_OSPIC_BUSY_Msk (0x1UL) /*!< OSPIC_BUSY (Bitfield-Mask: 0x01) */ +/* ================================================= OQSPIF_WRITEDATA_REG ================================================== */ + #define OQSPIF_OQSPIF_WRITEDATA_REG_OSPIC_WRITEDATA_Pos (0UL) /*!< OSPIC_WRITEDATA (Bit 0) */ + #define OQSPIF_OQSPIF_WRITEDATA_REG_OSPIC_WRITEDATA_Msk (0xffffffffUL) /*!< OSPIC_WRITEDATA (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ OTPC ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== OTPC_MODE_REG ===================================================== */ + #define OTPC_OTPC_MODE_REG_OTPC_MODE_PRG_SEL_Pos (6UL) /*!< OTPC_MODE_PRG_SEL (Bit 6) */ + #define OTPC_OTPC_MODE_REG_OTPC_MODE_PRG_SEL_Msk (0xc0UL) /*!< OTPC_MODE_PRG_SEL (Bitfield-Mask: 0x03) */ + #define OTPC_OTPC_MODE_REG_OTPC_MODE_USE_TST_ROW_Pos (4UL) /*!< OTPC_MODE_USE_TST_ROW (Bit 4) */ + #define OTPC_OTPC_MODE_REG_OTPC_MODE_USE_TST_ROW_Msk (0x10UL) /*!< OTPC_MODE_USE_TST_ROW (Bitfield-Mask: 0x01) */ + #define OTPC_OTPC_MODE_REG_OTPC_MODE_MODE_Pos (0UL) /*!< OTPC_MODE_MODE (Bit 0) */ + #define OTPC_OTPC_MODE_REG_OTPC_MODE_MODE_Msk (0x7UL) /*!< OTPC_MODE_MODE (Bitfield-Mask: 0x07) */ +/* ===================================================== OTPC_STAT_REG ===================================================== */ + #define OTPC_OTPC_STAT_REG_OTPC_STAT_MRDY_Pos (2UL) /*!< OTPC_STAT_MRDY (Bit 2) */ + #define OTPC_OTPC_STAT_REG_OTPC_STAT_MRDY_Msk (0x4UL) /*!< OTPC_STAT_MRDY (Bitfield-Mask: 0x01) */ + #define OTPC_OTPC_STAT_REG_OTPC_STAT_PBUF_EMPTY_Pos (1UL) /*!< OTPC_STAT_PBUF_EMPTY (Bit 1) */ + #define OTPC_OTPC_STAT_REG_OTPC_STAT_PBUF_EMPTY_Msk (0x2UL) /*!< OTPC_STAT_PBUF_EMPTY (Bitfield-Mask: 0x01) */ + #define OTPC_OTPC_STAT_REG_OTPC_STAT_PRDY_Pos (0UL) /*!< OTPC_STAT_PRDY (Bit 0) */ + #define OTPC_OTPC_STAT_REG_OTPC_STAT_PRDY_Msk (0x1UL) /*!< OTPC_STAT_PRDY (Bitfield-Mask: 0x01) */ +/* ================================================== OTPC_TEST_PWORD_REG ================================================== */ + #define OTPC_OTPC_TEST_PWORD_REG_OTPC_TEST_PWORD_Pos (0UL) /*!< OTPC_TEST_PWORD (Bit 0) */ + #define OTPC_OTPC_TEST_PWORD_REG_OTPC_TEST_PWORD_Msk (0xffffffffUL) /*!< OTPC_TEST_PWORD (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== OTPC_TEST_REG ===================================================== */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_MAN_Pos (31UL) /*!< OTPC_TEST_ECC_MAN (Bit 31) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_MAN_Msk (0x80000000UL) /*!< OTPC_TEST_ECC_MAN (Bitfield-Mask: 0x01) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_ERR_Pos (24UL) /*!< OTPC_TEST_ECC_ERR (Bit 24) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_ERR_Msk (0x1000000UL) /*!< OTPC_TEST_ECC_ERR (Bitfield-Mask: 0x01) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_OUT_Pos (16UL) /*!< OTPC_TEST_ECC_OUT (Bit 16) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_OUT_Msk (0x3f0000UL) /*!< OTPC_TEST_ECC_OUT (Bitfield-Mask: 0x3f) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_IN_Pos (8UL) /*!< OTPC_TEST_ECC_IN (Bit 8) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_IN_Msk (0x3f00UL) /*!< OTPC_TEST_ECC_IN (Bitfield-Mask: 0x3f) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_EN_DE_Pos (2UL) /*!< OTPC_TEST_ECC_EN_DE (Bit 2) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_ECC_EN_DE_Msk (0x4UL) /*!< OTPC_TEST_ECC_EN_DE (Bitfield-Mask: 0x01) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_MODE_Pos (0UL) /*!< OTPC_TEST_MODE (Bit 0) */ + #define OTPC_OTPC_TEST_REG_OTPC_TEST_MODE_Msk (0x3UL) /*!< OTPC_TEST_MODE (Bitfield-Mask: 0x03) */ +/* ===================================================== OTPC_TIM1_REG ===================================================== */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_CSP_Pos (24UL) /*!< OTPC_TIM1_US_T_CSP (Bit 24) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_CSP_Msk (0x7f000000UL) /*!< OTPC_TIM1_US_T_CSP (Bitfield-Mask: 0x7f) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_CS_Pos (20UL) /*!< OTPC_TIM1_US_T_CS (Bit 20) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_CS_Msk (0xf00000UL) /*!< OTPC_TIM1_US_T_CS (Bitfield-Mask: 0x0f) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_PL_Pos (16UL) /*!< OTPC_TIM1_US_T_PL (Bit 16) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_PL_Msk (0xf0000UL) /*!< OTPC_TIM1_US_T_PL (Bitfield-Mask: 0x0f) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_RD_Pos (12UL) /*!< OTPC_TIM1_CC_T_RD (Bit 12) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_RD_Msk (0xf000UL) /*!< OTPC_TIM1_CC_T_RD (Bitfield-Mask: 0x0f) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_20NS_Pos (8UL) /*!< OTPC_TIM1_CC_T_20NS (Bit 8) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_20NS_Msk (0x700UL) /*!< OTPC_TIM1_CC_T_20NS (Bitfield-Mask: 0x07) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_1US_Pos (0UL) /*!< OTPC_TIM1_CC_T_1US (Bit 0) */ + #define OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_1US_Msk (0xffUL) /*!< OTPC_TIM1_CC_T_1US (Bitfield-Mask: 0xff) */ +/* ===================================================== OTPC_TIM2_REG ===================================================== */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_ADD_CC_EN_Pos (31UL) /*!< OTPC_TIM2_US_ADD_CC_EN (Bit 31) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_ADD_CC_EN_Msk (0x80000000UL) /*!< OTPC_TIM2_US_ADD_CC_EN (Bitfield-Mask: 0x01) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_SAS_Pos (29UL) /*!< OTPC_TIM2_US_T_SAS (Bit 29) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_SAS_Msk (0x60000000UL) /*!< OTPC_TIM2_US_T_SAS (Bitfield-Mask: 0x03) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PPH_Pos (24UL) /*!< OTPC_TIM2_US_T_PPH (Bit 24) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PPH_Msk (0x1f000000UL) /*!< OTPC_TIM2_US_T_PPH (Bitfield-Mask: 0x1f) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_VDS_Pos (21UL) /*!< OTPC_TIM2_US_T_VDS (Bit 21) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_VDS_Msk (0xe00000UL) /*!< OTPC_TIM2_US_T_VDS (Bitfield-Mask: 0x07) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PPS_Pos (16UL) /*!< OTPC_TIM2_US_T_PPS (Bit 16) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PPS_Msk (0x1f0000UL) /*!< OTPC_TIM2_US_T_PPS (Bitfield-Mask: 0x1f) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PPR_Pos (8UL) /*!< OTPC_TIM2_US_T_PPR (Bit 8) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PPR_Msk (0x7f00UL) /*!< OTPC_TIM2_US_T_PPR (Bitfield-Mask: 0x7f) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PWI_Pos (5UL) /*!< OTPC_TIM2_US_T_PWI (Bit 5) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PWI_Msk (0xe0UL) /*!< OTPC_TIM2_US_T_PWI (Bitfield-Mask: 0x07) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PW_Pos (0UL) /*!< OTPC_TIM2_US_T_PW (Bit 0) */ + #define OTPC_OTPC_TIM2_REG_OTPC_TIM2_US_T_PW_Msk (0x1fUL) /*!< OTPC_TIM2_US_T_PW (Bitfield-Mask: 0x1f) */ + +/* =========================================================================================================================== */ +/* ================ PSK ================ */ +/* =========================================================================================================================== */ + +/* =================================================== PSK_SHA1_CTRL_REG =================================================== */ + #define PSK_PSK_SHA1_CTRL_REG_PSK_SHA1_Iteration_Pos (16UL) /*!< PSK_SHA1_Iteration (Bit 16) */ + #define PSK_PSK_SHA1_CTRL_REG_PSK_SHA1_Iteration_Msk (0xffff0000UL) /*!< PSK_SHA1_Iteration (Bitfield-Mask: 0xffff) */ + #define PSK_PSK_SHA1_CTRL_REG_PSK_SHA1_Start_Pos (1UL) /*!< PSK_SHA1_Start (Bit 1) */ + #define PSK_PSK_SHA1_CTRL_REG_PSK_SHA1_Start_Msk (0x2UL) /*!< PSK_SHA1_Start (Bitfield-Mask: 0x01) */ + #define PSK_PSK_SHA1_CTRL_REG_PSK_SHA1_Enable_Pos (0UL) /*!< PSK_SHA1_Enable (Bit 0) */ + #define PSK_PSK_SHA1_CTRL_REG_PSK_SHA1_Enable_Msk (0x1UL) /*!< PSK_SHA1_Enable (Bitfield-Mask: 0x01) */ +/* ================================================== PSK_SHA1_DATA_0_REG ================================================== */ + #define PSK_PSK_SHA1_DATA_0_REG_PSK_SHA1_DATA_0_Pos (0UL) /*!< PSK_SHA1_DATA_0 (Bit 0) */ + #define PSK_PSK_SHA1_DATA_0_REG_PSK_SHA1_DATA_0_Msk (0xffffffffUL) /*!< PSK_SHA1_DATA_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_DATA_1_REG ================================================== */ + #define PSK_PSK_SHA1_DATA_1_REG_PSK_SHA1_DATA_1_Pos (0UL) /*!< PSK_SHA1_DATA_1 (Bit 0) */ + #define PSK_PSK_SHA1_DATA_1_REG_PSK_SHA1_DATA_1_Msk (0xffffffffUL) /*!< PSK_SHA1_DATA_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_DATA_2_REG ================================================== */ + #define PSK_PSK_SHA1_DATA_2_REG_PSK_SHA1_DATA_2_Pos (0UL) /*!< PSK_SHA1_DATA_2 (Bit 0) */ + #define PSK_PSK_SHA1_DATA_2_REG_PSK_SHA1_DATA_2_Msk (0xffffffffUL) /*!< PSK_SHA1_DATA_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_DATA_3_REG ================================================== */ + #define PSK_PSK_SHA1_DATA_3_REG_PSK_SHA1_DATA_3_Pos (0UL) /*!< PSK_SHA1_DATA_3 (Bit 0) */ + #define PSK_PSK_SHA1_DATA_3_REG_PSK_SHA1_DATA_3_Msk (0xffffffffUL) /*!< PSK_SHA1_DATA_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_DATA_4_REG ================================================== */ + #define PSK_PSK_SHA1_DATA_4_REG_PSK_SHA1_DATA_4_Pos (0UL) /*!< PSK_SHA1_DATA_4 (Bit 0) */ + #define PSK_PSK_SHA1_DATA_4_REG_PSK_SHA1_DATA_4_Msk (0xffffffffUL) /*!< PSK_SHA1_DATA_4 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= PSK_SHA1_DIGEST_0_REG ================================================= */ + #define PSK_PSK_SHA1_DIGEST_0_REG_PSK_SHA1_DIGEST_0_Pos (0UL) /*!< PSK_SHA1_DIGEST_0 (Bit 0) */ + #define PSK_PSK_SHA1_DIGEST_0_REG_PSK_SHA1_DIGEST_0_Msk (0xffffffffUL) /*!< PSK_SHA1_DIGEST_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= PSK_SHA1_DIGEST_1_REG ================================================= */ + #define PSK_PSK_SHA1_DIGEST_1_REG_PSK_SHA1_DIGEST_1_Pos (0UL) /*!< PSK_SHA1_DIGEST_1 (Bit 0) */ + #define PSK_PSK_SHA1_DIGEST_1_REG_PSK_SHA1_DIGEST_1_Msk (0xffffffffUL) /*!< PSK_SHA1_DIGEST_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= PSK_SHA1_DIGEST_2_REG ================================================= */ + #define PSK_PSK_SHA1_DIGEST_2_REG_PSK_SHA1_DIGEST_2_Pos (0UL) /*!< PSK_SHA1_DIGEST_2 (Bit 0) */ + #define PSK_PSK_SHA1_DIGEST_2_REG_PSK_SHA1_DIGEST_2_Msk (0xffffffffUL) /*!< PSK_SHA1_DIGEST_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= PSK_SHA1_DIGEST_3_REG ================================================= */ + #define PSK_PSK_SHA1_DIGEST_3_REG_PSK_SHA1_DIGEST_3_Pos (0UL) /*!< PSK_SHA1_DIGEST_3 (Bit 0) */ + #define PSK_PSK_SHA1_DIGEST_3_REG_PSK_SHA1_DIGEST_3_Msk (0xffffffffUL) /*!< PSK_SHA1_DIGEST_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= PSK_SHA1_DIGEST_4_REG ================================================= */ + #define PSK_PSK_SHA1_DIGEST_4_REG_PSK_SHA1_DIGEST_4_Pos (0UL) /*!< PSK_SHA1_DIGEST_4 (Bit 0) */ + #define PSK_PSK_SHA1_DIGEST_4_REG_PSK_SHA1_DIGEST_4_Msk (0xffffffffUL) /*!< PSK_SHA1_DIGEST_4 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV1_0_REG ================================================== */ + #define PSK_PSK_SHA1_IHV1_0_REG_PSK_SHA1_IHV1_0_Pos (0UL) /*!< PSK_SHA1_IHV1_0 (Bit 0) */ + #define PSK_PSK_SHA1_IHV1_0_REG_PSK_SHA1_IHV1_0_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV1_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV1_1_REG ================================================== */ + #define PSK_PSK_SHA1_IHV1_1_REG_PSK_SHA1_IHV1_1_Pos (0UL) /*!< PSK_SHA1_IHV1_1 (Bit 0) */ + #define PSK_PSK_SHA1_IHV1_1_REG_PSK_SHA1_IHV1_1_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV1_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV1_2_REG ================================================== */ + #define PSK_PSK_SHA1_IHV1_2_REG_PSK_SHA1_IHV1_2_Pos (0UL) /*!< PSK_SHA1_IHV1_2 (Bit 0) */ + #define PSK_PSK_SHA1_IHV1_2_REG_PSK_SHA1_IHV1_2_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV1_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV1_3_REG ================================================== */ + #define PSK_PSK_SHA1_IHV1_3_REG_PSK_SHA1_IHV1_3_Pos (0UL) /*!< PSK_SHA1_IHV1_3 (Bit 0) */ + #define PSK_PSK_SHA1_IHV1_3_REG_PSK_SHA1_IHV1_3_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV1_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV1_4_REG ================================================== */ + #define PSK_PSK_SHA1_IHV1_4_REG_PSK_SHA1_IHV1_4_Pos (0UL) /*!< PSK_SHA1_IHV1_4 (Bit 0) */ + #define PSK_PSK_SHA1_IHV1_4_REG_PSK_SHA1_IHV1_4_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV1_4 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV2_0_REG ================================================== */ + #define PSK_PSK_SHA1_IHV2_0_REG_PSK_SHA1_IHV2_0_Pos (0UL) /*!< PSK_SHA1_IHV2_0 (Bit 0) */ + #define PSK_PSK_SHA1_IHV2_0_REG_PSK_SHA1_IHV2_0_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV2_0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV2_1_REG ================================================== */ + #define PSK_PSK_SHA1_IHV2_1_REG_PSK_SHA1_IHV2_1_Pos (0UL) /*!< PSK_SHA1_IHV2_1 (Bit 0) */ + #define PSK_PSK_SHA1_IHV2_1_REG_PSK_SHA1_IHV2_1_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV2_1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV2_2_REG ================================================== */ + #define PSK_PSK_SHA1_IHV2_2_REG_PSK_SHA1_IHV2_2_Pos (0UL) /*!< PSK_SHA1_IHV2_2 (Bit 0) */ + #define PSK_PSK_SHA1_IHV2_2_REG_PSK_SHA1_IHV2_2_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV2_2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV2_3_REG ================================================== */ + #define PSK_PSK_SHA1_IHV2_3_REG_PSK_SHA1_IHV2_3_Pos (0UL) /*!< PSK_SHA1_IHV2_3 (Bit 0) */ + #define PSK_PSK_SHA1_IHV2_3_REG_PSK_SHA1_IHV2_3_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV2_3 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PSK_SHA1_IHV2_4_REG ================================================== */ + #define PSK_PSK_SHA1_IHV2_4_REG_PSK_SHA1_IHV2_4_Pos (0UL) /*!< PSK_SHA1_IHV2_4 (Bit 0) */ + #define PSK_PSK_SHA1_IHV2_4_REG_PSK_SHA1_IHV2_4_Msk (0xffffffffUL) /*!< PSK_SHA1_IHV2_4 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ QSPIC ================ */ +/* =========================================================================================================================== */ + +/* ================================================== QSPIC_AWRITECMD_REG ================================================== */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_CS_HIGH_MIN_Pos (14UL) /*!< QSPIC_WR_CS_HIGH_MIN (Bit 14) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_CS_HIGH_MIN_Msk (0x7c000UL) /*!< QSPIC_WR_CS_HIGH_MIN (Bitfield-Mask: 0x1f) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_DAT_TX_MD_Pos (12UL) /*!< QSPIC_WR_DAT_TX_MD (Bit 12) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_DAT_TX_MD_Msk (0x3000UL) /*!< QSPIC_WR_DAT_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_ADR_TX_MD_Pos (10UL) /*!< QSPIC_WR_ADR_TX_MD (Bit 10) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_ADR_TX_MD_Msk (0xc00UL) /*!< QSPIC_WR_ADR_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_INST_TX_MD_Pos (8UL) /*!< QSPIC_WR_INST_TX_MD (Bit 8) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_INST_TX_MD_Msk (0x300UL) /*!< QSPIC_WR_INST_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_INST_Pos (0UL) /*!< QSPIC_WR_INST (Bit 0) */ + #define QSPIC_QSPIC_AWRITECMD_REG_QSPIC_WR_INST_Msk (0xffUL) /*!< QSPIC_WR_INST (Bitfield-Mask: 0xff) */ +/* ================================================== QSPIC_BURSTBRK_REG =================================================== */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_SEC_HF_DS_Pos (20UL) /*!< QSPIC_SEC_HF_DS (Bit 20) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_SEC_HF_DS_Msk (0x100000UL) /*!< QSPIC_SEC_HF_DS (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_BRK_TX_MD_Pos (18UL) /*!< QSPIC_BRK_TX_MD (Bit 18) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_BRK_TX_MD_Msk (0xc0000UL) /*!< QSPIC_BRK_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_BRK_SZ_Pos (17UL) /*!< QSPIC_BRK_SZ (Bit 17) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_BRK_SZ_Msk (0x20000UL) /*!< QSPIC_BRK_SZ (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_BRK_EN_Pos (16UL) /*!< QSPIC_BRK_EN (Bit 16) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_BRK_EN_Msk (0x10000UL) /*!< QSPIC_BRK_EN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_BRK_WRD_Pos (0UL) /*!< QSPIC_BRK_WRD (Bit 0) */ + #define QSPIC_QSPIC_BURSTBRK_REG_QSPIC_BRK_WRD_Msk (0xffffUL) /*!< QSPIC_BRK_WRD (Bitfield-Mask: 0xffff) */ +/* ================================================== QSPIC_BURSTCMDA_REG ================================================== */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_DMY_TX_MD_Pos (30UL) /*!< QSPIC_DMY_TX_MD (Bit 30) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_DMY_TX_MD_Msk (0xc0000000UL) /*!< QSPIC_DMY_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_EXT_TX_MD_Pos (28UL) /*!< QSPIC_EXT_TX_MD (Bit 28) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_EXT_TX_MD_Msk (0x30000000UL) /*!< QSPIC_EXT_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_ADR_TX_MD_Pos (26UL) /*!< QSPIC_ADR_TX_MD (Bit 26) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_ADR_TX_MD_Msk (0xc000000UL) /*!< QSPIC_ADR_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_INST_TX_MD_Pos (24UL) /*!< QSPIC_INST_TX_MD (Bit 24) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_INST_TX_MD_Msk (0x3000000UL) /*!< QSPIC_INST_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_EXT_BYTE_Pos (16UL) /*!< QSPIC_EXT_BYTE (Bit 16) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_EXT_BYTE_Msk (0xff0000UL) /*!< QSPIC_EXT_BYTE (Bitfield-Mask: 0xff) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_INST_WB_Pos (8UL) /*!< QSPIC_INST_WB (Bit 8) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_INST_WB_Msk (0xff00UL) /*!< QSPIC_INST_WB (Bitfield-Mask: 0xff) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_INST_Pos (0UL) /*!< QSPIC_INST (Bit 0) */ + #define QSPIC_QSPIC_BURSTCMDA_REG_QSPIC_INST_Msk (0xffUL) /*!< QSPIC_INST (Bitfield-Mask: 0xff) */ +/* ================================================== QSPIC_BURSTCMDB_REG ================================================== */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_DMY_FORCE_Pos (15UL) /*!< QSPIC_DMY_FORCE (Bit 15) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_DMY_FORCE_Msk (0x8000UL) /*!< QSPIC_DMY_FORCE (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_CS_HIGH_MIN_Pos (12UL) /*!< QSPIC_CS_HIGH_MIN (Bit 12) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_CS_HIGH_MIN_Msk (0x7000UL) /*!< QSPIC_CS_HIGH_MIN (Bitfield-Mask: 0x07) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_WRAP_SIZE_Pos (10UL) /*!< QSPIC_WRAP_SIZE (Bit 10) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_WRAP_SIZE_Msk (0xc00UL) /*!< QSPIC_WRAP_SIZE (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_WRAP_LEN_Pos (8UL) /*!< QSPIC_WRAP_LEN (Bit 8) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_WRAP_LEN_Msk (0x300UL) /*!< QSPIC_WRAP_LEN (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_WRAP_MD_Pos (7UL) /*!< QSPIC_WRAP_MD (Bit 7) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_WRAP_MD_Msk (0x80UL) /*!< QSPIC_WRAP_MD (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_INST_MD_Pos (6UL) /*!< QSPIC_INST_MD (Bit 6) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_INST_MD_Msk (0x40UL) /*!< QSPIC_INST_MD (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_DMY_NUM_Pos (4UL) /*!< QSPIC_DMY_NUM (Bit 4) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_DMY_NUM_Msk (0x30UL) /*!< QSPIC_DMY_NUM (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_EXT_HF_DS_Pos (3UL) /*!< QSPIC_EXT_HF_DS (Bit 3) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_EXT_HF_DS_Msk (0x8UL) /*!< QSPIC_EXT_HF_DS (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_EXT_BYTE_EN_Pos (2UL) /*!< QSPIC_EXT_BYTE_EN (Bit 2) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_EXT_BYTE_EN_Msk (0x4UL) /*!< QSPIC_EXT_BYTE_EN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_DAT_RX_MD_Pos (0UL) /*!< QSPIC_DAT_RX_MD (Bit 0) */ + #define QSPIC_QSPIC_BURSTCMDB_REG_QSPIC_DAT_RX_MD_Msk (0x3UL) /*!< QSPIC_DAT_RX_MD (Bitfield-Mask: 0x03) */ +/* ================================================== QSPIC_CHCKERASE_REG ================================================== */ + #define QSPIC_QSPIC_CHCKERASE_REG_QSPIC_CHCKERASE_Pos (0UL) /*!< QSPIC_CHCKERASE (Bit 0) */ + #define QSPIC_QSPIC_CHCKERASE_REG_QSPIC_CHCKERASE_Msk (0xffffffffUL) /*!< QSPIC_CHCKERASE (Bitfield-Mask: 0xffffffff) */ +/* =================================================== QSPIC_CTRLBUS_REG =================================================== */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_DIS_CS_Pos (4UL) /*!< QSPIC_DIS_CS (Bit 4) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_DIS_CS_Msk (0x10UL) /*!< QSPIC_DIS_CS (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_EN_CS_Pos (3UL) /*!< QSPIC_EN_CS (Bit 3) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_EN_CS_Msk (0x8UL) /*!< QSPIC_EN_CS (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_SET_QUAD_Pos (2UL) /*!< QSPIC_SET_QUAD (Bit 2) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_SET_QUAD_Msk (0x4UL) /*!< QSPIC_SET_QUAD (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_SET_DUAL_Pos (1UL) /*!< QSPIC_SET_DUAL (Bit 1) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_SET_DUAL_Msk (0x2UL) /*!< QSPIC_SET_DUAL (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_SET_SINGLE_Pos (0UL) /*!< QSPIC_SET_SINGLE (Bit 0) */ + #define QSPIC_QSPIC_CTRLBUS_REG_QSPIC_SET_SINGLE_Msk (0x1UL) /*!< QSPIC_SET_SINGLE (Bitfield-Mask: 0x01) */ +/* ================================================== QSPIC_CTRLMODE_REG =================================================== */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_CLK_FREE_EN_Pos (16UL) /*!< QSPIC_CLK_FREE_EN (Bit 16) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_CLK_FREE_EN_Msk (0x10000UL) /*!< QSPIC_CLK_FREE_EN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_CS_MD_Pos (15UL) /*!< QSPIC_CS_MD (Bit 15) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_CS_MD_Msk (0x8000UL) /*!< QSPIC_CS_MD (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_SRAM_EN_Pos (14UL) /*!< QSPIC_SRAM_EN (Bit 14) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_SRAM_EN_Msk (0x4000UL) /*!< QSPIC_SRAM_EN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_USE_32BA_Pos (13UL) /*!< QSPIC_USE_32BA (Bit 13) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_USE_32BA_Msk (0x2000UL) /*!< QSPIC_USE_32BA (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_FORCENSEQ_EN_Pos (12UL) /*!< QSPIC_FORCENSEQ_EN (Bit 12) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_FORCENSEQ_EN_Msk (0x1000UL) /*!< QSPIC_FORCENSEQ_EN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_PCLK_MD_Pos (9UL) /*!< QSPIC_PCLK_MD (Bit 9) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_PCLK_MD_Msk (0xe00UL) /*!< QSPIC_PCLK_MD (Bitfield-Mask: 0x07) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_RPIPE_EN_Pos (8UL) /*!< QSPIC_RPIPE_EN (Bit 8) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_RPIPE_EN_Msk (0x100UL) /*!< QSPIC_RPIPE_EN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_RXD_NEG_Pos (7UL) /*!< QSPIC_RXD_NEG (Bit 7) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_RXD_NEG_Msk (0x80UL) /*!< QSPIC_RXD_NEG (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_HRDY_MD_Pos (6UL) /*!< QSPIC_HRDY_MD (Bit 6) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_HRDY_MD_Msk (0x40UL) /*!< QSPIC_HRDY_MD (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_IO3_DAT_Pos (5UL) /*!< QSPIC_IO3_DAT (Bit 5) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_IO3_DAT_Msk (0x20UL) /*!< QSPIC_IO3_DAT (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_IO2_DAT_Pos (4UL) /*!< QSPIC_IO2_DAT (Bit 4) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_IO2_DAT_Msk (0x10UL) /*!< QSPIC_IO2_DAT (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_IO3_OEN_Pos (3UL) /*!< QSPIC_IO3_OEN (Bit 3) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_IO3_OEN_Msk (0x8UL) /*!< QSPIC_IO3_OEN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_IO2_OEN_Pos (2UL) /*!< QSPIC_IO2_OEN (Bit 2) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_IO2_OEN_Msk (0x4UL) /*!< QSPIC_IO2_OEN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_CLK_MD_Pos (1UL) /*!< QSPIC_CLK_MD (Bit 1) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_CLK_MD_Msk (0x2UL) /*!< QSPIC_CLK_MD (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_AUTO_MD_Pos (0UL) /*!< QSPIC_AUTO_MD (Bit 0) */ + #define QSPIC_QSPIC_CTRLMODE_REG_QSPIC_AUTO_MD_Msk (0x1UL) /*!< QSPIC_AUTO_MD (Bitfield-Mask: 0x01) */ +/* ================================================== QSPIC_DUMMYDATA_REG ================================================== */ + #define QSPIC_QSPIC_DUMMYDATA_REG_QSPIC_DUMMYDATA_Pos (0UL) /*!< QSPIC_DUMMYDATA (Bit 0) */ + #define QSPIC_QSPIC_DUMMYDATA_REG_QSPIC_DUMMYDATA_Msk (0xffffffffUL) /*!< QSPIC_DUMMYDATA (Bitfield-Mask: 0xffffffff) */ +/* ================================================== QSPIC_ERASECMDA_REG ================================================== */ + #define QSPIC_QSPIC_ERASECMDA_REG_QSPIC_RES_INST_Pos (24UL) /*!< QSPIC_RES_INST (Bit 24) */ + #define QSPIC_QSPIC_ERASECMDA_REG_QSPIC_RES_INST_Msk (0xff000000UL) /*!< QSPIC_RES_INST (Bitfield-Mask: 0xff) */ + #define QSPIC_QSPIC_ERASECMDA_REG_QSPIC_SUS_INST_Pos (16UL) /*!< QSPIC_SUS_INST (Bit 16) */ + #define QSPIC_QSPIC_ERASECMDA_REG_QSPIC_SUS_INST_Msk (0xff0000UL) /*!< QSPIC_SUS_INST (Bitfield-Mask: 0xff) */ + #define QSPIC_QSPIC_ERASECMDA_REG_QSPIC_WEN_INST_Pos (8UL) /*!< QSPIC_WEN_INST (Bit 8) */ + #define QSPIC_QSPIC_ERASECMDA_REG_QSPIC_WEN_INST_Msk (0xff00UL) /*!< QSPIC_WEN_INST (Bitfield-Mask: 0xff) */ + #define QSPIC_QSPIC_ERASECMDA_REG_QSPIC_ERS_INST_Pos (0UL) /*!< QSPIC_ERS_INST (Bit 0) */ + #define QSPIC_QSPIC_ERASECMDA_REG_QSPIC_ERS_INST_Msk (0xffUL) /*!< QSPIC_ERS_INST (Bitfield-Mask: 0xff) */ +/* ================================================== QSPIC_ERASECMDB_REG ================================================== */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_RESSUS_DLY_Pos (24UL) /*!< QSPIC_RESSUS_DLY (Bit 24) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_RESSUS_DLY_Msk (0x3f000000UL) /*!< QSPIC_RESSUS_DLY (Bitfield-Mask: 0x3f) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_ERSRES_HLD_Pos (16UL) /*!< QSPIC_ERSRES_HLD (Bit 16) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_ERSRES_HLD_Msk (0xf0000UL) /*!< QSPIC_ERSRES_HLD (Bitfield-Mask: 0x0f) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_ERS_CS_HI_Pos (10UL) /*!< QSPIC_ERS_CS_HI (Bit 10) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_ERS_CS_HI_Msk (0x7c00UL) /*!< QSPIC_ERS_CS_HI (Bitfield-Mask: 0x1f) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_EAD_TX_MD_Pos (8UL) /*!< QSPIC_EAD_TX_MD (Bit 8) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_EAD_TX_MD_Msk (0x300UL) /*!< QSPIC_EAD_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_RES_TX_MD_Pos (6UL) /*!< QSPIC_RES_TX_MD (Bit 6) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_RES_TX_MD_Msk (0xc0UL) /*!< QSPIC_RES_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_SUS_TX_MD_Pos (4UL) /*!< QSPIC_SUS_TX_MD (Bit 4) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_SUS_TX_MD_Msk (0x30UL) /*!< QSPIC_SUS_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_WEN_TX_MD_Pos (2UL) /*!< QSPIC_WEN_TX_MD (Bit 2) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_WEN_TX_MD_Msk (0xcUL) /*!< QSPIC_WEN_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_ERS_TX_MD_Pos (0UL) /*!< QSPIC_ERS_TX_MD (Bit 0) */ + #define QSPIC_QSPIC_ERASECMDB_REG_QSPIC_ERS_TX_MD_Msk (0x3UL) /*!< QSPIC_ERS_TX_MD (Bitfield-Mask: 0x03) */ +/* ================================================== QSPIC_ERASECTRL_REG ================================================== */ + #define QSPIC_QSPIC_ERASECTRL_REG_QSPIC_ERS_STATE_Pos (25UL) /*!< QSPIC_ERS_STATE (Bit 25) */ + #define QSPIC_QSPIC_ERASECTRL_REG_QSPIC_ERS_STATE_Msk (0xe000000UL) /*!< QSPIC_ERS_STATE (Bitfield-Mask: 0x07) */ + #define QSPIC_QSPIC_ERASECTRL_REG_QSPIC_ERASE_EN_Pos (24UL) /*!< QSPIC_ERASE_EN (Bit 24) */ + #define QSPIC_QSPIC_ERASECTRL_REG_QSPIC_ERASE_EN_Msk (0x1000000UL) /*!< QSPIC_ERASE_EN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_ERASECTRL_REG_QSPIC_ERS_ADDR_Pos (4UL) /*!< QSPIC_ERS_ADDR (Bit 4) */ + #define QSPIC_QSPIC_ERASECTRL_REG_QSPIC_ERS_ADDR_Msk (0xfffff0UL) /*!< QSPIC_ERS_ADDR (Bitfield-Mask: 0xfffff) */ +/* ===================================================== QSPIC_GP_REG ====================================================== */ + #define QSPIC_QSPIC_GP_REG_QSPIC_PADS_SLEW_Pos (3UL) /*!< QSPIC_PADS_SLEW (Bit 3) */ + #define QSPIC_QSPIC_GP_REG_QSPIC_PADS_SLEW_Msk (0x18UL) /*!< QSPIC_PADS_SLEW (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_GP_REG_QSPIC_PADS_DRV_Pos (1UL) /*!< QSPIC_PADS_DRV (Bit 1) */ + #define QSPIC_QSPIC_GP_REG_QSPIC_PADS_DRV_Msk (0x6UL) /*!< QSPIC_PADS_DRV (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_GP_REG_QSPIC_SELECT_Pos (0UL) /*!< QSPIC_SELECT (Bit 0) */ + #define QSPIC_QSPIC_GP_REG_QSPIC_SELECT_Msk (0x1UL) /*!< QSPIC_SELECT (Bitfield-Mask: 0x01) */ +/* =================================================== QSPIC_MEMBLEN_REG =================================================== */ + #define QSPIC_QSPIC_MEMBLEN_REG_QSPIC_T_CEM_CC_Pos (4UL) /*!< QSPIC_T_CEM_CC (Bit 4) */ + #define QSPIC_QSPIC_MEMBLEN_REG_QSPIC_T_CEM_CC_Msk (0x3ff0UL) /*!< QSPIC_T_CEM_CC (Bitfield-Mask: 0x3ff) */ + #define QSPIC_QSPIC_MEMBLEN_REG_QSPIC_T_CEM_EN_Pos (3UL) /*!< QSPIC_T_CEM_EN (Bit 3) */ + #define QSPIC_QSPIC_MEMBLEN_REG_QSPIC_T_CEM_EN_Msk (0x8UL) /*!< QSPIC_T_CEM_EN (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_MEMBLEN_REG_QSPIC_MEMBLEN_Pos (0UL) /*!< QSPIC_MEMBLEN (Bit 0) */ + #define QSPIC_QSPIC_MEMBLEN_REG_QSPIC_MEMBLEN_Msk (0x7UL) /*!< QSPIC_MEMBLEN (Bitfield-Mask: 0x07) */ +/* ================================================== QSPIC_READDATA_REG =================================================== */ + #define QSPIC_QSPIC_READDATA_REG_QSPIC_READDATA_Pos (0UL) /*!< QSPIC_READDATA (Bit 0) */ + #define QSPIC_QSPIC_READDATA_REG_QSPIC_READDATA_Msk (0xffffffffUL) /*!< QSPIC_READDATA (Bitfield-Mask: 0xffffffff) */ +/* ================================================== QSPIC_RECVDATA_REG =================================================== */ + #define QSPIC_QSPIC_RECVDATA_REG_QSPIC_RECVDATA_Pos (0UL) /*!< QSPIC_RECVDATA (Bit 0) */ + #define QSPIC_QSPIC_RECVDATA_REG_QSPIC_RECVDATA_Msk (0xffffffffUL) /*!< QSPIC_RECVDATA (Bitfield-Mask: 0xffffffff) */ +/* ================================================== QSPIC_STATUSCMD_REG ================================================== */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_STSDLY_SEL_Pos (22UL) /*!< QSPIC_STSDLY_SEL (Bit 22) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_STSDLY_SEL_Msk (0x400000UL) /*!< QSPIC_STSDLY_SEL (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_RESSTS_DLY_Pos (16UL) /*!< QSPIC_RESSTS_DLY (Bit 16) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_RESSTS_DLY_Msk (0x3f0000UL) /*!< QSPIC_RESSTS_DLY (Bitfield-Mask: 0x3f) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_BUSY_VAL_Pos (15UL) /*!< QSPIC_BUSY_VAL (Bit 15) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_BUSY_VAL_Msk (0x8000UL) /*!< QSPIC_BUSY_VAL (Bitfield-Mask: 0x01) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_BUSY_POS_Pos (12UL) /*!< QSPIC_BUSY_POS (Bit 12) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_BUSY_POS_Msk (0x7000UL) /*!< QSPIC_BUSY_POS (Bitfield-Mask: 0x07) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_RSTAT_RX_MD_Pos (10UL) /*!< QSPIC_RSTAT_RX_MD (Bit 10) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_RSTAT_RX_MD_Msk (0xc00UL) /*!< QSPIC_RSTAT_RX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_RSTAT_TX_MD_Pos (8UL) /*!< QSPIC_RSTAT_TX_MD (Bit 8) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_RSTAT_TX_MD_Msk (0x300UL) /*!< QSPIC_RSTAT_TX_MD (Bitfield-Mask: 0x03) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_RSTAT_INST_Pos (0UL) /*!< QSPIC_RSTAT_INST (Bit 0) */ + #define QSPIC_QSPIC_STATUSCMD_REG_QSPIC_RSTAT_INST_Msk (0xffUL) /*!< QSPIC_RSTAT_INST (Bitfield-Mask: 0xff) */ +/* =================================================== QSPIC_STATUS_REG ==================================================== */ + #define QSPIC_QSPIC_STATUS_REG_QSPIC_BUSY_Pos (0UL) /*!< QSPIC_BUSY (Bit 0) */ + #define QSPIC_QSPIC_STATUS_REG_QSPIC_BUSY_Msk (0x1UL) /*!< QSPIC_BUSY (Bitfield-Mask: 0x01) */ +/* ================================================== QSPIC_WRITEDATA_REG ================================================== */ + #define QSPIC_QSPIC_WRITEDATA_REG_QSPIC_WRITEDATA_Pos (0UL) /*!< QSPIC_WRITEDATA (Bit 0) */ + #define QSPIC_QSPIC_WRITEDATA_REG_QSPIC_WRITEDATA_Msk (0xffffffffUL) /*!< QSPIC_WRITEDATA (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ RETMEMCTRL ================ */ +/* =========================================================================================================================== */ + +/* ============================================= RETMEMCTRL_DYNAMIC_CLK_ON_REG ============================================= */ + #define RETMEMCTRL_RETMEMCTRL_DYNAMIC_CLK_ON_REG_MEM_UNIT_Pos (5UL) /*!< MEM_UNIT (Bit 5) */ + #define RETMEMCTRL_RETMEMCTRL_DYNAMIC_CLK_ON_REG_MEM_UNIT_Msk (0x20UL) /*!< MEM_UNIT (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_DYNAMIC_CLK_ON_REG_MMI2MEM_Pos (3UL) /*!< MMI2MEM (Bit 3) */ + #define RETMEMCTRL_RETMEMCTRL_DYNAMIC_CLK_ON_REG_MMI2MEM_Msk (0x8UL) /*!< MMI2MEM (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_DYNAMIC_CLK_ON_REG_ARBITER_Pos (1UL) /*!< ARBITER (Bit 1) */ + #define RETMEMCTRL_RETMEMCTRL_DYNAMIC_CLK_ON_REG_ARBITER_Msk (0x2UL) /*!< ARBITER (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_DYNAMIC_CLK_ON_REG_AHB2MEM_Pos (0UL) /*!< AHB2MEM (Bit 0) */ + #define RETMEMCTRL_RETMEMCTRL_DYNAMIC_CLK_ON_REG_AHB2MEM_Msk (0x1UL) /*!< AHB2MEM (Bitfield-Mask: 0x01) */ +/* =============================================== RETMEMCTRL_MST_CLK_EN_REG =============================================== */ + #define RETMEMCTRL_RETMEMCTRL_MST_CLK_EN_REG_MST_M33_MTB_CLK_EN_Pos (3UL) /*!< MST_M33_MTB_CLK_EN (Bit 3) */ + #define RETMEMCTRL_RETMEMCTRL_MST_CLK_EN_REG_MST_M33_MTB_CLK_EN_Msk (0x8UL) /*!< MST_M33_MTB_CLK_EN (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_MST_CLK_EN_REG_MST_DMA_CLK_EN_Pos (2UL) /*!< MST_DMA_CLK_EN (Bit 2) */ + #define RETMEMCTRL_RETMEMCTRL_MST_CLK_EN_REG_MST_DMA_CLK_EN_Msk (0x4UL) /*!< MST_DMA_CLK_EN (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_MST_CLK_EN_REG_MST_CPUS_CLK_EN_Pos (1UL) /*!< MST_CPUS_CLK_EN (Bit 1) */ + #define RETMEMCTRL_RETMEMCTRL_MST_CLK_EN_REG_MST_CPUS_CLK_EN_Msk (0x2UL) /*!< MST_CPUS_CLK_EN (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_MST_CLK_EN_REG_MST_CPUC_CLK_EN_Pos (0UL) /*!< MST_CPUC_CLK_EN (Bit 0) */ + #define RETMEMCTRL_RETMEMCTRL_MST_CLK_EN_REG_MST_CPUC_CLK_EN_Msk (0x1UL) /*!< MST_CPUC_CLK_EN (Bitfield-Mask: 0x01) */ +/* ================================================ RETMEMCTRL_PRIO_ARB_REG ================================================ */ + #define RETMEMCTRL_RETMEMCTRL_PRIO_ARB_REG_PRIO_ARB_DMA_RAM_Pos (4UL) /*!< PRIO_ARB_DMA_RAM (Bit 4) */ + #define RETMEMCTRL_RETMEMCTRL_PRIO_ARB_REG_PRIO_ARB_DMA_RAM_Msk (0x30UL) /*!< PRIO_ARB_DMA_RAM (Bitfield-Mask: 0x03) */ + #define RETMEMCTRL_RETMEMCTRL_PRIO_ARB_REG_PRIO_ARB_CPUS_RAM_Pos (2UL) /*!< PRIO_ARB_CPUS_RAM (Bit 2) */ + #define RETMEMCTRL_RETMEMCTRL_PRIO_ARB_REG_PRIO_ARB_CPUS_RAM_Msk (0xcUL) /*!< PRIO_ARB_CPUS_RAM (Bitfield-Mask: 0x03) */ + #define RETMEMCTRL_RETMEMCTRL_PRIO_ARB_REG_PRIO_ARB_CPUC_RAM_Pos (0UL) /*!< PRIO_ARB_CPUC_RAM (Bit 0) */ + #define RETMEMCTRL_RETMEMCTRL_PRIO_ARB_REG_PRIO_ARB_CPUC_RAM_Msk (0x3UL) /*!< PRIO_ARB_CPUC_RAM (Bitfield-Mask: 0x03) */ +/* ================================================= RETMEMCTRL_STALL_REG ================================================== */ + #define RETMEMCTRL_RETMEMCTRL_STALL_REG_AHB_DMA_MAX_STALL_Pos (8UL) /*!< AHB_DMA_MAX_STALL (Bit 8) */ + #define RETMEMCTRL_RETMEMCTRL_STALL_REG_AHB_DMA_MAX_STALL_Msk (0xf00UL) /*!< AHB_DMA_MAX_STALL (Bitfield-Mask: 0x0f) */ + #define RETMEMCTRL_RETMEMCTRL_STALL_REG_AHB_CPUS_MAX_STALL_Pos (4UL) /*!< AHB_CPUS_MAX_STALL (Bit 4) */ + #define RETMEMCTRL_RETMEMCTRL_STALL_REG_AHB_CPUS_MAX_STALL_Msk (0xf0UL) /*!< AHB_CPUS_MAX_STALL (Bitfield-Mask: 0x0f) */ + #define RETMEMCTRL_RETMEMCTRL_STALL_REG_AHB_CPUC_MAX_STALL_Pos (0UL) /*!< AHB_CPUC_MAX_STALL (Bit 0) */ + #define RETMEMCTRL_RETMEMCTRL_STALL_REG_AHB_CPUC_MAX_STALL_Msk (0xfUL) /*!< AHB_CPUC_MAX_STALL (Bitfield-Mask: 0x0f) */ +/* ============================================= RETMEMCTRL_STATIC_CLK_OFF_REG ============================================= */ + #define RETMEMCTRL_RETMEMCTRL_STATIC_CLK_OFF_REG_SRAM2_Pos (2UL) /*!< SRAM2 (Bit 2) */ + #define RETMEMCTRL_RETMEMCTRL_STATIC_CLK_OFF_REG_SRAM2_Msk (0x4UL) /*!< SRAM2 (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_STATIC_CLK_OFF_REG_SRAM1_Pos (1UL) /*!< SRAM1 (Bit 1) */ + #define RETMEMCTRL_RETMEMCTRL_STATIC_CLK_OFF_REG_SRAM1_Msk (0x2UL) /*!< SRAM1 (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_STATIC_CLK_OFF_REG_SRAM0_Pos (0UL) /*!< SRAM0 (Bit 0) */ + #define RETMEMCTRL_RETMEMCTRL_STATIC_CLK_OFF_REG_SRAM0_Msk (0x1UL) /*!< SRAM0 (Bitfield-Mask: 0x01) */ +/* ================================================= RETMEMCTRL_STATUS_REG ================================================= */ + #define RETMEMCTRL_RETMEMCTRL_STATUS_REG_RAM1_OFF_BUT_ACCESS_Pos (1UL) /*!< RAM1_OFF_BUT_ACCESS (Bit 1) */ + #define RETMEMCTRL_RETMEMCTRL_STATUS_REG_RAM1_OFF_BUT_ACCESS_Msk (0x2UL) /*!< RAM1_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + #define RETMEMCTRL_RETMEMCTRL_STATUS_REG_RAM0_OFF_BUT_ACCESS_Pos (0UL) /*!< RAM0_OFF_BUT_ACCESS (Bit 0) */ + #define RETMEMCTRL_RETMEMCTRL_STATUS_REG_RAM0_OFF_BUT_ACCESS_Msk (0x1UL) /*!< RAM0_OFF_BUT_ACCESS (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ RFMON ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== RFMON_ADDR_REG ===================================================== */ + #define RFMON_RFMON_ADDR_REG_RFMON_ADDR_Pos (2UL) /*!< RFMON_ADDR (Bit 2) */ + #define RFMON_RFMON_ADDR_REG_RFMON_ADDR_Msk (0xfffffffcUL) /*!< RFMON_ADDR (Bitfield-Mask: 0x3fffffff) */ +/* ================================================== RFMON_CRV_ADDR_REG =================================================== */ + #define RFMON_RFMON_CRV_ADDR_REG_RFMON_CRV_ADDR_Pos (2UL) /*!< RFMON_CRV_ADDR (Bit 2) */ + #define RFMON_RFMON_CRV_ADDR_REG_RFMON_CRV_ADDR_Msk (0xfffffffcUL) /*!< RFMON_CRV_ADDR (Bitfield-Mask: 0x3fffffff) */ +/* =================================================== RFMON_CRV_LEN_REG =================================================== */ + #define RFMON_RFMON_CRV_LEN_REG_RFMON_CRV_LEN_Pos (0UL) /*!< RFMON_CRV_LEN (Bit 0) */ + #define RFMON_RFMON_CRV_LEN_REG_RFMON_CRV_LEN_Msk (0x1ffffUL) /*!< RFMON_CRV_LEN (Bitfield-Mask: 0x1ffff) */ +/* ==================================================== RFMON_CTRL_REG ===================================================== */ + #define RFMON_RFMON_CTRL_REG_RFMON_READ_FORCE_Pos (3UL) /*!< RFMON_READ_FORCE (Bit 3) */ + #define RFMON_RFMON_CTRL_REG_RFMON_READ_FORCE_Msk (0x8UL) /*!< RFMON_READ_FORCE (Bitfield-Mask: 0x01) */ + #define RFMON_RFMON_CTRL_REG_RFMON_BREQ_FORCE_Pos (2UL) /*!< RFMON_BREQ_FORCE (Bit 2) */ + #define RFMON_RFMON_CTRL_REG_RFMON_BREQ_FORCE_Msk (0x4UL) /*!< RFMON_BREQ_FORCE (Bitfield-Mask: 0x01) */ + #define RFMON_RFMON_CTRL_REG_RFMON_CIRC_EN_Pos (1UL) /*!< RFMON_CIRC_EN (Bit 1) */ + #define RFMON_RFMON_CTRL_REG_RFMON_CIRC_EN_Msk (0x2UL) /*!< RFMON_CIRC_EN (Bitfield-Mask: 0x01) */ + #define RFMON_RFMON_CTRL_REG_RFMON_PACK_EN_Pos (0UL) /*!< RFMON_PACK_EN (Bit 0) */ + #define RFMON_RFMON_CTRL_REG_RFMON_PACK_EN_Msk (0x1UL) /*!< RFMON_PACK_EN (Bitfield-Mask: 0x01) */ +/* ===================================================== RFMON_LEN_REG ===================================================== */ + #define RFMON_RFMON_LEN_REG_RFMON_LEN_Pos (0UL) /*!< RFMON_LEN (Bit 0) */ + #define RFMON_RFMON_LEN_REG_RFMON_LEN_Msk (0x1ffffUL) /*!< RFMON_LEN (Bitfield-Mask: 0x1ffff) */ +/* ==================================================== RFMON_STAT_REG ===================================================== */ + #define RFMON_RFMON_STAT_REG_RFMON_OFLOW_STK_Pos (1UL) /*!< RFMON_OFLOW_STK (Bit 1) */ + #define RFMON_RFMON_STAT_REG_RFMON_OFLOW_STK_Msk (0x2UL) /*!< RFMON_OFLOW_STK (Bitfield-Mask: 0x01) */ + #define RFMON_RFMON_STAT_REG_RFMON_ACTIVE_Pos (0UL) /*!< RFMON_ACTIVE (Bit 0) */ + #define RFMON_RFMON_STAT_REG_RFMON_ACTIVE_Msk (0x1UL) /*!< RFMON_ACTIVE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ RTC ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== BCFM_IRQ_EN_REG ==================================================== */ + #define RTC_BCFM_IRQ_EN_REG_BCFM_IRQ_EN_Pos (0UL) /*!< BCFM_IRQ_EN (Bit 0) */ + #define RTC_BCFM_IRQ_EN_REG_BCFM_IRQ_EN_Msk (0x1UL) /*!< BCFM_IRQ_EN (Bitfield-Mask: 0x01) */ +/* ================================================== BCFM_IRQ_STATUS_REG ================================================== */ + #define RTC_BCFM_IRQ_STATUS_REG_BCFM_IRQ_STATUS_Pos (0UL) /*!< BCFM_IRQ_STATUS (Bit 0) */ + #define RTC_BCFM_IRQ_STATUS_REG_BCFM_IRQ_STATUS_Msk (0x1UL) /*!< BCFM_IRQ_STATUS (Bitfield-Mask: 0x01) */ +/* ==================================================== BCFM_OP_EN_REG ===================================================== */ + #define RTC_BCFM_OP_EN_REG_BCFM_OP_EN_Pos (0UL) /*!< BCFM_OP_EN (Bit 0) */ + #define RTC_BCFM_OP_EN_REG_BCFM_OP_EN_Msk (0x1UL) /*!< BCFM_OP_EN (Bitfield-Mask: 0x01) */ +/* ================================================== BCFM_OP_STATUS_REG =================================================== */ + #define RTC_BCFM_OP_STATUS_REG_BCFM_OP_STATUS_Pos (0UL) /*!< BCFM_OP_STATUS (Bit 0) */ + #define RTC_BCFM_OP_STATUS_REG_BCFM_OP_STATUS_Msk (0x3UL) /*!< BCFM_OP_STATUS (Bitfield-Mask: 0x03) */ +/* ================================================= BCFM_REQ_CLR_IRQ_REG ================================================== */ + #define RTC_BCFM_REQ_CLR_IRQ_REG_BCFM_REQ_CLR_IRQ_Pos (1UL) /*!< BCFM_REQ_CLR_IRQ (Bit 1) */ + #define RTC_BCFM_REQ_CLR_IRQ_REG_BCFM_REQ_CLR_IRQ_Msk (0x2UL) /*!< BCFM_REQ_CLR_IRQ (Bitfield-Mask: 0x01) */ + #define RTC_BCFM_REQ_CLR_IRQ_REG_BCFM_REQ_START_Pos (0UL) /*!< BCFM_REQ_START (Bit 0) */ + #define RTC_BCFM_REQ_CLR_IRQ_REG_BCFM_REQ_START_Msk (0x1UL) /*!< BCFM_REQ_START (Bitfield-Mask: 0x01) */ +/* =================================================== BCFM_TOT_CYC_REG ==================================================== */ + #define RTC_BCFM_TOT_CYC_REG_BCFM_TOT_CYC_Pos (0UL) /*!< BCFM_TOT_CYC (Bit 0) */ + #define RTC_BCFM_TOT_CYC_REG_BCFM_TOT_CYC_Msk (0xffffUL) /*!< BCFM_TOT_CYC (Bitfield-Mask: 0xffff) */ +/* ==================================================== BOR_CIRCUIT_REG ==================================================== */ + #define RTC_BOR_CIRCUIT_REG_BR_STATUS_READ_Pos (14UL) /*!< BR_STATUS_READ (Bit 14) */ + #define RTC_BOR_CIRCUIT_REG_BR_STATUS_READ_Msk (0x4000UL) /*!< BR_STATUS_READ (Bitfield-Mask: 0x01) */ + #define RTC_BOR_CIRCUIT_REG_BL_STATUS_READ_Pos (13UL) /*!< BL_STATUS_READ (Bit 13) */ + #define RTC_BOR_CIRCUIT_REG_BL_STATUS_READ_Msk (0x2000UL) /*!< BL_STATUS_READ (Bitfield-Mask: 0x01) */ + #define RTC_BOR_CIRCUIT_REG_BR_HYS_CTRL_Pos (12UL) /*!< BR_HYS_CTRL (Bit 12) */ + #define RTC_BOR_CIRCUIT_REG_BR_HYS_CTRL_Msk (0x1000UL) /*!< BR_HYS_CTRL (Bitfield-Mask: 0x01) */ + #define RTC_BOR_CIRCUIT_REG_BL_HYS_CTRL_Pos (11UL) /*!< BL_HYS_CTRL (Bit 11) */ + #define RTC_BOR_CIRCUIT_REG_BL_HYS_CTRL_Msk (0x800UL) /*!< BL_HYS_CTRL (Bitfield-Mask: 0x01) */ + #define RTC_BOR_CIRCUIT_REG_RF_LO_CAL_ENABLE_Pos (10UL) /*!< RF_LO_CAL_ENABLE (Bit 10) */ + #define RTC_BOR_CIRCUIT_REG_RF_LO_CAL_ENABLE_Msk (0x400UL) /*!< RF_LO_CAL_ENABLE (Bitfield-Mask: 0x01) */ + #define RTC_BOR_CIRCUIT_REG_BR_OUT_EN_Pos (9UL) /*!< BR_OUT_EN (Bit 9) */ + #define RTC_BOR_CIRCUIT_REG_BR_OUT_EN_Msk (0x200UL) /*!< BR_OUT_EN (Bitfield-Mask: 0x01) */ + #define RTC_BOR_CIRCUIT_REG_BL_OUT_EN_Pos (8UL) /*!< BL_OUT_EN (Bit 8) */ + #define RTC_BOR_CIRCUIT_REG_BL_OUT_EN_Msk (0x100UL) /*!< BL_OUT_EN (Bitfield-Mask: 0x01) */ + #define RTC_BOR_CIRCUIT_REG_BR_OUT_CTRL_Pos (4UL) /*!< BR_OUT_CTRL (Bit 4) */ + #define RTC_BOR_CIRCUIT_REG_BR_OUT_CTRL_Msk (0xf0UL) /*!< BR_OUT_CTRL (Bitfield-Mask: 0x0f) */ + #define RTC_BOR_CIRCUIT_REG_BL_OUT_CTRL_Pos (0UL) /*!< BL_OUT_CTRL (Bit 0) */ + #define RTC_BOR_CIRCUIT_REG_BL_OUT_CTRL_Msk (0xfUL) /*!< BL_OUT_CTRL (Bitfield-Mask: 0x0f) */ +/* ==================================================== CLK_XTAL32K_REG ==================================================== */ + #define RTC_CLK_XTAL32K_REG_VBAT_BIAS_I_CTRL_Pos (10UL) /*!< VBAT_BIAS_I_CTRL (Bit 10) */ + #define RTC_CLK_XTAL32K_REG_VBAT_BIAS_I_CTRL_Msk (0x400UL) /*!< VBAT_BIAS_I_CTRL (Bitfield-Mask: 0x01) */ + #define RTC_CLK_XTAL32K_REG_XTAL_LDO_I_CTRL_Pos (8UL) /*!< XTAL_LDO_I_CTRL (Bit 8) */ + #define RTC_CLK_XTAL32K_REG_XTAL_LDO_I_CTRL_Msk (0x300UL) /*!< XTAL_LDO_I_CTRL (Bitfield-Mask: 0x03) */ + #define RTC_CLK_XTAL32K_REG_XTAL_LDO_CTRL_Pos (5UL) /*!< XTAL_LDO_CTRL (Bit 5) */ + #define RTC_CLK_XTAL32K_REG_XTAL_LDO_CTRL_Msk (0xe0UL) /*!< XTAL_LDO_CTRL (Bitfield-Mask: 0x07) */ + #define RTC_CLK_XTAL32K_REG_XR_BAT_EN_Pos (4UL) /*!< XR_BAT_EN (Bit 4) */ + #define RTC_CLK_XTAL32K_REG_XR_BAT_EN_Msk (0x10UL) /*!< XR_BAT_EN (Bitfield-Mask: 0x01) */ + #define RTC_CLK_XTAL32K_REG_XTAL_CLK_SEL_Pos (2UL) /*!< XTAL_CLK_SEL (Bit 2) */ + #define RTC_CLK_XTAL32K_REG_XTAL_CLK_SEL_Msk (0xcUL) /*!< XTAL_CLK_SEL (Bitfield-Mask: 0x03) */ + #define RTC_CLK_XTAL32K_REG_XTAL_BAT_EN_Pos (1UL) /*!< XTAL_BAT_EN (Bit 1) */ + #define RTC_CLK_XTAL32K_REG_XTAL_BAT_EN_Msk (0x2UL) /*!< XTAL_BAT_EN (Bitfield-Mask: 0x01) */ + #define RTC_CLK_XTAL32K_REG_PDB_OSC_EN_Pos (0UL) /*!< PDB_OSC_EN (Bit 0) */ + #define RTC_CLK_XTAL32K_REG_PDB_OSC_EN_Msk (0x1UL) /*!< PDB_OSC_EN (Bitfield-Mask: 0x01) */ +/* ================================================== CNT_BASE_TESTI_REG =================================================== */ + #define RTC_CNT_BASE_TESTI_REG_TIN_CNT_TEST2_Pos (10UL) /*!< TIN_CNT_TEST2 (Bit 10) */ + #define RTC_CNT_BASE_TESTI_REG_TIN_CNT_TEST2_Msk (0x7c00UL) /*!< TIN_CNT_TEST2 (Bitfield-Mask: 0x1f) */ + #define RTC_CNT_BASE_TESTI_REG_TIN_CNT_TEST1_Pos (5UL) /*!< TIN_CNT_TEST1 (Bit 5) */ + #define RTC_CNT_BASE_TESTI_REG_TIN_CNT_TEST1_Msk (0x3e0UL) /*!< TIN_CNT_TEST1 (Bitfield-Mask: 0x1f) */ + #define RTC_CNT_BASE_TESTI_REG_TIN_CNT_BASE_Pos (0UL) /*!< TIN_CNT_BASE (Bit 0) */ + #define RTC_CNT_BASE_TESTI_REG_TIN_CNT_BASE_Msk (0x1fUL) /*!< TIN_CNT_BASE (Bitfield-Mask: 0x1f) */ +/* ===================================================== CNT_TESTI_REG ===================================================== */ + #define RTC_CNT_TESTI_REG_DFT_NBIAS_TRIM_Pos (31UL) /*!< DFT_NBIAS_TRIM (Bit 31) */ + #define RTC_CNT_TESTI_REG_DFT_NBIAS_TRIM_Msk (0x80000000UL) /*!< DFT_NBIAS_TRIM (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EN_LDO_DPLL_MON_Pos (30UL) /*!< EN_LDO_DPLL_MON (Bit 30) */ + #define RTC_CNT_TESTI_REG_EN_LDO_DPLL_MON_Msk (0x40000000UL) /*!< EN_LDO_DPLL_MON (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EN_LDO_ADCSEN_MON_Pos (29UL) /*!< EN_LDO_ADCSEN_MON (Bit 29) */ + #define RTC_CNT_TESTI_REG_EN_LDO_ADCSEN_MON_Msk (0x20000000UL) /*!< EN_LDO_ADCSEN_MON (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EN_LP_DIG_LDO_MON_Pos (28UL) /*!< EN_LP_DIG_LDO_MON (Bit 28) */ + #define RTC_CNT_TESTI_REG_EN_LP_DIG_LDO_MON_Msk (0x10000000UL) /*!< EN_LP_DIG_LDO_MON (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_TRIM_NBIAS_I_Pos (24UL) /*!< TRIM_NBIAS_I (Bit 24) */ + #define RTC_CNT_TESTI_REG_TRIM_NBIAS_I_Msk (0xf000000UL) /*!< TRIM_NBIAS_I (Bitfield-Mask: 0x0f) */ + #define RTC_CNT_TESTI_REG_EN_DFT_VREF_Pos (23UL) /*!< EN_DFT_VREF (Bit 23) */ + #define RTC_CNT_TESTI_REG_EN_DFT_VREF_Msk (0x800000UL) /*!< EN_DFT_VREF (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EN_DFT_VDDD_RET_Pos (22UL) /*!< EN_DFT_VDDD_RET (Bit 22) */ + #define RTC_CNT_TESTI_REG_EN_DFT_VDDD_RET_Msk (0x400000UL) /*!< EN_DFT_VDDD_RET (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EN_NBIAS_TRIM_Pos (21UL) /*!< EN_NBIAS_TRIM (Bit 21) */ + #define RTC_CNT_TESTI_REG_EN_NBIAS_TRIM_Msk (0x200000UL) /*!< EN_NBIAS_TRIM (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_DFT_SEL_ANA_BGR_Pos (19UL) /*!< DFT_SEL_ANA_BGR (Bit 19) */ + #define RTC_CNT_TESTI_REG_DFT_SEL_ANA_BGR_Msk (0x180000UL) /*!< DFT_SEL_ANA_BGR (Bitfield-Mask: 0x03) */ + #define RTC_CNT_TESTI_REG_EN_DFT_NBIAS_Pos (18UL) /*!< EN_DFT_NBIAS (Bit 18) */ + #define RTC_CNT_TESTI_REG_EN_DFT_NBIAS_Msk (0x40000UL) /*!< EN_DFT_NBIAS (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EN_XTAL40M_LDO_MON_Pos (17UL) /*!< EN_XTAL40M_LDO_MON (Bit 17) */ + #define RTC_CNT_TESTI_REG_EN_XTAL40M_LDO_MON_Msk (0x20000UL) /*!< EN_XTAL40M_LDO_MON (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EN_RTC_GPO_SW_VBAT_Pos (16UL) /*!< EN_RTC_GPO_SW_VBAT (Bit 16) */ + #define RTC_CNT_TESTI_REG_EN_RTC_GPO_SW_VBAT_Msk (0x10000UL) /*!< EN_RTC_GPO_SW_VBAT (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EN_DPLL_CLK_BYPASS_Pos (11UL) /*!< EN_DPLL_CLK_BYPASS (Bit 11) */ + #define RTC_CNT_TESTI_REG_EN_DPLL_CLK_BYPASS_Msk (0x800UL) /*!< EN_DPLL_CLK_BYPASS (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_AUXADC12_CS_Pos (8UL) /*!< AUXADC12_CS (Bit 8) */ + #define RTC_CNT_TESTI_REG_AUXADC12_CS_Msk (0x700UL) /*!< AUXADC12_CS (Bitfield-Mask: 0x07) */ + #define RTC_CNT_TESTI_REG_EXT_INT_BR_Pos (7UL) /*!< EXT_INT_BR (Bit 7) */ + #define RTC_CNT_TESTI_REG_EXT_INT_BR_Msk (0x80UL) /*!< EXT_INT_BR (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_EXT_INT_BL_Pos (6UL) /*!< EXT_INT_BL (Bit 6) */ + #define RTC_CNT_TESTI_REG_EXT_INT_BL_Msk (0x40UL) /*!< EXT_INT_BL (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_I_SIGNAL_Pos (5UL) /*!< I_SIGNAL (Bit 5) */ + #define RTC_CNT_TESTI_REG_I_SIGNAL_Msk (0x20UL) /*!< I_SIGNAL (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_BR_TESTI_REG_Pos (1UL) /*!< BR_TESTI_REG (Bit 1) */ + #define RTC_CNT_TESTI_REG_BR_TESTI_REG_Msk (0x2UL) /*!< BR_TESTI_REG (Bitfield-Mask: 0x01) */ + #define RTC_CNT_TESTI_REG_IP3_PWR_ON_REG_Pos (0UL) /*!< IP3_PWR_ON_REG (Bit 0) */ + #define RTC_CNT_TESTI_REG_IP3_PWR_ON_REG_Msk (0x1UL) /*!< IP3_PWR_ON_REG (Bitfield-Mask: 0x01) */ +/* ===================================================== COMP_INT_REG ====================================================== */ + #define RTC_COMP_INT_REG_COMPINT_Pos (23UL) /*!< COMPINT (Bit 23) */ + #define RTC_COMP_INT_REG_COMPINT_Msk (0x800000UL) /*!< COMPINT (Bitfield-Mask: 0x01) */ + #define RTC_COMP_INT_REG_CLK_SEL_Pos (20UL) /*!< CLK_SEL (Bit 20) */ + #define RTC_COMP_INT_REG_CLK_SEL_Msk (0x100000UL) /*!< CLK_SEL (Bitfield-Mask: 0x01) */ + #define RTC_COMP_INT_REG_PULSE_SELECT_Pos (16UL) /*!< PULSE_SELECT (Bit 16) */ + #define RTC_COMP_INT_REG_PULSE_SELECT_Msk (0xf0000UL) /*!< PULSE_SELECT (Bitfield-Mask: 0x0f) */ + #define RTC_COMP_INT_REG_INT_CLR_Pos (15UL) /*!< INT_CLR (Bit 15) */ + #define RTC_COMP_INT_REG_INT_CLR_Msk (0x8000UL) /*!< INT_CLR (Bitfield-Mask: 0x01) */ + #define RTC_COMP_INT_REG_INT_EN_Pos (14UL) /*!< INT_EN (Bit 14) */ + #define RTC_COMP_INT_REG_INT_EN_Msk (0x4000UL) /*!< INT_EN (Bitfield-Mask: 0x01) */ + #define RTC_COMP_INT_REG_G_FILTER_THR_Pos (8UL) /*!< G_FILTER_THR (Bit 8) */ + #define RTC_COMP_INT_REG_G_FILTER_THR_Msk (0x1f00UL) /*!< G_FILTER_THR (Bitfield-Mask: 0x1f) */ + #define RTC_COMP_INT_REG_G_FILTER_EN_Pos (4UL) /*!< G_FILTER_EN (Bit 4) */ + #define RTC_COMP_INT_REG_G_FILTER_EN_Msk (0x10UL) /*!< G_FILTER_EN (Bitfield-Mask: 0x01) */ + #define RTC_COMP_INT_REG_EDGE_SEL_Pos (3UL) /*!< EDGE_SEL (Bit 3) */ + #define RTC_COMP_INT_REG_EDGE_SEL_Msk (0x8UL) /*!< EDGE_SEL (Bitfield-Mask: 0x01) */ + #define RTC_COMP_INT_REG_CNT_RST_Pos (2UL) /*!< CNT_RST (Bit 2) */ + #define RTC_COMP_INT_REG_CNT_RST_Msk (0x4UL) /*!< CNT_RST (Bitfield-Mask: 0x01) */ + #define RTC_COMP_INT_REG_CNT_ENABLE_Pos (1UL) /*!< CNT_ENABLE (Bit 1) */ + #define RTC_COMP_INT_REG_CNT_ENABLE_Msk (0x2UL) /*!< CNT_ENABLE (Bitfield-Mask: 0x01) */ + #define RTC_COMP_INT_REG_OSC_15M_ENABLE_Pos (0UL) /*!< OSC_15M_ENABLE (Bit 0) */ + #define RTC_COMP_INT_REG_OSC_15M_ENABLE_Msk (0x1UL) /*!< OSC_15M_ENABLE (Bitfield-Mask: 0x01) */ +/* =================================================== DCDC_CNTL_OFF_REG =================================================== */ + #define RTC_DCDC_CNTL_OFF_REG_DCDC_AUTO_PWR_ON_EN_Pos (1UL) /*!< DCDC_AUTO_PWR_ON_EN (Bit 1) */ + #define RTC_DCDC_CNTL_OFF_REG_DCDC_AUTO_PWR_ON_EN_Msk (0x2UL) /*!< DCDC_AUTO_PWR_ON_EN (Bitfield-Mask: 0x01) */ + #define RTC_DCDC_CNTL_OFF_REG_DCDC_PWR_OFF_Pos (0UL) /*!< DCDC_PWR_OFF (Bit 0) */ + #define RTC_DCDC_CNTL_OFF_REG_DCDC_PWR_OFF_Msk (0x1UL) /*!< DCDC_PWR_OFF (Bitfield-Mask: 0x01) */ +/* ==================================================== ENABLE_CTRL_REG ==================================================== */ + #define RTC_ENABLE_CTRL_REG_BLACK_OUT_HIGH_INT_EN_Pos (11UL) /*!< BLACK_OUT_HIGH_INT_EN (Bit 11) */ + #define RTC_ENABLE_CTRL_REG_BLACK_OUT_HIGH_INT_EN_Msk (0x800UL) /*!< BLACK_OUT_HIGH_INT_EN (Bitfield-Mask: 0x01) */ + #define RTC_ENABLE_CTRL_REG_BLACK_OUT_LOW_INT_EN_Pos (10UL) /*!< BLACK_OUT_LOW_INT_EN (Bit 10) */ + #define RTC_ENABLE_CTRL_REG_BLACK_OUT_LOW_INT_EN_Msk (0x400UL) /*!< BLACK_OUT_LOW_INT_EN (Bitfield-Mask: 0x01) */ + #define RTC_ENABLE_CTRL_REG_SLEEP5_EN_Pos (9UL) /*!< SLEEP5_EN (Bit 9) */ + #define RTC_ENABLE_CTRL_REG_SLEEP5_EN_Msk (0x200UL) /*!< SLEEP5_EN (Bitfield-Mask: 0x01) */ + #define RTC_ENABLE_CTRL_REG_SLEEP4_EN_Pos (8UL) /*!< SLEEP4_EN (Bit 8) */ + #define RTC_ENABLE_CTRL_REG_SLEEP4_EN_Msk (0x100UL) /*!< SLEEP4_EN (Bitfield-Mask: 0x01) */ + #define RTC_ENABLE_CTRL_REG_DIG_LDO_DELAY_Pos (5UL) /*!< DIG_LDO_DELAY (Bit 5) */ + #define RTC_ENABLE_CTRL_REG_DIG_LDO_DELAY_Msk (0x60UL) /*!< DIG_LDO_DELAY (Bitfield-Mask: 0x03) */ + #define RTC_ENABLE_CTRL_REG_REAL_CNT_LOAD_Pos (4UL) /*!< REAL_CNT_LOAD (Bit 4) */ + #define RTC_ENABLE_CTRL_REG_REAL_CNT_LOAD_Msk (0x10UL) /*!< REAL_CNT_LOAD (Bitfield-Mask: 0x01) */ + #define RTC_ENABLE_CTRL_REG_BROWN_OUT_HIGH_INT_EN_Pos (3UL) /*!< BROWN_OUT_HIGH_INT_EN (Bit 3) */ + #define RTC_ENABLE_CTRL_REG_BROWN_OUT_HIGH_INT_EN_Msk (0x8UL) /*!< BROWN_OUT_HIGH_INT_EN (Bitfield-Mask: 0x01) */ + #define RTC_ENABLE_CTRL_REG_BROWN_OUT_LOW_INT_EN_Pos (2UL) /*!< BROWN_OUT_LOW_INT_EN (Bit 2) */ + #define RTC_ENABLE_CTRL_REG_BROWN_OUT_LOW_INT_EN_Msk (0x4UL) /*!< BROWN_OUT_LOW_INT_EN (Bitfield-Mask: 0x01) */ + #define RTC_ENABLE_CTRL_REG_WATCHDOG_OUT_INT_EN_Pos (1UL) /*!< WATCHDOG_OUT_INT_EN (Bit 1) */ + #define RTC_ENABLE_CTRL_REG_WATCHDOG_OUT_INT_EN_Msk (0x2UL) /*!< WATCHDOG_OUT_INT_EN (Bitfield-Mask: 0x01) */ + #define RTC_ENABLE_CTRL_REG_SLEEP3_EN_Pos (0UL) /*!< SLEEP3_EN (Bit 0) */ + #define RTC_ENABLE_CTRL_REG_SLEEP3_EN_Msk (0x1UL) /*!< SLEEP3_EN (Bitfield-Mask: 0x01) */ +/* ===================================================== FRC_CNT_0_REG ===================================================== */ + #define RTC_FRC_CNT_0_REG_FRC_CNT_0_Pos (0UL) /*!< FRC_CNT_0 (Bit 0) */ + #define RTC_FRC_CNT_0_REG_FRC_CNT_0_Msk (0xffffffffUL) /*!< FRC_CNT_0 (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== FRC_CNT_1_REG ===================================================== */ + #define RTC_FRC_CNT_1_REG_FRC_CNT_1_Pos (0UL) /*!< FRC_CNT_1 (Bit 0) */ + #define RTC_FRC_CNT_1_REG_FRC_CNT_1_Msk (0xfUL) /*!< FRC_CNT_1 (Bitfield-Mask: 0x0f) */ +/* =================================================== GPIO_WAKEUP0_REG ==================================================== */ + #define RTC_GPIO_WAKEUP0_REG_GPIO_WAKEUP_EDGE_INVERSION_SEL_Pos (0UL) /*!< GPIO_WAKEUP_EDGE_INVERSION_SEL (Bit 0) */ + #define RTC_GPIO_WAKEUP0_REG_GPIO_WAKEUP_EDGE_INVERSION_SEL_Msk (0x7ffUL) /*!< GPIO_WAKEUP_EDGE_INVERSION_SEL (Bitfield-Mask: 0x7ff) */ +/* =================================================== GPIO_WAKEUP1_REG ==================================================== */ + #define RTC_GPIO_WAKEUP1_REG_GPIO_WAKEUP_EN_SEL_Pos (16UL) /*!< GPIO_WAKEUP_EN_SEL (Bit 16) */ + #define RTC_GPIO_WAKEUP1_REG_GPIO_WAKEUP_EN_SEL_Msk (0x7ff0000UL) /*!< GPIO_WAKEUP_EN_SEL (Bitfield-Mask: 0x7ff) */ + #define RTC_GPIO_WAKEUP1_REG_GPIO_WAKEUP_SRC_Pos (0UL) /*!< GPIO_WAKEUP_SRC (Bit 0) */ + #define RTC_GPIO_WAKEUP1_REG_GPIO_WAKEUP_SRC_Msk (0x7ffUL) /*!< GPIO_WAKEUP_SRC (Bitfield-Mask: 0x7ff) */ +/* ====================================================== INT_THR_REG ====================================================== */ + #define RTC_INT_THR_REG_INT_THR_Pos (0UL) /*!< INT_THR (Bit 0) */ + #define RTC_INT_THR_REG_INT_THR_Msk (0xffffffffUL) /*!< INT_THR (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IP4_FLDO_BG_CONT_REG ================================================== */ + #define RTC_IP4_FLDO_BG_CONT_REG_F_DIO_ST_BYP_EN_Pos (12UL) /*!< F_DIO_ST_BYP_EN (Bit 12) */ + #define RTC_IP4_FLDO_BG_CONT_REG_F_DIO_ST_BYP_EN_Msk (0x1000UL) /*!< F_DIO_ST_BYP_EN (Bitfield-Mask: 0x01) */ + #define RTC_IP4_FLDO_BG_CONT_REG_F_DIO_ST_CTRL_Pos (8UL) /*!< F_DIO_ST_CTRL (Bit 8) */ + #define RTC_IP4_FLDO_BG_CONT_REG_F_DIO_ST_CTRL_Msk (0xf00UL) /*!< F_DIO_ST_CTRL (Bitfield-Mask: 0x0f) */ + #define RTC_IP4_FLDO_BG_CONT_REG_VBG_TRIM2_Pos (5UL) /*!< VBG_TRIM2 (Bit 5) */ + #define RTC_IP4_FLDO_BG_CONT_REG_VBG_TRIM2_Msk (0x20UL) /*!< VBG_TRIM2 (Bitfield-Mask: 0x01) */ + #define RTC_IP4_FLDO_BG_CONT_REG_VBG_TRIM1_Pos (4UL) /*!< VBG_TRIM1 (Bit 4) */ + #define RTC_IP4_FLDO_BG_CONT_REG_VBG_TRIM1_Msk (0x10UL) /*!< VBG_TRIM1 (Bitfield-Mask: 0x01) */ + #define RTC_IP4_FLDO_BG_CONT_REG_VBG_TRIM0_Pos (3UL) /*!< VBG_TRIM0 (Bit 3) */ + #define RTC_IP4_FLDO_BG_CONT_REG_VBG_TRIM0_Msk (0x8UL) /*!< VBG_TRIM0 (Bitfield-Mask: 0x01) */ + #define RTC_IP4_FLDO_BG_CONT_REG_FLDO_VCTRL2_Pos (2UL) /*!< FLDO_VCTRL2 (Bit 2) */ + #define RTC_IP4_FLDO_BG_CONT_REG_FLDO_VCTRL2_Msk (0x4UL) /*!< FLDO_VCTRL2 (Bitfield-Mask: 0x01) */ + #define RTC_IP4_FLDO_BG_CONT_REG_FLDO_VCTRL1_Pos (1UL) /*!< FLDO_VCTRL1 (Bit 1) */ + #define RTC_IP4_FLDO_BG_CONT_REG_FLDO_VCTRL1_Msk (0x2UL) /*!< FLDO_VCTRL1 (Bitfield-Mask: 0x01) */ + #define RTC_IP4_FLDO_BG_CONT_REG_FLDO_VCTRL0_Pos (0UL) /*!< FLDO_VCTRL0 (Bit 0) */ + #define RTC_IP4_FLDO_BG_CONT_REG_FLDO_VCTRL0_Msk (0x1UL) /*!< FLDO_VCTRL0 (Bitfield-Mask: 0x01) */ +/* ==================================================== LDO_ENABLE2_REG ==================================================== */ + #define RTC_LDO_ENABLE2_REG_EN_TST_INT_Pos (7UL) /*!< EN_TST_INT (Bit 7) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_INT_Msk (0x80UL) /*!< EN_TST_INT (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_GPIO3_Pos (6UL) /*!< EN_TST_GPIO3 (Bit 6) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_GPIO3_Msk (0x40UL) /*!< EN_TST_GPIO3 (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_GPIO2_Pos (5UL) /*!< EN_TST_GPIO2 (Bit 5) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_GPIO2_Msk (0x20UL) /*!< EN_TST_GPIO2 (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_GPIO1_Pos (4UL) /*!< EN_TST_GPIO1 (Bit 4) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_GPIO1_Msk (0x10UL) /*!< EN_TST_GPIO1 (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_GPIO0_Pos (3UL) /*!< EN_TST_GPIO0 (Bit 3) */ + #define RTC_LDO_ENABLE2_REG_EN_TST_GPIO0_Msk (0x8UL) /*!< EN_TST_GPIO0 (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE2_REG_ULDO_MAN_CONT_VALUE_Pos (2UL) /*!< ULDO_MAN_CONT_VALUE (Bit 2) */ + #define RTC_LDO_ENABLE2_REG_ULDO_MAN_CONT_VALUE_Msk (0x4UL) /*!< ULDO_MAN_CONT_VALUE (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE2_REG_ULDO_MAN_CONT_Pos (1UL) /*!< ULDO_MAN_CONT (Bit 1) */ + #define RTC_LDO_ENABLE2_REG_ULDO_MAN_CONT_Msk (0x2UL) /*!< ULDO_MAN_CONT (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE2_REG_RTC_XTAL40M_EN_Pos (0UL) /*!< RTC_XTAL40M_EN (Bit 0) */ + #define RTC_LDO_ENABLE2_REG_RTC_XTAL40M_EN_Msk (0x1UL) /*!< RTC_XTAL40M_EN (Bitfield-Mask: 0x01) */ +/* ==================================================== LDO_ENABLE_REG ===================================================== */ + #define RTC_LDO_ENABLE_REG_CFG_LPDIG_LDO_V_Pos (26UL) /*!< CFG_LPDIG_LDO_V (Bit 26) */ + #define RTC_LDO_ENABLE_REG_CFG_LPDIG_LDO_V_Msk (0x3c000000UL) /*!< CFG_LPDIG_LDO_V (Bitfield-Mask: 0x0f) */ + #define RTC_LDO_ENABLE_REG_CFG_LPDIGLDO_I_Pos (24UL) /*!< CFG_LPDIGLDO_I (Bit 24) */ + #define RTC_LDO_ENABLE_REG_CFG_LPDIGLDO_I_Msk (0x3000000UL) /*!< CFG_LPDIGLDO_I (Bitfield-Mask: 0x03) */ + #define RTC_LDO_ENABLE_REG_EN_LP_DIG_LDO_Pos (23UL) /*!< EN_LP_DIG_LDO (Bit 23) */ + #define RTC_LDO_ENABLE_REG_EN_LP_DIG_LDO_Msk (0x800000UL) /*!< EN_LP_DIG_LDO (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_CTRL_ST_PA_DCDC_Pos (18UL) /*!< CTRL_ST_PA_DCDC (Bit 18) */ + #define RTC_LDO_ENABLE_REG_CTRL_ST_PA_DCDC_Msk (0x7c0000UL) /*!< CTRL_ST_PA_DCDC (Bitfield-Mask: 0x1f) */ + #define RTC_LDO_ENABLE_REG_EN_DCDC_PA_Pos (17UL) /*!< EN_DCDC_PA (Bit 17) */ + #define RTC_LDO_ENABLE_REG_EN_DCDC_PA_Msk (0x20000UL) /*!< EN_DCDC_PA (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_EN_ST_PAD_DCDC_BYP_Pos (16UL) /*!< EN_ST_PAD_DCDC_BYP (Bit 16) */ + #define RTC_LDO_ENABLE_REG_EN_ST_PAD_DCDC_BYP_Msk (0x10000UL) /*!< EN_ST_PAD_DCDC_BYP (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_FLASH_LDO_AUTO_OFF_Pos (15UL) /*!< FLASH_LDO_AUTO_OFF (Bit 15) */ + #define RTC_LDO_ENABLE_REG_FLASH_LDO_AUTO_OFF_Msk (0x8000UL) /*!< FLASH_LDO_AUTO_OFF (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_DCDC_CTRL_OFF_Pos (14UL) /*!< LDO_EN_DCDC_CTRL_OFF (Bit 14) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_DCDC_CTRL_OFF_Msk (0x4000UL) /*!< LDO_EN_DCDC_CTRL_OFF (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_BOOST_PWR_OFF_Pos (13UL) /*!< LDO_EN_BOOST_PWR_OFF (Bit 13) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_BOOST_PWR_OFF_Msk (0x2000UL) /*!< LDO_EN_BOOST_PWR_OFF (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_RESET_12V_HOLD_EN_Pos (12UL) /*!< LDO_EN_RESET_12V_HOLD_EN (Bit 12) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_RESET_12V_HOLD_EN_Msk (0x1000UL) /*!< LDO_EN_RESET_12V_HOLD_EN (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_FLASH_DIO_MANUAL_VAL_Pos (11UL) /*!< LDO_EN_FLASH_DIO_MANUAL_VAL (Bit 11) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_FLASH_DIO_MANUAL_VAL_Msk (0x800UL) /*!< LDO_EN_FLASH_DIO_MANUAL_VAL (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_FLASH_DIO_MANUAL_MODE_Pos (10UL) /*!< LDO_EN_FLASH_DIO_MANUAL_MODE (Bit 10) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_FLASH_DIO_MANUAL_MODE_Msk (0x400UL) /*!< LDO_EN_FLASH_DIO_MANUAL_MODE (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_IP1_LDO_Pos (9UL) /*!< LDO_EN_PDB_IP1_LDO (Bit 9) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_IP1_LDO_Msk (0x200UL) /*!< LDO_EN_PDB_IP1_LDO (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_RF_LDO_Pos (8UL) /*!< LDO_EN_PDB_RF_LDO (Bit 8) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_RF_LDO_Msk (0x100UL) /*!< LDO_EN_PDB_RF_LDO (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_DIG_LDO_CNTL_Pos (7UL) /*!< LDO_EN_DIG_LDO_CNTL (Bit 7) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_DIG_LDO_CNTL_Msk (0x80UL) /*!< LDO_EN_DIG_LDO_CNTL (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_DCDC_CNTL_XTAL_Pos (6UL) /*!< LDO_EN_DCDC_CNTL_XTAL (Bit 6) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_DCDC_CNTL_XTAL_Msk (0x40UL) /*!< LDO_EN_DCDC_CNTL_XTAL (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_ULDO_Pos (5UL) /*!< LDO_EN_PDB_ULDO (Bit 5) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_ULDO_Msk (0x20UL) /*!< LDO_EN_PDB_ULDO (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_IP3_OTP_Pos (4UL) /*!< LDO_EN_PDB_IP3_OTP (Bit 4) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_IP3_OTP_Msk (0x10UL) /*!< LDO_EN_PDB_IP3_OTP (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_OTP_PWRPRDY_Pos (3UL) /*!< LDO_EN_OTP_PWRPRDY (Bit 3) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_OTP_PWRPRDY_Msk (0x8UL) /*!< LDO_EN_OTP_PWRPRDY (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_LDO_PLL1_Pos (2UL) /*!< LDO_EN_LDO_PLL1 (Bit 2) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_LDO_PLL1_Msk (0x4UL) /*!< LDO_EN_LDO_PLL1 (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_EN_FDIO_PULLDN_Pos (1UL) /*!< EN_FDIO_PULLDN (Bit 1) */ + #define RTC_LDO_ENABLE_REG_EN_FDIO_PULLDN_Msk (0x2UL) /*!< EN_FDIO_PULLDN (Bitfield-Mask: 0x01) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_XTAL_NOISE_REDU_Pos (0UL) /*!< LDO_EN_PDB_XTAL_NOISE_REDU (Bit 0) */ + #define RTC_LDO_ENABLE_REG_LDO_EN_PDB_XTAL_NOISE_REDU_Msk (0x1UL) /*!< LDO_EN_PDB_XTAL_NOISE_REDU (Bitfield-Mask: 0x01) */ +/* ===================================================== PULSE_CNT_REG ===================================================== */ + #define RTC_PULSE_CNT_REG_PULSE_CNT_Pos (0UL) /*!< PULSE_CNT (Bit 0) */ + #define RTC_PULSE_CNT_REG_PULSE_CNT_Msk (0xffffffffUL) /*!< PULSE_CNT (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== RCX32K_REG ======================================================= */ + #define RTC_RCX32K_REG_TRIM_RCX32K_COSC_Pos (16UL) /*!< TRIM_RCX32K_COSC (Bit 16) */ + #define RTC_RCX32K_REG_TRIM_RCX32K_COSC_Msk (0x30000UL) /*!< TRIM_RCX32K_COSC (Bitfield-Mask: 0x03) */ + #define RTC_RCX32K_REG_CFG_TEST_HI_Pos (14UL) /*!< CFG_TEST_HI (Bit 14) */ + #define RTC_RCX32K_REG_CFG_TEST_HI_Msk (0xc000UL) /*!< CFG_TEST_HI (Bitfield-Mask: 0x03) */ + #define RTC_RCX32K_REG_TRIM_RCX32K_ROSC_Pos (0UL) /*!< TRIM_RCX32K_ROSC (Bit 0) */ + #define RTC_RCX32K_REG_TRIM_RCX32K_ROSC_Msk (0x3fffUL) /*!< TRIM_RCX32K_ROSC (Bitfield-Mask: 0x3fff) */ +/* ==================================================== READ_STATUS_REG ==================================================== */ + #define RTC_READ_STATUS_REG_DCDC_PA_OK_RD_STATUS_Pos (15UL) /*!< DCDC_PA_OK_RD_STATUS (Bit 15) */ + #define RTC_READ_STATUS_REG_DCDC_PA_OK_RD_STATUS_Msk (0x8000UL) /*!< DCDC_PA_OK_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_LP_DIG_LDO_OK_RD_STATUS_Pos (14UL) /*!< LP_DIG_LDO_OK_RD_STATUS (Bit 14) */ + #define RTC_READ_STATUS_REG_LP_DIG_LDO_OK_RD_STATUS_Msk (0x4000UL) /*!< LP_DIG_LDO_OK_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_IP1_LDO_RDY_VBAT_RD_STATUS_Pos (13UL) /*!< IP1_LDO_RDY_VBAT_RD_STATUS (Bit 13) */ + #define RTC_READ_STATUS_REG_IP1_LDO_RDY_VBAT_RD_STATUS_Msk (0x2000UL) /*!< IP1_LDO_RDY_VBAT_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_DCDC_RDY_VBAT_RD_STATUS_Pos (12UL) /*!< DCDC_RDY_VBAT_RD_STATUS (Bit 12) */ + #define RTC_READ_STATUS_REG_DCDC_RDY_VBAT_RD_STATUS_Msk (0x1000UL) /*!< DCDC_RDY_VBAT_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_F_LDO_RDY_RD_STATUS_Pos (11UL) /*!< F_LDO_RDY_RD_STATUS (Bit 11) */ + #define RTC_READ_STATUS_REG_F_LDO_RDY_RD_STATUS_Msk (0x800UL) /*!< F_LDO_RDY_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_DIG_LDO_RDY_VBAT_RD_STATUS_Pos (10UL) /*!< DIG_LDO_RDY_VBAT_RD_STATUS (Bit 10) */ + #define RTC_READ_STATUS_REG_DIG_LDO_RDY_VBAT_RD_STATUS_Msk (0x400UL) /*!< DIG_LDO_RDY_VBAT_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_RF_LDO_RDY_VBAT_RD_STATUS_Pos (9UL) /*!< RF_LDO_RDY_VBAT_RD_STATUS (Bit 9) */ + #define RTC_READ_STATUS_REG_RF_LDO_RDY_VBAT_RD_STATUS_Msk (0x200UL) /*!< RF_LDO_RDY_VBAT_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_XTAL40M_RDY_VBAT_RD_STATUS_Pos (8UL) /*!< XTAL40M_RDY_VBAT_RD_STATUS (Bit 8) */ + #define RTC_READ_STATUS_REG_XTAL40M_RDY_VBAT_RD_STATUS_Msk (0x100UL) /*!< XTAL40M_RDY_VBAT_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_WWATCHDOGCLK_RD_STATUS_Pos (7UL) /*!< WWATCHDOGCLK_RD_STATUS (Bit 7) */ + #define RTC_READ_STATUS_REG_WWATCHDOGCLK_RD_STATUS_Msk (0x80UL) /*!< WWATCHDOGCLK_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_RESET_POSITION_RD_STATUS_Pos (6UL) /*!< RESET_POSITION_RD_STATUS (Bit 6) */ + #define RTC_READ_STATUS_REG_RESET_POSITION_RD_STATUS_Msk (0x40UL) /*!< RESET_POSITION_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_OTP_RDY_RD_STATUS_Pos (5UL) /*!< OTP_RDY_RD_STATUS (Bit 5) */ + #define RTC_READ_STATUS_REG_OTP_RDY_RD_STATUS_Msk (0x20UL) /*!< OTP_RDY_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_WTEMPEQCOMPWKCNT_RD_STATUS_Pos (4UL) /*!< WTEMPEQCOMPWKCNT_RD_STATUS (Bit 4) */ + #define RTC_READ_STATUS_REG_WTEMPEQCOMPWKCNT_RD_STATUS_Msk (0x10UL) /*!< WTEMPEQCOMPWKCNT_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_XTAL_RDY_BAT_RD_STATUS_Pos (3UL) /*!< XTAL_RDY_BAT_RD_STATUS (Bit 3) */ + #define RTC_READ_STATUS_REG_XTAL_RDY_BAT_RD_STATUS_Msk (0x8UL) /*!< XTAL_RDY_BAT_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_X12_CLK_RD_STATUS_Pos (1UL) /*!< X12_CLK_RD_STATUS (Bit 1) */ + #define RTC_READ_STATUS_REG_X12_CLK_RD_STATUS_Msk (0x2UL) /*!< X12_CLK_RD_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_READ_STATUS_REG_WAKE_UP_SOURCE__RD_STATUS_Pos (0UL) /*!< WAKE_UP_SOURCE__RD_STATUS (Bit 0) */ + #define RTC_READ_STATUS_REG_WAKE_UP_SOURCE__RD_STATUS_Msk (0x1UL) /*!< WAKE_UP_SOURCE__RD_STATUS (Bitfield-Mask: 0x01) */ +/* =================================================== RTC_ACC_ADDR_REG ==================================================== */ + #define RTC_RTC_ACC_ADDR_REG_RTC_ACC_ADDR_Pos (0UL) /*!< RTC_ACC_ADDR (Bit 0) */ + #define RTC_RTC_ACC_ADDR_REG_RTC_ACC_ADDR_Msk (0x7fUL) /*!< RTC_ACC_ADDR (Bitfield-Mask: 0x7f) */ +/* ================================================== RTC_ACC_AUTO_EN_REG ================================================== */ + #define RTC_RTC_ACC_AUTO_EN_REG_RTC_ACC_AUTO_EN_Pos (0UL) /*!< RTC_ACC_AUTO_EN (Bit 0) */ + #define RTC_RTC_ACC_AUTO_EN_REG_RTC_ACC_AUTO_EN_Msk (0x1UL) /*!< RTC_ACC_AUTO_EN (Bitfield-Mask: 0x01) */ +/* =================================================== RTC_ACC_BUSY_REG ==================================================== */ + #define RTC_RTC_ACC_BUSY_REG_RTC_ACC_BUSY_Pos (0UL) /*!< RTC_ACC_BUSY (Bit 0) */ + #define RTC_RTC_ACC_BUSY_REG_RTC_ACC_BUSY_Msk (0x1UL) /*!< RTC_ACC_BUSY (Bitfield-Mask: 0x01) */ +/* ================================================== RTC_ACC_OP_TYPE_REG ================================================== */ + #define RTC_RTC_ACC_OP_TYPE_REG_RTC_ACC_OP_TYPE_Pos (0UL) /*!< RTC_ACC_OP_TYPE (Bit 0) */ + #define RTC_RTC_ACC_OP_TYPE_REG_RTC_ACC_OP_TYPE_Msk (0x7UL) /*!< RTC_ACC_OP_TYPE (Bitfield-Mask: 0x07) */ +/* ==================================================== RTC_ACC_REQ_REG ==================================================== */ + #define RTC_RTC_ACC_REQ_REG_RTC_ACC_REQ_CLR_Pos (1UL) /*!< RTC_ACC_REQ_CLR (Bit 1) */ + #define RTC_RTC_ACC_REQ_REG_RTC_ACC_REQ_CLR_Msk (0x2UL) /*!< RTC_ACC_REQ_CLR (Bitfield-Mask: 0x01) */ + #define RTC_RTC_ACC_REQ_REG_RTC_ACC_REQ_START_Pos (0UL) /*!< RTC_ACC_REQ_START (Bit 0) */ + #define RTC_RTC_ACC_REQ_REG_RTC_ACC_REQ_START_Msk (0x1UL) /*!< RTC_ACC_REQ_START (Bitfield-Mask: 0x01) */ +/* =================================================== RTC_ACC_WDATA_REG =================================================== */ + #define RTC_RTC_ACC_WDATA_REG_RTC_ACC_WDATA_Pos (0UL) /*!< RTC_ACC_WDATA (Bit 0) */ + #define RTC_RTC_ACC_WDATA_REG_RTC_ACC_WDATA_Msk (0xffffffffUL) /*!< RTC_ACC_WDATA (Bitfield-Mask: 0xffffffff) */ +/* ================================================== RTC_CLK_GR_CYC_REG =================================================== */ + #define RTC_RTC_CLK_GR_CYC_REG_RTC_CLK_GR_CYC_Pos (0UL) /*!< RTC_CLK_GR_CYC (Bit 0) */ + #define RTC_RTC_CLK_GR_CYC_REG_RTC_CLK_GR_CYC_Msk (0xfUL) /*!< RTC_CLK_GR_CYC (Bitfield-Mask: 0x0f) */ +/* ==================================================== RTC_CLK_INV_REG ==================================================== */ + #define RTC_RTC_CLK_INV_REG_RTC_CLK_INV_Pos (0UL) /*!< RTC_CLK_INV (Bit 0) */ + #define RTC_RTC_CLK_INV_REG_RTC_CLK_INV_Msk (0x1UL) /*!< RTC_CLK_INV (Bitfield-Mask: 0x01) */ +/* ===================================================== RTC_EDGE_REG ====================================================== */ + #define RTC_RTC_EDGE_REG_RTC_EDGE_AUTO_N_Pos (8UL) /*!< RTC_EDGE_AUTO_N (Bit 8) */ + #define RTC_RTC_EDGE_REG_RTC_EDGE_AUTO_N_Msk (0x100UL) /*!< RTC_EDGE_AUTO_N (Bitfield-Mask: 0x01) */ + #define RTC_RTC_EDGE_REG_RTC_EDGE_EN_Pos (0UL) /*!< RTC_EDGE_EN (Bit 0) */ + #define RTC_RTC_EDGE_REG_RTC_EDGE_EN_Msk (0x3UL) /*!< RTC_EDGE_EN (Bitfield-Mask: 0x03) */ +/* ================================================== RTC_EXP_CLR_IRQ_REG ================================================== */ + #define RTC_RTC_EXP_CLR_IRQ_REG_RTC_EXP_CLR_IRQ_Pos (1UL) /*!< RTC_EXP_CLR_IRQ (Bit 1) */ + #define RTC_RTC_EXP_CLR_IRQ_REG_RTC_EXP_CLR_IRQ_Msk (0x2UL) /*!< RTC_EXP_CLR_IRQ (Bitfield-Mask: 0x01) */ + #define RTC_RTC_EXP_CLR_IRQ_REG_RTC_EXP_START_Pos (0UL) /*!< RTC_EXP_START (Bit 0) */ + #define RTC_RTC_EXP_CLR_IRQ_REG_RTC_EXP_START_Msk (0x1UL) /*!< RTC_EXP_START (Bitfield-Mask: 0x01) */ +/* ================================================== RTC_EXP_IRQ_EN_REG =================================================== */ + #define RTC_RTC_EXP_IRQ_EN_REG_RTC_EXP_IRQ_EN_Pos (0UL) /*!< RTC_EXP_IRQ_EN (Bit 0) */ + #define RTC_RTC_EXP_IRQ_EN_REG_RTC_EXP_IRQ_EN_Msk (0x7UL) /*!< RTC_EXP_IRQ_EN (Bitfield-Mask: 0x07) */ +/* ================================================== RTC_EXP_OP_STS_REG =================================================== */ + #define RTC_RTC_EXP_OP_STS_REG_RTC_EXP_OP_STATUS_Pos (8UL) /*!< RTC_EXP_OP_STATUS (Bit 8) */ + #define RTC_RTC_EXP_OP_STS_REG_RTC_EXP_OP_STATUS_Msk (0x100UL) /*!< RTC_EXP_OP_STATUS (Bitfield-Mask: 0x01) */ + #define RTC_RTC_EXP_OP_STS_REG_RTC_EXP_IRQ_STATUS_Pos (0UL) /*!< RTC_EXP_IRQ_STATUS (Bit 0) */ + #define RTC_RTC_EXP_OP_STS_REG_RTC_EXP_IRQ_STATUS_Msk (0x7UL) /*!< RTC_EXP_IRQ_STATUS (Bitfield-Mask: 0x07) */ +/* ==================================================== RTC_EXP_TH0_REG ==================================================== */ + #define RTC_RTC_EXP_TH0_REG_RTC_EXP_TH0_Pos (0UL) /*!< RTC_EXP_TH0 (Bit 0) */ + #define RTC_RTC_EXP_TH0_REG_RTC_EXP_TH0_Msk (0xffffffffUL) /*!< RTC_EXP_TH0 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== RTC_EXP_TH1_REG ==================================================== */ + #define RTC_RTC_EXP_TH1_REG_RTC_EXP_TH1_Pos (0UL) /*!< RTC_EXP_TH1 (Bit 0) */ + #define RTC_RTC_EXP_TH1_REG_RTC_EXP_TH1_Msk (0xfUL) /*!< RTC_EXP_TH1 (Bitfield-Mask: 0x0f) */ +/* ================================================== RTC_FRC_STATUS_REG =================================================== */ + #define RTC_RTC_FRC_STATUS_REG_RTC_FRC_STATUS_Pos (0UL) /*!< RTC_FRC_STATUS (Bit 0) */ + #define RTC_RTC_FRC_STATUS_REG_RTC_FRC_STATUS_Msk (0x7UL) /*!< RTC_FRC_STATUS (Bitfield-Mask: 0x07) */ +/* ====================================================== RTC_IF_REG ======================================================= */ + #define RTC_RTC_IF_REG_RTC_IF_TYPE_Pos (24UL) /*!< RTC_IF_TYPE (Bit 24) */ + #define RTC_RTC_IF_REG_RTC_IF_TYPE_Msk (0x1000000UL) /*!< RTC_IF_TYPE (Bitfield-Mask: 0x01) */ + #define RTC_RTC_IF_REG_RTC_IF_2_DL_EN_Pos (18UL) /*!< RTC_IF_2_DL_EN (Bit 18) */ + #define RTC_RTC_IF_REG_RTC_IF_2_DL_EN_Msk (0x40000UL) /*!< RTC_IF_2_DL_EN (Bitfield-Mask: 0x01) */ + #define RTC_RTC_IF_REG_RTC_IF_1_DL_EN_Pos (17UL) /*!< RTC_IF_1_DL_EN (Bit 17) */ + #define RTC_RTC_IF_REG_RTC_IF_1_DL_EN_Msk (0x20000UL) /*!< RTC_IF_1_DL_EN (Bitfield-Mask: 0x01) */ + #define RTC_RTC_IF_REG_RTC_IF_0_DL_EN_Pos (16UL) /*!< RTC_IF_0_DL_EN (Bit 16) */ + #define RTC_RTC_IF_REG_RTC_IF_0_DL_EN_Msk (0x10000UL) /*!< RTC_IF_0_DL_EN (Bitfield-Mask: 0x01) */ + #define RTC_RTC_IF_REG_RTC_IF_2_DL_Pos (8UL) /*!< RTC_IF_2_DL (Bit 8) */ + #define RTC_RTC_IF_REG_RTC_IF_2_DL_Msk (0xf00UL) /*!< RTC_IF_2_DL (Bitfield-Mask: 0x0f) */ + #define RTC_RTC_IF_REG_RTC_IF_1_DL_Pos (4UL) /*!< RTC_IF_1_DL (Bit 4) */ + #define RTC_RTC_IF_REG_RTC_IF_1_DL_Msk (0xf0UL) /*!< RTC_IF_1_DL (Bitfield-Mask: 0x0f) */ + #define RTC_RTC_IF_REG_RTC_IF_0_DL_Pos (0UL) /*!< RTC_IF_0_DL (Bit 0) */ + #define RTC_RTC_IF_REG_RTC_IF_0_DL_Msk (0xfUL) /*!< RTC_IF_0_DL (Bitfield-Mask: 0x0f) */ +/* ==================================================== RTC_IRQ_EN_REG ===================================================== */ + #define RTC_RTC_IRQ_EN_REG_RTC_IRQ_EN_Pos (0UL) /*!< RTC_IRQ_EN (Bit 0) */ + #define RTC_RTC_IRQ_EN_REG_RTC_IRQ_EN_Msk (0x3UL) /*!< RTC_IRQ_EN (Bitfield-Mask: 0x03) */ +/* ================================================== RTC_IRQ_STATUS_REG =================================================== */ + #define RTC_RTC_IRQ_STATUS_REG_RTC_IRQ_STATUS_Pos (0UL) /*!< RTC_IRQ_STATUS (Bit 0) */ + #define RTC_RTC_IRQ_STATUS_REG_RTC_IRQ_STATUS_Msk (0x3UL) /*!< RTC_IRQ_STATUS (Bitfield-Mask: 0x03) */ +/* ==================================================== RTC_MIRROR_REG ===================================================== */ + #define RTC_RTC_MIRROR_REG_RTC_MR_EN_Pos (1UL) /*!< RTC_MR_EN (Bit 1) */ + #define RTC_RTC_MIRROR_REG_RTC_MR_EN_Msk (0x2UL) /*!< RTC_MR_EN (Bitfield-Mask: 0x01) */ + #define RTC_RTC_MIRROR_REG_RTC_OP_EN_Pos (0UL) /*!< RTC_OP_EN (Bit 0) */ + #define RTC_RTC_MIRROR_REG_RTC_OP_EN_Msk (0x1UL) /*!< RTC_OP_EN (Bitfield-Mask: 0x01) */ +/* ==================================================== RTC_MR_FRC0_REG ==================================================== */ + #define RTC_RTC_MR_FRC0_REG_RTC_MR_FRC0_Pos (0UL) /*!< RTC_MR_FRC0 (Bit 0) */ + #define RTC_RTC_MR_FRC0_REG_RTC_MR_FRC0_Msk (0xffffffffUL) /*!< RTC_MR_FRC0 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== RTC_MR_FRC1_REG ==================================================== */ + #define RTC_RTC_MR_FRC1_REG_RTC_MR_FRC1_Pos (0UL) /*!< RTC_MR_FRC1 (Bit 0) */ + #define RTC_RTC_MR_FRC1_REG_RTC_MR_FRC1_Msk (0xfUL) /*!< RTC_MR_FRC1 (Bitfield-Mask: 0x0f) */ +/* ================================================== RTC_MR_SEL_8040_REG ================================================== */ + #define RTC_RTC_MR_SEL_8040_REG_RTC_MR_SEL_8040_Pos (0UL) /*!< RTC_MR_SEL_8040 (Bit 0) */ + #define RTC_RTC_MR_SEL_8040_REG_RTC_MR_SEL_8040_Msk (0x1UL) /*!< RTC_MR_SEL_8040 (Bitfield-Mask: 0x01) */ +/* ====================================================== RTC_REQ_REG ====================================================== */ + #define RTC_RTC_REQ_REG_RTC_REQ_LOAD_MR_Pos (3UL) /*!< RTC_REQ_LOAD_MR (Bit 3) */ + #define RTC_RTC_REQ_REG_RTC_REQ_LOAD_MR_Msk (0x8UL) /*!< RTC_REQ_LOAD_MR (Bitfield-Mask: 0x01) */ + #define RTC_RTC_REQ_REG_RTC_REQ_CLR_IRQ_Pos (2UL) /*!< RTC_REQ_CLR_IRQ (Bit 2) */ + #define RTC_RTC_REQ_REG_RTC_REQ_CLR_IRQ_Msk (0x4UL) /*!< RTC_REQ_CLR_IRQ (Bitfield-Mask: 0x01) */ + #define RTC_RTC_REQ_REG_RTC_REQ_CLR_MR_Pos (1UL) /*!< RTC_REQ_CLR_MR (Bit 1) */ + #define RTC_RTC_REQ_REG_RTC_REQ_CLR_MR_Msk (0x2UL) /*!< RTC_REQ_CLR_MR (Bitfield-Mask: 0x01) */ + #define RTC_RTC_REQ_REG_RTC_REQ_CLR_Pos (0UL) /*!< RTC_REQ_CLR (Bit 0) */ + #define RTC_RTC_REQ_REG_RTC_REQ_CLR_Msk (0x1UL) /*!< RTC_REQ_CLR (Bitfield-Mask: 0x01) */ +/* ==================================================== RTM_CONTROL_REG ==================================================== */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_IO_RETEN_CTRL_Pos (16UL) /*!< RTM_CTRL_IO_RETEN_CTRL (Bit 16) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_IO_RETEN_CTRL_Msk (0x1f0000UL) /*!< RTM_CTRL_IO_RETEN_CTRL (Bitfield-Mask: 0x1f) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_RET_RET_Pos (11UL) /*!< RTM_CTRL_RET_RET (Bit 11) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_RET_RET_Msk (0x3800UL) /*!< RTM_CTRL_RET_RET (Bitfield-Mask: 0x07) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_RET_SLR_Pos (8UL) /*!< RTM_CTRL_RET_SLR (Bit 8) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_RET_SLR_Msk (0x700UL) /*!< RTM_CTRL_RET_SLR (Bitfield-Mask: 0x07) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_PWR_DN_INFO_Pos (3UL) /*!< RTM_CTRL_PWR_DN_INFO (Bit 3) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_PWR_DN_INFO_Msk (0x78UL) /*!< RTM_CTRL_PWR_DN_INFO (Bitfield-Mask: 0x0f) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_PDP_ISO_SHARED_IO_Pos (2UL) /*!< RTM_CTRL_PDP_ISO_SHARED_IO (Bit 2) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_PDP_ISO_SHARED_IO_Msk (0x4UL) /*!< RTM_CTRL_PDP_ISO_SHARED_IO (Bitfield-Mask: 0x01) */ + #define RTC_RTM_CONTROL_REG_RTM_INFO_Pos (1UL) /*!< RTM_INFO (Bit 1) */ + #define RTC_RTM_CONTROL_REG_RTM_INFO_Msk (0x2UL) /*!< RTM_INFO (Bitfield-Mask: 0x01) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_PDB_ISO_Pos (0UL) /*!< RTM_CTRL_PDB_ISO (Bit 0) */ + #define RTC_RTM_CONTROL_REG_RTM_CTRL_PDB_ISO_Msk (0x1UL) /*!< RTM_CTRL_PDB_ISO (Bitfield-Mask: 0x01) */ +/* ================================================ TEST_ULDO_SLP_CTRL_REG ================================================= */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_ULDO_HICTRL_SLP_Pos (12UL) /*!< ULDO_HICTRL_SLP (Bit 12) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_ULDO_HICTRL_SLP_Msk (0x3000UL) /*!< ULDO_HICTRL_SLP (Bitfield-Mask: 0x03) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_ULDO_VCTRL_SLP_Pos (8UL) /*!< ULDO_VCTRL_SLP (Bit 8) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_ULDO_VCTRL_SLP_Msk (0xf00UL) /*!< ULDO_VCTRL_SLP (Bitfield-Mask: 0x0f) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_SS_EN_SEL_Pos (6UL) /*!< TEST_SS_EN_SEL (Bit 6) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_SS_EN_SEL_Msk (0xc0UL) /*!< TEST_SS_EN_SEL (Bitfield-Mask: 0x03) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_DW_WAKE_UP_RST_CTRL_Pos (5UL) /*!< TEST_DW_WAKE_UP_RST_CTRL (Bit 5) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_DW_WAKE_UP_RST_CTRL_Msk (0x20UL) /*!< TEST_DW_WAKE_UP_RST_CTRL (Bitfield-Mask: 0x01) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_SENSOR_OUTPUT_MUX_0_Pos (4UL) /*!< TEST_SENSOR_OUTPUT_MUX_0 (Bit 4) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_SENSOR_OUTPUT_MUX_0_Msk (0x10UL) /*!< TEST_SENSOR_OUTPUT_MUX_0 (Bitfield-Mask: 0x01) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_SENSOR_OUTPUT_MUX_1_Pos (3UL) /*!< TEST_SENSOR_OUTPUT_MUX_1 (Bit 3) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_SENSOR_OUTPUT_MUX_1_Msk (0x8UL) /*!< TEST_SENSOR_OUTPUT_MUX_1 (Bitfield-Mask: 0x01) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_SEL_8040_Pos (0UL) /*!< TEST_SEL_8040 (Bit 0) */ + #define RTC_TEST_ULDO_SLP_CTRL_REG_TEST_SEL_8040_Msk (0x7UL) /*!< TEST_SEL_8040 (Bitfield-Mask: 0x07) */ +/* ===================================================== ULDO_CONT_REG ===================================================== */ + #define RTC_ULDO_CONT_REG_DCDC_ST_BYP_Pos (29UL) /*!< DCDC_ST_BYP (Bit 29) */ + #define RTC_ULDO_CONT_REG_DCDC_ST_BYP_Msk (0x20000000UL) /*!< DCDC_ST_BYP (Bitfield-Mask: 0x01) */ + #define RTC_ULDO_CONT_REG_DCDC_ST_CTRL_4_0_Pos (24UL) /*!< DCDC_ST_CTRL_4_0 (Bit 24) */ + #define RTC_ULDO_CONT_REG_DCDC_ST_CTRL_4_0_Msk (0x1f000000UL) /*!< DCDC_ST_CTRL_4_0 (Bitfield-Mask: 0x1f) */ + #define RTC_ULDO_CONT_REG_FLAG_DPLL_LDO_Pos (23UL) /*!< FLAG_DPLL_LDO (Bit 23) */ + #define RTC_ULDO_CONT_REG_FLAG_DPLL_LDO_Msk (0x800000UL) /*!< FLAG_DPLL_LDO (Bitfield-Mask: 0x01) */ + #define RTC_ULDO_CONT_REG_FLAG_ADCSEN_LDO_Pos (22UL) /*!< FLAG_ADCSEN_LDO (Bit 22) */ + #define RTC_ULDO_CONT_REG_FLAG_ADCSEN_LDO_Msk (0x400000UL) /*!< FLAG_ADCSEN_LDO (Bitfield-Mask: 0x01) */ + #define RTC_ULDO_CONT_REG_FLAG_SEN_DVDD_POR_Pos (21UL) /*!< FLAG_SEN_DVDD_POR (Bit 21) */ + #define RTC_ULDO_CONT_REG_FLAG_SEN_DVDD_POR_Msk (0x200000UL) /*!< FLAG_SEN_DVDD_POR (Bitfield-Mask: 0x01) */ + #define RTC_ULDO_CONT_REG_FLAG_RCORE_POR_Pos (20UL) /*!< FLAG_RCORE_POR (Bit 20) */ + #define RTC_ULDO_CONT_REG_FLAG_RCORE_POR_Msk (0x100000UL) /*!< FLAG_RCORE_POR (Bitfield-Mask: 0x01) */ + #define RTC_ULDO_CONT_REG_FLAG_LDODCDC_POR_Pos (19UL) /*!< FLAG_LDODCDC_POR (Bit 19) */ + #define RTC_ULDO_CONT_REG_FLAG_LDODCDC_POR_Msk (0x80000UL) /*!< FLAG_LDODCDC_POR (Bitfield-Mask: 0x01) */ + #define RTC_ULDO_CONT_REG_FLAG_DVDD_POR_Pos (18UL) /*!< FLAG_DVDD_POR (Bit 18) */ + #define RTC_ULDO_CONT_REG_FLAG_DVDD_POR_Msk (0x40000UL) /*!< FLAG_DVDD_POR (Bitfield-Mask: 0x01) */ + #define RTC_ULDO_CONT_REG_RTC_XTAL32K_GM_Pos (16UL) /*!< RTC_XTAL32K_GM (Bit 16) */ + #define RTC_ULDO_CONT_REG_RTC_XTAL32K_GM_Msk (0x30000UL) /*!< RTC_XTAL32K_GM (Bitfield-Mask: 0x03) */ + #define RTC_ULDO_CONT_REG_RTC_OSC32K_ICTRL_Pos (14UL) /*!< RTC_OSC32K_ICTRL (Bit 14) */ + #define RTC_ULDO_CONT_REG_RTC_OSC32K_ICTRL_Msk (0xc000UL) /*!< RTC_OSC32K_ICTRL (Bitfield-Mask: 0x03) */ + #define RTC_ULDO_CONT_REG_RTC_XTAL32K_ICTRL_Pos (12UL) /*!< RTC_XTAL32K_ICTRL (Bit 12) */ + #define RTC_ULDO_CONT_REG_RTC_XTAL32K_ICTRL_Msk (0x3000UL) /*!< RTC_XTAL32K_ICTRL (Bitfield-Mask: 0x03) */ + #define RTC_ULDO_CONT_REG_RTC_ULDO_LICTRL_Pos (10UL) /*!< RTC_ULDO_LICTRL (Bit 10) */ + #define RTC_ULDO_CONT_REG_RTC_ULDO_LICTRL_Msk (0xc00UL) /*!< RTC_ULDO_LICTRL (Bitfield-Mask: 0x03) */ + #define RTC_ULDO_CONT_REG_RTC_ULDO_HICTRL_Pos (8UL) /*!< RTC_ULDO_HICTRL (Bit 8) */ + #define RTC_ULDO_CONT_REG_RTC_ULDO_HICTRL_Msk (0x300UL) /*!< RTC_ULDO_HICTRL (Bitfield-Mask: 0x03) */ + #define RTC_ULDO_CONT_REG_RTC_ULDO_VCTRL_Pos (4UL) /*!< RTC_ULDO_VCTRL (Bit 4) */ + #define RTC_ULDO_CONT_REG_RTC_ULDO_VCTRL_Msk (0xf0UL) /*!< RTC_ULDO_VCTRL (Bitfield-Mask: 0x0f) */ + #define RTC_ULDO_CONT_REG_PDB_TEST_BUF_Pos (1UL) /*!< PDB_TEST_BUF (Bit 1) */ + #define RTC_ULDO_CONT_REG_PDB_TEST_BUF_Msk (0x2UL) /*!< PDB_TEST_BUF (Bitfield-Mask: 0x01) */ + #define RTC_ULDO_CONT_REG_RTC_CLK_INVERSION_Pos (0UL) /*!< RTC_CLK_INVERSION (Bit 0) */ + #define RTC_ULDO_CONT_REG_RTC_CLK_INVERSION_Msk (0x1UL) /*!< RTC_CLK_INVERSION (Bitfield-Mask: 0x01) */ +/* =================================================== WAKEUP_CNT_0_REG ==================================================== */ + #define RTC_WAKEUP_CNT_0_REG_WAKEUP_CNT_0_Pos (0UL) /*!< WAKEUP_CNT_0 (Bit 0) */ + #define RTC_WAKEUP_CNT_0_REG_WAKEUP_CNT_0_Msk (0xffffffffUL) /*!< WAKEUP_CNT_0 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== WAKEUP_CNT_1_REG ==================================================== */ + #define RTC_WAKEUP_CNT_1_REG_WAKEUP_CNT_1_Pos (0UL) /*!< WAKEUP_CNT_1 (Bit 0) */ + #define RTC_WAKEUP_CNT_1_REG_WAKEUP_CNT_1_Msk (0xfUL) /*!< WAKEUP_CNT_1 (Bitfield-Mask: 0x0f) */ +/* ================================================== WAKEUP_SRC_CLR_REG =================================================== */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_TIMER_IRQ_DETECT_CLEAR_Pos (6UL) /*!< WAKEUP_TIMER_IRQ_DETECT_CLEAR (Bit 6) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_TIMER_IRQ_DETECT_CLEAR_Msk (0x40UL) /*!< WAKEUP_TIMER_IRQ_DETECT_CLEAR (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_PULSE_CNT_DETECT_CLEAR_Pos (5UL) /*!< WAKEUP_PULSE_CNT_DETECT_CLEAR (Bit 5) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_PULSE_CNT_DETECT_CLEAR_Msk (0x20UL) /*!< WAKEUP_PULSE_CNT_DETECT_CLEAR (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_SENSOR_DETECT_CLEAR_Pos (4UL) /*!< WAKEUP_SENSOR_DETECT_CLEAR (Bit 4) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_SENSOR_DETECT_CLEAR_Msk (0x10UL) /*!< WAKEUP_SENSOR_DETECT_CLEAR (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_WATCHDOGCLR_Pos (3UL) /*!< WAKEUP_WATCHDOGCLR (Bit 3) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_WATCHDOGCLR_Msk (0x8UL) /*!< WAKEUP_WATCHDOGCLR (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_PORCLR_Pos (2UL) /*!< WAKEUP_PORCLR (Bit 2) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_PORCLR_Msk (0x4UL) /*!< WAKEUP_PORCLR (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_EQCLR_Pos (1UL) /*!< WAKEUP_EQCLR (Bit 1) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_EQCLR_Msk (0x2UL) /*!< WAKEUP_EQCLR (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_GPIOWKCLR_Pos (0UL) /*!< WAKEUP_GPIOWKCLR (Bit 0) */ + #define RTC_WAKEUP_SRC_CLR_REG_WAKEUP_GPIOWKCLR_Msk (0x1UL) /*!< WAKEUP_GPIOWKCLR (Bitfield-Mask: 0x01) */ +/* ================================================ WAKEUP_SRC_CLR_SIG_REG ================================================= */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_ADC_WAKEUP_STATUS_Pos (8UL) /*!< ADC_WAKEUP_STATUS (Bit 8) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_ADC_WAKEUP_STATUS_Msk (0xf00UL) /*!< ADC_WAKEUP_STATUS (Bitfield-Mask: 0x0f) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_TIMER_IRQ_DETECT_Pos (6UL) /*!< TIMER_IRQ_DETECT (Bit 6) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_TIMER_IRQ_DETECT_Msk (0x40UL) /*!< TIMER_IRQ_DETECT (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_PULSE_CNT_DETECT_Pos (5UL) /*!< PULSE_CNT_DETECT (Bit 5) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_PULSE_CNT_DETECT_Msk (0x20UL) /*!< PULSE_CNT_DETECT (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_ADC_DETECT_Pos (4UL) /*!< ADC_DETECT (Bit 4) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_ADC_DETECT_Msk (0x10UL) /*!< ADC_DETECT (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_WATCHDOG_DETECT_Pos (3UL) /*!< WATCHDOG_DETECT (Bit 3) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_WATCHDOG_DETECT_Msk (0x8UL) /*!< WATCHDOG_DETECT (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_POR_INDICATOR_Pos (2UL) /*!< POR_INDICATOR (Bit 2) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_POR_INDICATOR_Msk (0x4UL) /*!< POR_INDICATOR (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_FRC_COMPARE_DETECT_Pos (1UL) /*!< FRC_COMPARE_DETECT (Bit 1) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_FRC_COMPARE_DETECT_Msk (0x2UL) /*!< FRC_COMPARE_DETECT (Bitfield-Mask: 0x01) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_GPIO_WAKE_UP_DETECT_Pos (0UL) /*!< GPIO_WAKE_UP_DETECT (Bit 0) */ + #define RTC_WAKEUP_SRC_CLR_SIG_REG_GPIO_WAKE_UP_DETECT_Msk (0x1UL) /*!< GPIO_WAKE_UP_DETECT (Bitfield-Mask: 0x01) */ +/* ================================================= WDOG_CNT_BIT_POS_REG ================================================== */ + #define RTC_WDOG_CNT_BIT_POS_REG_WATCHDOG_CNT_READ_VAL_Pos (5UL) /*!< WATCHDOG_CNT_READ_VAL (Bit 5) */ + #define RTC_WDOG_CNT_BIT_POS_REG_WATCHDOG_CNT_READ_VAL_Msk (0x60UL) /*!< WATCHDOG_CNT_READ_VAL (Bitfield-Mask: 0x03) */ + #define RTC_WDOG_CNT_BIT_POS_REG_FRC35_14_BIT_SEL_Pos (0UL) /*!< FRC35_14_BIT_SEL (Bit 0) */ + #define RTC_WDOG_CNT_BIT_POS_REG_FRC35_14_BIT_SEL_Msk (0x1fUL) /*!< FRC35_14_BIT_SEL (Bitfield-Mask: 0x1f) */ +/* ==================================================== XADC12_CNTL_REG ==================================================== */ + #define RTC_XADC12_CNTL_REG_AUXADC12_BITNUM_Pos (14UL) /*!< AUXADC12_BITNUM (Bit 14) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_BITNUM_Msk (0xc000UL) /*!< AUXADC12_BITNUM (Bitfield-Mask: 0x03) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_IVREF_Pos (12UL) /*!< AUXADC12_IVREF (Bit 12) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_IVREF_Msk (0x3000UL) /*!< AUXADC12_IVREF (Bitfield-Mask: 0x03) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_ICOMPS_Pos (10UL) /*!< AUXADC12_ICOMPS (Bit 10) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_ICOMPS_Msk (0xc00UL) /*!< AUXADC12_ICOMPS (Bitfield-Mask: 0x03) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_ICOMP_Pos (8UL) /*!< AUXADC12_ICOMP (Bit 8) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_ICOMP_Msk (0x300UL) /*!< AUXADC12_ICOMP (Bitfield-Mask: 0x03) */ + #define RTC_XADC12_CNTL_REG_SS_EN_OUTPUT_VAL_Pos (7UL) /*!< SS_EN_OUTPUT_VAL (Bit 7) */ + #define RTC_XADC12_CNTL_REG_SS_EN_OUTPUT_VAL_Msk (0x80UL) /*!< SS_EN_OUTPUT_VAL (Bitfield-Mask: 0x01) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_TRIM_Pos (4UL) /*!< AUXADC12_TRIM (Bit 4) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_TRIM_Msk (0x70UL) /*!< AUXADC12_TRIM (Bitfield-Mask: 0x07) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_PDB_Pos (1UL) /*!< AUXADC12_PDB (Bit 1) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_PDB_Msk (0x2UL) /*!< AUXADC12_PDB (Bitfield-Mask: 0x01) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_RESET_Pos (0UL) /*!< AUXADC12_RESET (Bit 0) */ + #define RTC_XADC12_CNTL_REG_AUXADC12_RESET_Msk (0x1UL) /*!< AUXADC12_RESET (Bitfield-Mask: 0x01) */ +/* =================================================== XADC12_SP_NUM_REG =================================================== */ + #define RTC_XADC12_SP_NUM_REG_ADC_SAMPLE_RANGE_SEL_Pos (3UL) /*!< ADC_SAMPLE_RANGE_SEL (Bit 3) */ + #define RTC_XADC12_SP_NUM_REG_ADC_SAMPLE_RANGE_SEL_Msk (0xf8UL) /*!< ADC_SAMPLE_RANGE_SEL (Bitfield-Mask: 0x1f) */ + #define RTC_XADC12_SP_NUM_REG_ADC_SMLP_NUM_AVR_Pos (0UL) /*!< ADC_SMLP_NUM_AVR (Bit 0) */ + #define RTC_XADC12_SP_NUM_REG_ADC_SMLP_NUM_AVR_Msk (0x7UL) /*!< ADC_SMLP_NUM_AVR (Bitfield-Mask: 0x07) */ +/* =================================================== XADC12_THR01_REG ==================================================== */ + #define RTC_XADC12_THR01_REG_XADC12_THR_CONFIG_CH1_Pos (28UL) /*!< XADC12_THR_CONFIG_CH1 (Bit 28) */ + #define RTC_XADC12_THR01_REG_XADC12_THR_CONFIG_CH1_Msk (0x30000000UL) /*!< XADC12_THR_CONFIG_CH1 (Bitfield-Mask: 0x03) */ + #define RTC_XADC12_THR01_REG_XADC12_THR_LEVEL1_CH2_Pos (16UL) /*!< XADC12_THR_LEVEL1_CH2 (Bit 16) */ + #define RTC_XADC12_THR01_REG_XADC12_THR_LEVEL1_CH2_Msk (0xfff0000UL) /*!< XADC12_THR_LEVEL1_CH2 (Bitfield-Mask: 0xfff) */ + #define RTC_XADC12_THR01_REG_XADC12_THR_CONFIG_CH0_Pos (12UL) /*!< XADC12_THR_CONFIG_CH0 (Bit 12) */ + #define RTC_XADC12_THR01_REG_XADC12_THR_CONFIG_CH0_Msk (0x3000UL) /*!< XADC12_THR_CONFIG_CH0 (Bitfield-Mask: 0x03) */ + #define RTC_XADC12_THR01_REG_XADC12_THR_LEVEL0_CH0_Pos (0UL) /*!< XADC12_THR_LEVEL0_CH0 (Bit 0) */ + #define RTC_XADC12_THR01_REG_XADC12_THR_LEVEL0_CH0_Msk (0xfffUL) /*!< XADC12_THR_LEVEL0_CH0 (Bitfield-Mask: 0xfff) */ +/* =================================================== XADC12_THR23_REG ==================================================== */ + #define RTC_XADC12_THR23_REG_XADC12_THR_CONFIG_CH3_Pos (28UL) /*!< XADC12_THR_CONFIG_CH3 (Bit 28) */ + #define RTC_XADC12_THR23_REG_XADC12_THR_CONFIG_CH3_Msk (0x30000000UL) /*!< XADC12_THR_CONFIG_CH3 (Bitfield-Mask: 0x03) */ + #define RTC_XADC12_THR23_REG_XADC12_THR_LEVEL3_CH3_Pos (16UL) /*!< XADC12_THR_LEVEL3_CH3 (Bit 16) */ + #define RTC_XADC12_THR23_REG_XADC12_THR_LEVEL3_CH3_Msk (0xfff0000UL) /*!< XADC12_THR_LEVEL3_CH3 (Bitfield-Mask: 0xfff) */ + #define RTC_XADC12_THR23_REG_XADC12_THR_CONFIG_CH2_Pos (12UL) /*!< XADC12_THR_CONFIG_CH2 (Bit 12) */ + #define RTC_XADC12_THR23_REG_XADC12_THR_CONFIG_CH2_Msk (0x3000UL) /*!< XADC12_THR_CONFIG_CH2 (Bitfield-Mask: 0x03) */ + #define RTC_XADC12_THR23_REG_XADC12_THR_LEVEL2_CH2_Pos (0UL) /*!< XADC12_THR_LEVEL2_CH2 (Bit 0) */ + #define RTC_XADC12_THR23_REG_XADC12_THR_LEVEL2_CH2_Msk (0xfffUL) /*!< XADC12_THR_LEVEL2_CH2 (Bitfield-Mask: 0xfff) */ +/* ================================================= XADC12_TIMER_SET_REG ================================================== */ + #define RTC_XADC12_TIMER_SET_REG_ASWCH_CTRL_Pos (24UL) /*!< ASWCH_CTRL (Bit 24) */ + #define RTC_XADC12_TIMER_SET_REG_ASWCH_CTRL_Msk (0x1f000000UL) /*!< ASWCH_CTRL (Bitfield-Mask: 0x1f) */ + #define RTC_XADC12_TIMER_SET_REG_EXT_SEN_ACTIVATE_TMR_VAL_Pos (16UL) /*!< EXT_SEN_ACTIVATE_TMR_VAL (Bit 16) */ + #define RTC_XADC12_TIMER_SET_REG_EXT_SEN_ACTIVATE_TMR_VAL_Msk (0xf0000UL) /*!< EXT_SEN_ACTIVATE_TMR_VAL (Bitfield-Mask: 0x0f) */ + #define RTC_XADC12_TIMER_SET_REG_IP3_ACTIVATE_TMR_VAL_Pos (8UL) /*!< IP3_ACTIVATE_TMR_VAL (Bit 8) */ + #define RTC_XADC12_TIMER_SET_REG_IP3_ACTIVATE_TMR_VAL_Msk (0x3f00UL) /*!< IP3_ACTIVATE_TMR_VAL (Bitfield-Mask: 0x3f) */ + #define RTC_XADC12_TIMER_SET_REG_SENSOR_DETECT_ACT_Pos (7UL) /*!< SENSOR_DETECT_ACT (Bit 7) */ + #define RTC_XADC12_TIMER_SET_REG_SENSOR_DETECT_ACT_Msk (0x80UL) /*!< SENSOR_DETECT_ACT (Bitfield-Mask: 0x01) */ + #define RTC_XADC12_TIMER_SET_REG_X12_CLK_TMR_CNT_SRC_Pos (4UL) /*!< X12_CLK_TMR_CNT_SRC (Bit 4) */ + #define RTC_XADC12_TIMER_SET_REG_X12_CLK_TMR_CNT_SRC_Msk (0x70UL) /*!< X12_CLK_TMR_CNT_SRC (Bitfield-Mask: 0x07) */ + #define RTC_XADC12_TIMER_SET_REG_AX12B_TIMER_VAL_Pos (0UL) /*!< AX12B_TIMER_VAL (Bit 0) */ + #define RTC_XADC12_TIMER_SET_REG_AX12B_TIMER_VAL_Msk (0xfUL) /*!< AX12B_TIMER_VAL (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ SDEMMC ================ */ +/* =========================================================================================================================== */ + +/* ============================================== SDEMMC_ADMAERRORSTATUS_REG =============================================== */ + #define SDEMMC_SDEMMC_ADMAERRORSTATUS_REG_LengthMismatchError_Pos (2UL) /*!< LengthMismatchError (Bit 2) */ + #define SDEMMC_SDEMMC_ADMAERRORSTATUS_REG_LengthMismatchError_Msk (0x4UL) /*!< LengthMismatchError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_ADMAERRORSTATUS_REG_ADMAErrorState_Pos (0UL) /*!< ADMAErrorState (Bit 0) */ + #define SDEMMC_SDEMMC_ADMAERRORSTATUS_REG_ADMAErrorState_Msk (0x3UL) /*!< ADMAErrorState (Bitfield-Mask: 0x03) */ +/* ============================================= SDEMMC_ADMA_SYS_ADDR_LOW_REG ============================================== */ + #define SDEMMC_SDEMMC_ADMA_SYS_ADDR_LOW_REG_ADMASystemAddress_Pos (0UL) /*!< ADMASystemAddress (Bit 0) */ + #define SDEMMC_SDEMMC_ADMA_SYS_ADDR_LOW_REG_ADMASystemAddress_Msk (0xffffffffUL) /*!< ADMASystemAddress (Bitfield-Mask: 0xffffffff) */ +/* ============================================ SDEMMC_ADMA_SYS_ADDR_UPPER_REG ============================================= */ + #define SDEMMC_SDEMMC_ADMA_SYS_ADDR_UPPER_REG_ADMASystemAddressUpperbits_Pos (0UL) /*!< ADMASystemAddressUpperbits (Bit 0) */ + #define SDEMMC_SDEMMC_ADMA_SYS_ADDR_UPPER_REG_ADMASystemAddressUpperbits_Msk (0xffffffffUL) /*!< ADMASystemAddressUpperbits (Bitfield-Mask: 0xffffffff) */ +/* ============================================= SDEMMC_AUTOCMDERRORSTATUS_REG ============================================= */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_PresetValueEnable_Pos (31UL) /*!< PresetValueEnable (Bit 31) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_PresetValueEnable_Msk (0x80000000UL) /*!< PresetValueEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AsynchronousInterruptEnable_Pos (30UL) /*!< AsynchronousInterruptEnable (Bit 30) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AsynchronousInterruptEnable_Msk (0x40000000UL) /*!< AsynchronousInterruptEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_SamplingClockSelect_Pos (23UL) /*!< SamplingClockSelect (Bit 23) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_SamplingClockSelect_Msk (0x800000UL) /*!< SamplingClockSelect (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_ExecuteTuning_Pos (22UL) /*!< ExecuteTuning (Bit 22) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_ExecuteTuning_Msk (0x400000UL) /*!< ExecuteTuning (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_DriveStrengthSelect_Pos (20UL) /*!< DriveStrengthSelect (Bit 20) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_DriveStrengthSelect_Msk (0x300000UL) /*!< DriveStrengthSelect (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_SignalingEnable1_8V_Pos (19UL) /*!< SignalingEnable1_8V (Bit 19) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_SignalingEnable1_8V_Msk (0x80000UL) /*!< SignalingEnable1_8V (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_UHSModeSelect_Pos (16UL) /*!< UHSModeSelect (Bit 16) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_UHSModeSelect_Msk (0x70000UL) /*!< UHSModeSelect (Bitfield-Mask: 0x07) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_CommandNotIssuedByAutoCMD12Error_Pos (7UL) /*!< CommandNotIssuedByAutoCMD12Error (Bit 7) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_CommandNotIssuedByAutoCMD12Error_Msk (0x80UL) /*!< CommandNotIssuedByAutoCMD12Error (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMDIndexError_Pos (4UL) /*!< AutoCMDIndexError (Bit 4) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMDIndexError_Msk (0x10UL) /*!< AutoCMDIndexError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMDEndBitError_Pos (3UL) /*!< AutoCMDEndBitError (Bit 3) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMDEndBitError_Msk (0x8UL) /*!< AutoCMDEndBitError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMDCRCError_Pos (2UL) /*!< AutoCMDCRCError (Bit 2) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMDCRCError_Msk (0x4UL) /*!< AutoCMDCRCError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMDTimeoutError_Pos (1UL) /*!< AutoCMDTimeoutError (Bit 1) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMDTimeoutError_Msk (0x2UL) /*!< AutoCMDTimeoutError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMD12NotExecuted_Pos (0UL) /*!< AutoCMD12NotExecuted (Bit 0) */ + #define SDEMMC_SDEMMC_AUTOCMDERRORSTATUS_REG_AutoCMD12NotExecuted_Msk (0x1UL) /*!< AutoCMD12NotExecuted (Bitfield-Mask: 0x01) */ +/* =================================================== SDEMMC_BLOCK_REG ==================================================== */ + #define SDEMMC_SDEMMC_BLOCK_REG_BlockCountForCurrentTransfer_Pos (16UL) /*!< BlockCountForCurrentTransfer (Bit 16) */ + #define SDEMMC_SDEMMC_BLOCK_REG_BlockCountForCurrentTransfer_Msk (0xffff0000UL) /*!< BlockCountForCurrentTransfer (Bitfield-Mask: 0xffff) */ + #define SDEMMC_SDEMMC_BLOCK_REG_HostSDMABufferBoundry_Pos (12UL) /*!< HostSDMABufferBoundry (Bit 12) */ + #define SDEMMC_SDEMMC_BLOCK_REG_HostSDMABufferBoundry_Msk (0x7000UL) /*!< HostSDMABufferBoundry (Bitfield-Mask: 0x07) */ + #define SDEMMC_SDEMMC_BLOCK_REG_TransferBlockSize_Pos (0UL) /*!< TransferBlockSize (Bit 0) */ + #define SDEMMC_SDEMMC_BLOCK_REG_TransferBlockSize_Msk (0xfffUL) /*!< TransferBlockSize (Bitfield-Mask: 0xfff) */ +/* ============================================= SDEMMC_BOOTTIMEOUT_CTRL__REG ============================================== */ + #define SDEMMC_SDEMMC_BOOTTIMEOUT_CTRL__REG_BootDataTimeoutCounterValue_Pos (0UL) /*!< BootDataTimeoutCounterValue (Bit 0) */ + #define SDEMMC_SDEMMC_BOOTTIMEOUT_CTRL__REG_BootDataTimeoutCounterValue_Msk (0xffffffffUL) /*!< BootDataTimeoutCounterValue (Bitfield-Mask: 0xffffffff) */ +/* =============================================== SDEMMC_BUFFERDATAPORT_REG =============================================== */ + #define SDEMMC_SDEMMC_BUFFERDATAPORT_REG_BufferData_Pos (0UL) /*!< BufferData (Bit 0) */ + #define SDEMMC_SDEMMC_BUFFERDATAPORT_REG_BufferData_Msk (0xffffffffUL) /*!< BufferData (Bitfield-Mask: 0xffffffff) */ +/* =============================================== SDEMMC_CAPABILITIES0_REG ================================================ */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SlotType_Pos (30UL) /*!< SlotType (Bit 30) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SlotType_Msk (0xc0000000UL) /*!< SlotType (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_AsynchronousInterruptSupport_Pos (29UL) /*!< AsynchronousInterruptSupport (Bit 29) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_AsynchronousInterruptSupport_Msk (0x20000000UL) /*!< AsynchronousInterruptSupport (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SystemBusSupport64bit_Pos (28UL) /*!< SystemBusSupport64bit (Bit 28) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SystemBusSupport64bit_Msk (0x10000000UL) /*!< SystemBusSupport64bit (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_VoltageSupport18V_Pos (26UL) /*!< VoltageSupport18V (Bit 26) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_VoltageSupport18V_Msk (0x4000000UL) /*!< VoltageSupport18V (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_VoltageSupport30V_Pos (25UL) /*!< VoltageSupport30V (Bit 25) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_VoltageSupport30V_Msk (0x2000000UL) /*!< VoltageSupport30V (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_VoltageSupport33V_Pos (24UL) /*!< VoltageSupport33V (Bit 24) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_VoltageSupport33V_Msk (0x1000000UL) /*!< VoltageSupport33V (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SuspendResumeSupport_Pos (23UL) /*!< SuspendResumeSupport (Bit 23) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SuspendResumeSupport_Msk (0x800000UL) /*!< SuspendResumeSupport (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SDMASupport_Pos (22UL) /*!< SDMASupport (Bit 22) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SDMASupport_Msk (0x400000UL) /*!< SDMASupport (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_HighSpeedSupport_Pos (21UL) /*!< HighSpeedSupport (Bit 21) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_HighSpeedSupport_Msk (0x200000UL) /*!< HighSpeedSupport (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_ADMA2Support_Pos (19UL) /*!< ADMA2Support (Bit 19) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_ADMA2Support_Msk (0x80000UL) /*!< ADMA2Support (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SupportforEmbeddedDevice8bit_Pos (18UL) /*!< SupportforEmbeddedDevice8bit (Bit 18) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_SupportforEmbeddedDevice8bit_Msk (0x40000UL) /*!< SupportforEmbeddedDevice8bit (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_MaxBlockLength_Pos (16UL) /*!< MaxBlockLength (Bit 16) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_MaxBlockLength_Msk (0x30000UL) /*!< MaxBlockLength (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_BaseClockFrequencyForSDClock_Pos (8UL) /*!< BaseClockFrequencyForSDClock (Bit 8) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_BaseClockFrequencyForSDClock_Msk (0xff00UL) /*!< BaseClockFrequencyForSDClock (Bitfield-Mask: 0xff) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_TimeoutClockUnit_Pos (7UL) /*!< TimeoutClockUnit (Bit 7) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_TimeoutClockUnit_Msk (0x80UL) /*!< TimeoutClockUnit (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_TimeoutClockFrequency_Pos (0UL) /*!< TimeoutClockFrequency (Bit 0) */ + #define SDEMMC_SDEMMC_CAPABILITIES0_REG_TimeoutClockFrequency_Msk (0x3fUL) /*!< TimeoutClockFrequency (Bitfield-Mask: 0x3f) */ +/* =============================================== SDEMMC_CAPABILITIES1_REG ================================================ */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_ClockMultiplier_Pos (16UL) /*!< ClockMultiplier (Bit 16) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_ClockMultiplier_Msk (0xff0000UL) /*!< ClockMultiplier (Bitfield-Mask: 0xff) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_ReTuningModes_Pos (14UL) /*!< ReTuningModes (Bit 14) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_ReTuningModes_Msk (0xc000UL) /*!< ReTuningModes (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_UseTuningforSDR50_Pos (13UL) /*!< UseTuningforSDR50 (Bit 13) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_UseTuningforSDR50_Msk (0x2000UL) /*!< UseTuningforSDR50 (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_TimerCountforReTuning_Pos (8UL) /*!< TimerCountforReTuning (Bit 8) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_TimerCountforReTuning_Msk (0xf00UL) /*!< TimerCountforReTuning (Bitfield-Mask: 0x0f) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_DriverTypeDSupport_Pos (6UL) /*!< DriverTypeDSupport (Bit 6) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_DriverTypeDSupport_Msk (0x40UL) /*!< DriverTypeDSupport (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_DriverTypeCSupport_Pos (5UL) /*!< DriverTypeCSupport (Bit 5) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_DriverTypeCSupport_Msk (0x20UL) /*!< DriverTypeCSupport (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_DriverTypeASupport_Pos (4UL) /*!< DriverTypeASupport (Bit 4) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_DriverTypeASupport_Msk (0x10UL) /*!< DriverTypeASupport (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_DDR50Support_Pos (2UL) /*!< DDR50Support (Bit 2) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_DDR50Support_Msk (0x4UL) /*!< DDR50Support (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_SDR104Support_Pos (1UL) /*!< SDR104Support (Bit 1) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_SDR104Support_Msk (0x2UL) /*!< SDR104Support (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_SDR50Support_Pos (0UL) /*!< SDR50Support (Bit 0) */ + #define SDEMMC_SDEMMC_CAPABILITIES1_REG_SDR50Support_Msk (0x1UL) /*!< SDR50Support (Bitfield-Mask: 0x01) */ +/* =============================================== SDEMMC_DEBUGSELECTION_REG =============================================== */ + #define SDEMMC_SDEMMC_DEBUGSELECTION_REG_DebugSel_Pos (0UL) /*!< DebugSel (Bit 0) */ + #define SDEMMC_SDEMMC_DEBUGSELECTION_REG_DebugSel_Msk (0x1UL) /*!< DebugSel (Bitfield-Mask: 0x01) */ +/* ============================================ SDEMMC_FORCE_EVENET_ERRSTAT_REG ============================================ */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForVendorSpecificError_Pos (26UL) /*!< ForceEventForVendorSpecificError (Bit 26) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForVendorSpecificError_Msk (0xfc000000UL) /*!< ForceEventForVendorSpecificError (Bitfield-Mask: 0x3f) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForADMAError_Pos (25UL) /*!< ForceEventForADMAError (Bit 25) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForADMAError_Msk (0x2000000UL) /*!< ForceEventForADMAError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDError_Pos (24UL) /*!< ForceEventForAutoCMDError (Bit 24) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDError_Msk (0x1000000UL) /*!< ForceEventForAutoCMDError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCurrentLimitError_Pos (23UL) /*!< ForceEventForCurrentLimitError (Bit 23) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCurrentLimitError_Msk (0x800000UL) /*!< ForceEventForCurrentLimitError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForDataEndBitError_Pos (22UL) /*!< ForceEventForDataEndBitError (Bit 22) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForDataEndBitError_Msk (0x400000UL) /*!< ForceEventForDataEndBitError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForDataCRCError_Pos (21UL) /*!< ForceEventForDataCRCError (Bit 21) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForDataCRCError_Msk (0x200000UL) /*!< ForceEventForDataCRCError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForDataTimeoutError_Pos (20UL) /*!< ForceEventForDataTimeoutError (Bit 20) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForDataTimeoutError_Msk (0x100000UL) /*!< ForceEventForDataTimeoutError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandIndexError_Pos (19UL) /*!< ForceEventForCommandIndexError (Bit 19) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandIndexError_Msk (0x80000UL) /*!< ForceEventForCommandIndexError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandEndBitError_Pos (18UL) /*!< ForceEventForCommandEndBitError (Bit 18) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandEndBitError_Msk (0x40000UL) /*!< ForceEventForCommandEndBitError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandCRCError_Pos (17UL) /*!< ForceEventForCommandCRCError (Bit 17) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandCRCError_Msk (0x20000UL) /*!< ForceEventForCommandCRCError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandTimeoutError_Pos (16UL) /*!< ForceEventForCommandTimeoutError (Bit 16) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandTimeoutError_Msk (0x10000UL) /*!< ForceEventForCommandTimeoutError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandNotIssuedByAutoCMD12Error_Pos (7UL) /*!< ForceEventForCommandNotIssuedByAutoCMD12Error (Bit 7) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForCommandNotIssuedByAutoCMD12Error_Msk (0x80UL) /*!< ForceEventForCommandNotIssuedByAutoCMD12Error (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDIndex_Pos (4UL) /*!< ForceEventForAutoCMDIndex (Bit 4) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDIndex_Msk (0x10UL) /*!< ForceEventForAutoCMDIndex (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDEndBit_Pos (3UL) /*!< ForceEventForAutoCMDEndBit (Bit 3) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDEndBit_Msk (0x8UL) /*!< ForceEventForAutoCMDEndBit (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDCRC_Pos (2UL) /*!< ForceEventForAutoCMDCRC (Bit 2) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDCRC_Msk (0x4UL) /*!< ForceEventForAutoCMDCRC (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDTimeout_Pos (1UL) /*!< ForceEventForAutoCMDTimeout (Bit 1) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMDTimeout_Msk (0x2UL) /*!< ForceEventForAutoCMDTimeout (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMD12NotExec_Pos (0UL) /*!< ForceEventForAutoCMD12NotExec (Bit 0) */ + #define SDEMMC_SDEMMC_FORCE_EVENET_ERRSTAT_REG_ForceEventForAutoCMD12NotExec_Msk (0x1UL) /*!< ForceEventForAutoCMD12NotExec (Bitfield-Mask: 0x01) */ +/* ============================================= SDEMMC_GLB_ITNR_SIGNAL_EN_REG ============================================= */ + #define SDEMMC_SDEMMC_GLB_ITNR_SIGNAL_EN_REG_IntSrcSD_Pos (2UL) /*!< IntSrcSD (Bit 2) */ + #define SDEMMC_SDEMMC_GLB_ITNR_SIGNAL_EN_REG_IntSrcSD_Msk (0x4UL) /*!< IntSrcSD (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_GLB_ITNR_SIGNAL_EN_REG_IntSrcXD_Pos (1UL) /*!< IntSrcXD (Bit 1) */ + #define SDEMMC_SDEMMC_GLB_ITNR_SIGNAL_EN_REG_IntSrcXD_Msk (0x2UL) /*!< IntSrcXD (Bitfield-Mask: 0x01) */ +/* ============================================= SDEMMC_GLB_ITNR_STATUS_EN_REG ============================================= */ + #define SDEMMC_SDEMMC_GLB_ITNR_STATUS_EN_REG_IntSrcSD_Pos (2UL) /*!< IntSrcSD (Bit 2) */ + #define SDEMMC_SDEMMC_GLB_ITNR_STATUS_EN_REG_IntSrcSD_Msk (0x4UL) /*!< IntSrcSD (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_GLB_ITNR_STATUS_EN_REG_IntSrcXD_Pos (1UL) /*!< IntSrcXD (Bit 1) */ + #define SDEMMC_SDEMMC_GLB_ITNR_STATUS_EN_REG_IntSrcXD_Msk (0x2UL) /*!< IntSrcXD (Bitfield-Mask: 0x01) */ +/* ============================================== SDEMMC_GLB_ITNR_STATUS_REG =============================================== */ + #define SDEMMC_SDEMMC_GLB_ITNR_STATUS_REG_IntSrcSD_Pos (2UL) /*!< IntSrcSD (Bit 2) */ + #define SDEMMC_SDEMMC_GLB_ITNR_STATUS_REG_IntSrcSD_Msk (0x4UL) /*!< IntSrcSD (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_GLB_ITNR_STATUS_REG_IntSrcXD_Pos (1UL) /*!< IntSrcXD (Bit 1) */ + #define SDEMMC_SDEMMC_GLB_ITNR_STATUS_REG_IntSrcXD_Msk (0x2UL) /*!< IntSrcXD (Bitfield-Mask: 0x01) */ +/* ================================================ SDEMMC_HOST_CTRL_1_REG ================================================= */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_WakeupEventEnableOnSDCardRemoval_Pos (26UL) /*!< WakeupEventEnableOnSDCardRemoval (Bit 26) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_WakeupEventEnableOnSDCardRemoval_Msk (0x4000000UL) /*!< WakeupEventEnableOnSDCardRemoval (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_WakeupEventEnableOnSDCardInsertion_Pos (25UL) /*!< WakeupEventEnableOnSDCardInsertion (Bit 25) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_WakeupEventEnableOnSDCardInsertion_Msk (0x2000000UL) /*!< WakeupEventEnableOnSDCardInsertion (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_WakeupEventEnableOnCardInterrupt_Pos (24UL) /*!< WakeupEventEnableOnCardInterrupt (Bit 24) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_WakeupEventEnableOnCardInterrupt_Msk (0x1000000UL) /*!< WakeupEventEnableOnCardInterrupt (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_BootAckChk_Pos (23UL) /*!< BootAckChk (Bit 23) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_BootAckChk_Msk (0x800000UL) /*!< BootAckChk (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_AltBootEn_Pos (22UL) /*!< AltBootEn (Bit 22) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_AltBootEn_Msk (0x400000UL) /*!< AltBootEn (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_BootEn_Pos (21UL) /*!< BootEn (Bit 21) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_BootEn_Msk (0x200000UL) /*!< BootEn (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_SpiMode_Pos (20UL) /*!< SpiMode (Bit 20) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_SpiMode_Msk (0x100000UL) /*!< SpiMode (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_InterruptAtBlockGap_Pos (19UL) /*!< InterruptAtBlockGap (Bit 19) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_InterruptAtBlockGap_Msk (0x80000UL) /*!< InterruptAtBlockGap (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_ReadWaitControl_Pos (18UL) /*!< ReadWaitControl (Bit 18) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_ReadWaitControl_Msk (0x40000UL) /*!< ReadWaitControl (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_ContinueRequest_Pos (17UL) /*!< ContinueRequest (Bit 17) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_ContinueRequest_Msk (0x20000UL) /*!< ContinueRequest (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_StopAtBlockGapRequest_Pos (16UL) /*!< StopAtBlockGapRequest (Bit 16) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_StopAtBlockGapRequest_Msk (0x10000UL) /*!< StopAtBlockGapRequest (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_HardwareRst_Pos (12UL) /*!< HardwareRst (Bit 12) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_HardwareRst_Msk (0x1000UL) /*!< HardwareRst (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_SDBusVoltageSelect_Pos (9UL) /*!< SDBusVoltageSelect (Bit 9) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_SDBusVoltageSelect_Msk (0xe00UL) /*!< SDBusVoltageSelect (Bitfield-Mask: 0x07) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_SDBusPower_Pos (8UL) /*!< SDBusPower (Bit 8) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_SDBusPower_Msk (0x100UL) /*!< SDBusPower (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_CardDetectSignalSelection_Pos (7UL) /*!< CardDetectSignalSelection (Bit 7) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_CardDetectSignalSelection_Msk (0x80UL) /*!< CardDetectSignalSelection (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_CardDetectTestLevel_Pos (6UL) /*!< CardDetectTestLevel (Bit 6) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_CardDetectTestLevel_Msk (0x40UL) /*!< CardDetectTestLevel (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_ExtendedDataTransferWidth_Pos (5UL) /*!< ExtendedDataTransferWidth (Bit 5) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_ExtendedDataTransferWidth_Msk (0x20UL) /*!< ExtendedDataTransferWidth (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_DMASelect_Pos (3UL) /*!< DMASelect (Bit 3) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_DMASelect_Msk (0x18UL) /*!< DMASelect (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_HighSpeedEnable_Pos (2UL) /*!< HighSpeedEnable (Bit 2) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_HighSpeedEnable_Msk (0x4UL) /*!< HighSpeedEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_DataTransferWidth_Pos (1UL) /*!< DataTransferWidth (Bit 1) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_DataTransferWidth_Msk (0x2UL) /*!< DataTransferWidth (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_LEDControl_Pos (0UL) /*!< LEDControl (Bit 0) */ + #define SDEMMC_SDEMMC_HOST_CTRL_1_REG_LEDControl_Msk (0x1UL) /*!< LEDControl (Bitfield-Mask: 0x01) */ +/* ============================================ SDEMMC_MAX_CUR_CAPABILITIES_REG ============================================ */ + #define SDEMMC_SDEMMC_MAX_CUR_CAPABILITIES_REG_MaximumCurrentFor1_8V_Pos (16UL) /*!< MaximumCurrentFor1_8V (Bit 16) */ + #define SDEMMC_SDEMMC_MAX_CUR_CAPABILITIES_REG_MaximumCurrentFor1_8V_Msk (0xff0000UL) /*!< MaximumCurrentFor1_8V (Bitfield-Mask: 0xff) */ + #define SDEMMC_SDEMMC_MAX_CUR_CAPABILITIES_REG_MaximumCurrentFor3_0V_Pos (8UL) /*!< MaximumCurrentFor3_0V (Bit 8) */ + #define SDEMMC_SDEMMC_MAX_CUR_CAPABILITIES_REG_MaximumCurrentFor3_0V_Msk (0xff00UL) /*!< MaximumCurrentFor3_0V (Bitfield-Mask: 0xff) */ + #define SDEMMC_SDEMMC_MAX_CUR_CAPABILITIES_REG_MaximumCurrentFor3_3V_Pos (0UL) /*!< MaximumCurrentFor3_3V (Bit 0) */ + #define SDEMMC_SDEMMC_MAX_CUR_CAPABILITIES_REG_MaximumCurrentFor3_3V_Msk (0xffUL) /*!< MaximumCurrentFor3_3V (Bitfield-Mask: 0xff) */ +/* =========================================== SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG ============================================ */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_VendorSpecificErrorSignalEnb_Pos (27UL) /*!< VendorSpecificErrorSignalEnb (Bit 27) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_VendorSpecificErrorSignalEnb_Msk (0xf8000000UL) /*!< VendorSpecificErrorSignalEnb (Bitfield-Mask: 0x1f) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_TuningErrorSignalEnb_Pos (26UL) /*!< TuningErrorSignalEnb (Bit 26) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_TuningErrorSignalEnb_Msk (0x4000000UL) /*!< TuningErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_ADMAErrorSignalEnb_Pos (25UL) /*!< ADMAErrorSignalEnb (Bit 25) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_ADMAErrorSignalEnb_Msk (0x2000000UL) /*!< ADMAErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_AutoCMDErrorSignalEnb_Pos (24UL) /*!< AutoCMDErrorSignalEnb (Bit 24) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_AutoCMDErrorSignalEnb_Msk (0x1000000UL) /*!< AutoCMDErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CurrentLimitErrorSignalEnb_Pos (23UL) /*!< CurrentLimitErrorSignalEnb (Bit 23) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CurrentLimitErrorSignalEnb_Msk (0x800000UL) /*!< CurrentLimitErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_DataEndBitErrorSignalEnb_Pos (22UL) /*!< DataEndBitErrorSignalEnb (Bit 22) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_DataEndBitErrorSignalEnb_Msk (0x400000UL) /*!< DataEndBitErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_DataCRCErrorSignalEnb_Pos (21UL) /*!< DataCRCErrorSignalEnb (Bit 21) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_DataCRCErrorSignalEnb_Msk (0x200000UL) /*!< DataCRCErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_DataTimeoutErrorSignalEnb_Pos (20UL) /*!< DataTimeoutErrorSignalEnb (Bit 20) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_DataTimeoutErrorSignalEnb_Msk (0x100000UL) /*!< DataTimeoutErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandIndexErrorSignalEnb_Pos (19UL) /*!< CommandIndexErrorSignalEnb (Bit 19) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandIndexErrorSignalEnb_Msk (0x80000UL) /*!< CommandIndexErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandEndBitErrorSignalEnb_Pos (18UL) /*!< CommandEndBitErrorSignalEnb (Bit 18) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandEndBitErrorSignalEnb_Msk (0x40000UL) /*!< CommandEndBitErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandCRCErrorSignalEnb_Pos (17UL) /*!< CommandCRCErrorSignalEnb (Bit 17) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandCRCErrorSignalEnb_Msk (0x20000UL) /*!< CommandCRCErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandTimeoutErrorSignalEnb_Pos (16UL) /*!< CommandTimeoutErrorSignalEnb (Bit 16) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandTimeoutErrorSignalEnb_Msk (0x10000UL) /*!< CommandTimeoutErrorSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_FixedTo0_Pos (15UL) /*!< FixedTo0 (Bit 15) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_FixedTo0_Msk (0x8000UL) /*!< FixedTo0 (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BootTerminateInterruptSignalEnable_Pos (14UL) /*!< BootTerminateInterruptSignalEnable (Bit 14) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BootTerminateInterruptSignalEnable_Msk (0x4000UL) /*!< BootTerminateInterruptSignalEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BootAckRcvSignalEnable_Pos (13UL) /*!< BootAckRcvSignalEnable (Bit 13) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BootAckRcvSignalEnable_Msk (0x2000UL) /*!< BootAckRcvSignalEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_ReTuningEventSignalEnable_Pos (12UL) /*!< ReTuningEventSignalEnable (Bit 12) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_ReTuningEventSignalEnable_Msk (0x1000UL) /*!< ReTuningEventSignalEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_INT_CSignalEnb_Pos (11UL) /*!< INT_CSignalEnb (Bit 11) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_INT_CSignalEnb_Msk (0x800UL) /*!< INT_CSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_INT_BSignalEnb_Pos (10UL) /*!< INT_BSignalEnb (Bit 10) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_INT_BSignalEnb_Msk (0x400UL) /*!< INT_BSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_INT_ASignalEnb_Pos (9UL) /*!< INT_ASignalEnb (Bit 9) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_INT_ASignalEnb_Msk (0x200UL) /*!< INT_ASignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CardInterruptSignalEnb_Pos (8UL) /*!< CardInterruptSignalEnb (Bit 8) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CardInterruptSignalEnb_Msk (0x100UL) /*!< CardInterruptSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CardRemovalSignalEnb_Pos (7UL) /*!< CardRemovalSignalEnb (Bit 7) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CardRemovalSignalEnb_Msk (0x80UL) /*!< CardRemovalSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CardInsertionSignalEnb_Pos (6UL) /*!< CardInsertionSignalEnb (Bit 6) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CardInsertionSignalEnb_Msk (0x40UL) /*!< CardInsertionSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BufferReadReadySignalEnb_Pos (5UL) /*!< BufferReadReadySignalEnb (Bit 5) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BufferReadReadySignalEnb_Msk (0x20UL) /*!< BufferReadReadySignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BufferWriteReadySignalEnb_Pos (4UL) /*!< BufferWriteReadySignalEnb (Bit 4) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BufferWriteReadySignalEnb_Msk (0x10UL) /*!< BufferWriteReadySignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_DMAInterruptSignalEnb_Pos (3UL) /*!< DMAInterruptSignalEnb (Bit 3) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_DMAInterruptSignalEnb_Msk (0x8UL) /*!< DMAInterruptSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BlockGapEventSignalEnb_Pos (2UL) /*!< BlockGapEventSignalEnb (Bit 2) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_BlockGapEventSignalEnb_Msk (0x4UL) /*!< BlockGapEventSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_TransferCompleteSignalEnb_Pos (1UL) /*!< TransferCompleteSignalEnb (Bit 1) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_TransferCompleteSignalEnb_Msk (0x2UL) /*!< TransferCompleteSignalEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandCompleteSignalEnb_Pos (0UL) /*!< CommandCompleteSignalEnb (Bit 0) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG_CommandCompleteSignalEnb_Msk (0x1UL) /*!< CommandCompleteSignalEnb (Bitfield-Mask: 0x01) */ +/* =========================================== SDEMMC_NORMAL_ITNR_STATUS_EN_REG ============================================ */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_VendorSpecificErrorStatusEnb_Pos (27UL) /*!< VendorSpecificErrorStatusEnb (Bit 27) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_VendorSpecificErrorStatusEnb_Msk (0xf8000000UL) /*!< VendorSpecificErrorStatusEnb (Bitfield-Mask: 0x1f) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_TuningErrorStatusEnb_Pos (26UL) /*!< TuningErrorStatusEnb (Bit 26) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_TuningErrorStatusEnb_Msk (0x4000000UL) /*!< TuningErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_ADMAErrorStatusEnb_Pos (25UL) /*!< ADMAErrorStatusEnb (Bit 25) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_ADMAErrorStatusEnb_Msk (0x2000000UL) /*!< ADMAErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_AutoCMDErrorStatusEnb_Pos (24UL) /*!< AutoCMDErrorStatusEnb (Bit 24) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_AutoCMDErrorStatusEnb_Msk (0x1000000UL) /*!< AutoCMDErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CurrentLimitErrorStatusEnb_Pos (23UL) /*!< CurrentLimitErrorStatusEnb (Bit 23) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CurrentLimitErrorStatusEnb_Msk (0x800000UL) /*!< CurrentLimitErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_DataEndBitErrorStatusEnb_Pos (22UL) /*!< DataEndBitErrorStatusEnb (Bit 22) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_DataEndBitErrorStatusEnb_Msk (0x400000UL) /*!< DataEndBitErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_DataCRCErrorStatusEnb_Pos (21UL) /*!< DataCRCErrorStatusEnb (Bit 21) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_DataCRCErrorStatusEnb_Msk (0x200000UL) /*!< DataCRCErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_DataTimeoutErrorStatusEnb_Pos (20UL) /*!< DataTimeoutErrorStatusEnb (Bit 20) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_DataTimeoutErrorStatusEnb_Msk (0x100000UL) /*!< DataTimeoutErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandIndexErrorStatusEnb_Pos (19UL) /*!< CommandIndexErrorStatusEnb (Bit 19) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandIndexErrorStatusEnb_Msk (0x80000UL) /*!< CommandIndexErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandEndBitErrorStatusEnb_Pos (18UL) /*!< CommandEndBitErrorStatusEnb (Bit 18) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandEndBitErrorStatusEnb_Msk (0x40000UL) /*!< CommandEndBitErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandCRCErrorStatusEnb_Pos (17UL) /*!< CommandCRCErrorStatusEnb (Bit 17) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandCRCErrorStatusEnb_Msk (0x20000UL) /*!< CommandCRCErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandTimeoutErrorStatusEnb_Pos (16UL) /*!< CommandTimeoutErrorStatusEnb (Bit 16) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandTimeoutErrorStatusEnb_Msk (0x10000UL) /*!< CommandTimeoutErrorStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_FixedTo0_Pos (15UL) /*!< FixedTo0 (Bit 15) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_FixedTo0_Msk (0x8000UL) /*!< FixedTo0 (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BootTerminateInterruptStatusEnb_Pos (14UL) /*!< BootTerminateInterruptStatusEnb (Bit 14) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BootTerminateInterruptStatusEnb_Msk (0x4000UL) /*!< BootTerminateInterruptStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BootAckRcvStatusEnb_Pos (13UL) /*!< BootAckRcvStatusEnb (Bit 13) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BootAckRcvStatusEnb_Msk (0x2000UL) /*!< BootAckRcvStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_ReTuningEventStatusEnable_Pos (12UL) /*!< ReTuningEventStatusEnable (Bit 12) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_ReTuningEventStatusEnable_Msk (0x1000UL) /*!< ReTuningEventStatusEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_INT_CStatusEnb_Pos (11UL) /*!< INT_CStatusEnb (Bit 11) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_INT_CStatusEnb_Msk (0x800UL) /*!< INT_CStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_INT_BStatusEnb_Pos (10UL) /*!< INT_BStatusEnb (Bit 10) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_INT_BStatusEnb_Msk (0x400UL) /*!< INT_BStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_INT_AStatusEnb_Pos (9UL) /*!< INT_AStatusEnb (Bit 9) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_INT_AStatusEnb_Msk (0x200UL) /*!< INT_AStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CardInterruptStatusEnb_Pos (8UL) /*!< CardInterruptStatusEnb (Bit 8) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CardInterruptStatusEnb_Msk (0x100UL) /*!< CardInterruptStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CardRemovalStatusEnb_Pos (7UL) /*!< CardRemovalStatusEnb (Bit 7) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CardRemovalStatusEnb_Msk (0x80UL) /*!< CardRemovalStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CardInsertionStatusEnb_Pos (6UL) /*!< CardInsertionStatusEnb (Bit 6) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CardInsertionStatusEnb_Msk (0x40UL) /*!< CardInsertionStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BufferReadReadyStatusEnb_Pos (5UL) /*!< BufferReadReadyStatusEnb (Bit 5) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BufferReadReadyStatusEnb_Msk (0x20UL) /*!< BufferReadReadyStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BufferWriteReadyStatusEnb_Pos (4UL) /*!< BufferWriteReadyStatusEnb (Bit 4) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BufferWriteReadyStatusEnb_Msk (0x10UL) /*!< BufferWriteReadyStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_DMAInterruptStatusEnb_Pos (3UL) /*!< DMAInterruptStatusEnb (Bit 3) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_DMAInterruptStatusEnb_Msk (0x8UL) /*!< DMAInterruptStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BlockGapEventStatusEnb_Pos (2UL) /*!< BlockGapEventStatusEnb (Bit 2) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_BlockGapEventStatusEnb_Msk (0x4UL) /*!< BlockGapEventStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_TransferCompleteStatusEnb_Pos (1UL) /*!< TransferCompleteStatusEnb (Bit 1) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_TransferCompleteStatusEnb_Msk (0x2UL) /*!< TransferCompleteStatusEnb (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandCompleteStatusEnb_Pos (0UL) /*!< CommandCompleteStatusEnb (Bit 0) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_EN_REG_CommandCompleteStatusEnb_Msk (0x1UL) /*!< CommandCompleteStatusEnb (Bitfield-Mask: 0x01) */ +/* ============================================= SDEMMC_NORMAL_ITNR_STATUS_REG ============================================= */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_VendorSpecificError_Pos (27UL) /*!< VendorSpecificError (Bit 27) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_VendorSpecificError_Msk (0xf8000000UL) /*!< VendorSpecificError (Bitfield-Mask: 0x1f) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_TuningError_Pos (26UL) /*!< TuningError (Bit 26) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_TuningError_Msk (0x4000000UL) /*!< TuningError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_ADMAError_Pos (25UL) /*!< ADMAError (Bit 25) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_ADMAError_Msk (0x2000000UL) /*!< ADMAError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_AutoCMDError_Pos (24UL) /*!< AutoCMDError (Bit 24) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_AutoCMDError_Msk (0x1000000UL) /*!< AutoCMDError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CurrentLimitError_Pos (23UL) /*!< CurrentLimitError (Bit 23) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CurrentLimitError_Msk (0x800000UL) /*!< CurrentLimitError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_DataEndBitError_Pos (22UL) /*!< DataEndBitError (Bit 22) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_DataEndBitError_Msk (0x400000UL) /*!< DataEndBitError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_DataCRCError_Pos (21UL) /*!< DataCRCError (Bit 21) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_DataCRCError_Msk (0x200000UL) /*!< DataCRCError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_DataTimeoutError_Pos (20UL) /*!< DataTimeoutError (Bit 20) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_DataTimeoutError_Msk (0x100000UL) /*!< DataTimeoutError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandIndexError_Pos (19UL) /*!< CommandIndexError (Bit 19) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandIndexError_Msk (0x80000UL) /*!< CommandIndexError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandEndBitError_Pos (18UL) /*!< CommandEndBitError (Bit 18) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandEndBitError_Msk (0x40000UL) /*!< CommandEndBitError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandCRCError_Pos (17UL) /*!< CommandCRCError (Bit 17) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandCRCError_Msk (0x20000UL) /*!< CommandCRCError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandTimeoutError_Pos (16UL) /*!< CommandTimeoutError (Bit 16) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandTimeoutError_Msk (0x10000UL) /*!< CommandTimeoutError (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_ErrorInterrupt_Pos (15UL) /*!< ErrorInterrupt (Bit 15) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_ErrorInterrupt_Msk (0x8000UL) /*!< ErrorInterrupt (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BootTerminateInterrupt_Pos (14UL) /*!< BootTerminateInterrupt (Bit 14) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BootTerminateInterrupt_Msk (0x4000UL) /*!< BootTerminateInterrupt (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BootAckRcv_Pos (13UL) /*!< BootAckRcv (Bit 13) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BootAckRcv_Msk (0x2000UL) /*!< BootAckRcv (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_ReTuningEvent_Pos (12UL) /*!< ReTuningEvent (Bit 12) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_ReTuningEvent_Msk (0x1000UL) /*!< ReTuningEvent (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_INT_C_Pos (11UL) /*!< INT_C (Bit 11) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_INT_C_Msk (0x800UL) /*!< INT_C (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_INT_B_Pos (10UL) /*!< INT_B (Bit 10) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_INT_B_Msk (0x400UL) /*!< INT_B (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_INT_A_Pos (9UL) /*!< INT_A (Bit 9) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_INT_A_Msk (0x200UL) /*!< INT_A (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CardInterrupt_Pos (8UL) /*!< CardInterrupt (Bit 8) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CardInterrupt_Msk (0x100UL) /*!< CardInterrupt (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CardRemoval_Pos (7UL) /*!< CardRemoval (Bit 7) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CardRemoval_Msk (0x80UL) /*!< CardRemoval (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CardInsertion_Pos (6UL) /*!< CardInsertion (Bit 6) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CardInsertion_Msk (0x40UL) /*!< CardInsertion (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BufferReadReady_Pos (5UL) /*!< BufferReadReady (Bit 5) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BufferReadReady_Msk (0x20UL) /*!< BufferReadReady (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BufferWriteReady_Pos (4UL) /*!< BufferWriteReady (Bit 4) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BufferWriteReady_Msk (0x10UL) /*!< BufferWriteReady (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_DMAInterrupt_Pos (3UL) /*!< DMAInterrupt (Bit 3) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_DMAInterrupt_Msk (0x8UL) /*!< DMAInterrupt (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BlockGapEvent_Pos (2UL) /*!< BlockGapEvent (Bit 2) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_BlockGapEvent_Msk (0x4UL) /*!< BlockGapEvent (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_TransferComplete_Pos (1UL) /*!< TransferComplete (Bit 1) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_TransferComplete_Msk (0x2UL) /*!< TransferComplete (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandComplete_Pos (0UL) /*!< CommandComplete (Bit 0) */ + #define SDEMMC_SDEMMC_NORMAL_ITNR_STATUS_REG_CommandComplete_Msk (0x1UL) /*!< CommandComplete (Bitfield-Mask: 0x01) */ +/* ================================================ SDEMMC_PRESENTSTATE_REG ================================================ */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CMDLineSignalLevel_Pos (24UL) /*!< CMDLineSignalLevel (Bit 24) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CMDLineSignalLevel_Msk (0x1000000UL) /*!< CMDLineSignalLevel (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_DAT3TO0LineSignalLevel_Pos (20UL) /*!< DAT3TO0LineSignalLevel (Bit 20) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_DAT3TO0LineSignalLevel_Msk (0xf00000UL) /*!< DAT3TO0LineSignalLevel (Bitfield-Mask: 0x0f) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_WriteProtectSwitchPinLevel_Pos (19UL) /*!< WriteProtectSwitchPinLevel (Bit 19) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_WriteProtectSwitchPinLevel_Msk (0x80000UL) /*!< WriteProtectSwitchPinLevel (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CardDetectPinLevel_Pos (18UL) /*!< CardDetectPinLevel (Bit 18) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CardDetectPinLevel_Msk (0x40000UL) /*!< CardDetectPinLevel (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CardStateStable_Pos (17UL) /*!< CardStateStable (Bit 17) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CardStateStable_Msk (0x20000UL) /*!< CardStateStable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CardInserted_Pos (16UL) /*!< CardInserted (Bit 16) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CardInserted_Msk (0x10000UL) /*!< CardInserted (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_BufferReadEnable_Pos (11UL) /*!< BufferReadEnable (Bit 11) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_BufferReadEnable_Msk (0x800UL) /*!< BufferReadEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_BufferWriteEnable_Pos (10UL) /*!< BufferWriteEnable (Bit 10) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_BufferWriteEnable_Msk (0x400UL) /*!< BufferWriteEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_ReadTransferActive_Pos (9UL) /*!< ReadTransferActive (Bit 9) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_ReadTransferActive_Msk (0x200UL) /*!< ReadTransferActive (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_WriteTransferActive_Pos (8UL) /*!< WriteTransferActive (Bit 8) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_WriteTransferActive_Msk (0x100UL) /*!< WriteTransferActive (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_ReTuningRequest_Pos (3UL) /*!< ReTuningRequest (Bit 3) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_ReTuningRequest_Msk (0x8UL) /*!< ReTuningRequest (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_DATLineActive_Pos (2UL) /*!< DATLineActive (Bit 2) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_DATLineActive_Msk (0x4UL) /*!< DATLineActive (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CommandInhibitDAT_Pos (1UL) /*!< CommandInhibitDAT (Bit 1) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CommandInhibitDAT_Msk (0x2UL) /*!< CommandInhibitDAT (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CommandInhibitCMD_Pos (0UL) /*!< CommandInhibitCMD (Bit 0) */ + #define SDEMMC_SDEMMC_PRESENTSTATE_REG_CommandInhibitCMD_Msk (0x1UL) /*!< CommandInhibitCMD (Bitfield-Mask: 0x01) */ +/* ================================================ SDEMMC_PRESETVALUE0_REG ================================================ */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_DefSpdDriveStrengthSelectValue_Pos (30UL) /*!< DefSpdDriveStrengthSelectValue (Bit 30) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_DefSpdDriveStrengthSelectValue_Msk (0xc0000000UL) /*!< DefSpdDriveStrengthSelectValue (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_DefSpdClockGeneratorSelectValue_Pos (26UL) /*!< DefSpdClockGeneratorSelectValue (Bit 26) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_DefSpdClockGeneratorSelectValue_Msk (0x4000000UL) /*!< DefSpdClockGeneratorSelectValue (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_DefSpdSDCLKFrequenceSelectValue_Pos (16UL) /*!< DefSpdSDCLKFrequenceSelectValue (Bit 16) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_DefSpdSDCLKFrequenceSelectValue_Msk (0x3ff0000UL) /*!< DefSpdSDCLKFrequenceSelectValue (Bitfield-Mask: 0x3ff) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_InitDriveStrengthSelectValue_Pos (14UL) /*!< InitDriveStrengthSelectValue (Bit 14) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_InitDriveStrengthSelectValue_Msk (0xc000UL) /*!< InitDriveStrengthSelectValue (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_InitClockGeneratorSelectValue_Pos (10UL) /*!< InitClockGeneratorSelectValue (Bit 10) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_InitClockGeneratorSelectValue_Msk (0x400UL) /*!< InitClockGeneratorSelectValue (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_InitSDCLKFrequenceSelectValue_Pos (0UL) /*!< InitSDCLKFrequenceSelectValue (Bit 0) */ + #define SDEMMC_SDEMMC_PRESETVALUE0_REG_InitSDCLKFrequenceSelectValue_Msk (0x3ffUL) /*!< InitSDCLKFrequenceSelectValue (Bitfield-Mask: 0x3ff) */ +/* ================================================ SDEMMC_PRESETVALUE1_REG ================================================ */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_SDR12DriveStrengthSelectValue_Pos (30UL) /*!< SDR12DriveStrengthSelectValue (Bit 30) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_SDR12DriveStrengthSelectValue_Msk (0xc0000000UL) /*!< SDR12DriveStrengthSelectValue (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_SDR12ClockGeneratorSelectValue_Pos (26UL) /*!< SDR12ClockGeneratorSelectValue (Bit 26) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_SDR12ClockGeneratorSelectValue_Msk (0x4000000UL) /*!< SDR12ClockGeneratorSelectValue (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_SDR12SDCLKFrequenceSelectValue_Pos (16UL) /*!< SDR12SDCLKFrequenceSelectValue (Bit 16) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_SDR12SDCLKFrequenceSelectValue_Msk (0x3ff0000UL) /*!< SDR12SDCLKFrequenceSelectValue (Bitfield-Mask: 0x3ff) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_HighSpdDriveStrengthSelectValue_Pos (14UL) /*!< HighSpdDriveStrengthSelectValue (Bit 14) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_HighSpdDriveStrengthSelectValue_Msk (0xc000UL) /*!< HighSpdDriveStrengthSelectValue (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_HighSpdClockGeneratorSelectValue_Pos (10UL) /*!< HighSpdClockGeneratorSelectValue (Bit 10) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_HighSpdClockGeneratorSelectValue_Msk (0x400UL) /*!< HighSpdClockGeneratorSelectValue (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_HighSpdSDCLKFrequenceSelectValue_Pos (0UL) /*!< HighSpdSDCLKFrequenceSelectValue (Bit 0) */ + #define SDEMMC_SDEMMC_PRESETVALUE1_REG_HighSpdSDCLKFrequenceSelectValue_Msk (0x3ffUL) /*!< HighSpdSDCLKFrequenceSelectValue (Bitfield-Mask: 0x3ff) */ +/* ================================================ SDEMMC_PRESETVALUE2_REG ================================================ */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR50DriveStrengthSelectValue_Pos (30UL) /*!< SDR50DriveStrengthSelectValue (Bit 30) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR50DriveStrengthSelectValue_Msk (0xc0000000UL) /*!< SDR50DriveStrengthSelectValue (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR50ClockGeneratorSelectValue_Pos (26UL) /*!< SDR50ClockGeneratorSelectValue (Bit 26) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR50ClockGeneratorSelectValue_Msk (0x4000000UL) /*!< SDR50ClockGeneratorSelectValue (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR50SDCLKFrequenceSelectValue_Pos (16UL) /*!< SDR50SDCLKFrequenceSelectValue (Bit 16) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR50SDCLKFrequenceSelectValue_Msk (0x3ff0000UL) /*!< SDR50SDCLKFrequenceSelectValue (Bitfield-Mask: 0x3ff) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR25DriveStrengthSelectValue_Pos (14UL) /*!< SDR25DriveStrengthSelectValue (Bit 14) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR25DriveStrengthSelectValue_Msk (0xc000UL) /*!< SDR25DriveStrengthSelectValue (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR25ClockGeneratorSelectValue_Pos (10UL) /*!< SDR25ClockGeneratorSelectValue (Bit 10) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR25ClockGeneratorSelectValue_Msk (0x400UL) /*!< SDR25ClockGeneratorSelectValue (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR25SDCLKFrequenceSelectValue_Pos (0UL) /*!< SDR25SDCLKFrequenceSelectValue (Bit 0) */ + #define SDEMMC_SDEMMC_PRESETVALUE2_REG_SDR25SDCLKFrequenceSelectValue_Msk (0x3ffUL) /*!< SDR25SDCLKFrequenceSelectValue (Bitfield-Mask: 0x3ff) */ +/* ================================================ SDEMMC_PRESETVALUE3_REG ================================================ */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_DDR50DriveStrengthSelectValue_Pos (30UL) /*!< DDR50DriveStrengthSelectValue (Bit 30) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_DDR50DriveStrengthSelectValue_Msk (0xc0000000UL) /*!< DDR50DriveStrengthSelectValue (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_DDR50ClockGeneratorSelectValue_Pos (26UL) /*!< DDR50ClockGeneratorSelectValue (Bit 26) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_DDR50ClockGeneratorSelectValue_Msk (0x4000000UL) /*!< DDR50ClockGeneratorSelectValue (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_DDR50SDCLKFrequenceSelectValue_Pos (16UL) /*!< DDR50SDCLKFrequenceSelectValue (Bit 16) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_DDR50SDCLKFrequenceSelectValue_Msk (0x3ff0000UL) /*!< DDR50SDCLKFrequenceSelectValue (Bitfield-Mask: 0x3ff) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_SDR104DriveStrengthSelectValue_Pos (14UL) /*!< SDR104DriveStrengthSelectValue (Bit 14) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_SDR104DriveStrengthSelectValue_Msk (0xc000UL) /*!< SDR104DriveStrengthSelectValue (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_SDR104ClockGeneratorSelectValue_Pos (10UL) /*!< SDR104ClockGeneratorSelectValue (Bit 10) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_SDR104ClockGeneratorSelectValue_Msk (0x400UL) /*!< SDR104ClockGeneratorSelectValue (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_SDR104SDCLKFrequenceSelectValue_Pos (0UL) /*!< SDR104SDCLKFrequenceSelectValue (Bit 0) */ + #define SDEMMC_SDEMMC_PRESETVALUE3_REG_SDR104SDCLKFrequenceSelectValue_Msk (0x3ffUL) /*!< SDR104SDCLKFrequenceSelectValue (Bitfield-Mask: 0x3ff) */ +/* ================================================= SDEMMC_RESPONSE0_REG ================================================== */ + #define SDEMMC_SDEMMC_RESPONSE0_REG_Reponse0_Pos (0UL) /*!< Reponse0 (Bit 0) */ + #define SDEMMC_SDEMMC_RESPONSE0_REG_Reponse0_Msk (0xffffffffUL) /*!< Reponse0 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= SDEMMC_RESPONSE1_REG ================================================== */ + #define SDEMMC_SDEMMC_RESPONSE1_REG_Reponse1_Pos (0UL) /*!< Reponse1 (Bit 0) */ + #define SDEMMC_SDEMMC_RESPONSE1_REG_Reponse1_Msk (0xffffffffUL) /*!< Reponse1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= SDEMMC_RESPONSE2_REG ================================================== */ + #define SDEMMC_SDEMMC_RESPONSE2_REG_Reponse2_Pos (0UL) /*!< Reponse2 (Bit 0) */ + #define SDEMMC_SDEMMC_RESPONSE2_REG_Reponse2_Msk (0xffffffffUL) /*!< Reponse2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= SDEMMC_RESPONSE3_REG ================================================== */ + #define SDEMMC_SDEMMC_RESPONSE3_REG_Reponse3_Pos (0UL) /*!< Reponse3 (Bit 0) */ + #define SDEMMC_SDEMMC_RESPONSE3_REG_Reponse3_Msk (0xffffffffUL) /*!< Reponse3 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== SDEMMC_SDMA_SYS_ADDR__ARGU_2_REG ============================================ */ + #define SDEMMC_SDEMMC_SDMA_SYS_ADDR__ARGU_2_REG_SDMA_System_Address_Argument2_Pos (0UL) /*!< SDMA_System_Address_Argument2 (Bit 0) */ + #define SDEMMC_SDEMMC_SDMA_SYS_ADDR__ARGU_2_REG_SDMA_System_Address_Argument2_Msk (0xffffffffUL) /*!< SDMA_System_Address_Argument2 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== SDEMMC_SHAREDBUS_CTRL__REG =============================================== */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_BackEndPowerControl_Pos (24UL) /*!< BackEndPowerControl (Bit 24) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_BackEndPowerControl_Msk (0x7f000000UL) /*!< BackEndPowerControl (Bitfield-Mask: 0x7f) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_InterruptPinSelect_Pos (20UL) /*!< InterruptPinSelect (Bit 20) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_InterruptPinSelect_Msk (0x700000UL) /*!< InterruptPinSelect (Bitfield-Mask: 0x07) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_ClockPinSelect_Pos (16UL) /*!< ClockPinSelect (Bit 16) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_ClockPinSelect_Msk (0x70000UL) /*!< ClockPinSelect (Bitfield-Mask: 0x07) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_BusWidthPreset_Pos (8UL) /*!< BusWidthPreset (Bit 8) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_BusWidthPreset_Msk (0x7f00UL) /*!< BusWidthPreset (Bitfield-Mask: 0x7f) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_NumberOfInterruptInputPins_Pos (4UL) /*!< NumberOfInterruptInputPins (Bit 4) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_NumberOfInterruptInputPins_Msk (0x30UL) /*!< NumberOfInterruptInputPins (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_NumberOfClockPins_Pos (0UL) /*!< NumberOfClockPins (Bit 0) */ + #define SDEMMC_SDEMMC_SHAREDBUS_CTRL__REG_NumberOfClockPins_Msk (0x7UL) /*!< NumberOfClockPins (Bitfield-Mask: 0x07) */ +/* ============================================== SDEMMC_SLOT_ITNR_STATUS_REG ============================================== */ + #define SDEMMC_SDEMMC_SLOT_ITNR_STATUS_REG_SpecificationVersionNumber_Pos (16UL) /*!< SpecificationVersionNumber (Bit 16) */ + #define SDEMMC_SDEMMC_SLOT_ITNR_STATUS_REG_SpecificationVersionNumber_Msk (0xff0000UL) /*!< SpecificationVersionNumber (Bitfield-Mask: 0xff) */ + #define SDEMMC_SDEMMC_SLOT_ITNR_STATUS_REG_VendorVersionNumber_Pos (8UL) /*!< VendorVersionNumber (Bit 8) */ + #define SDEMMC_SDEMMC_SLOT_ITNR_STATUS_REG_VendorVersionNumber_Msk (0xff00UL) /*!< VendorVersionNumber (Bitfield-Mask: 0xff) */ + #define SDEMMC_SDEMMC_SLOT_ITNR_STATUS_REG_InterruptSignalForEachSlot_Pos (0UL) /*!< InterruptSignalForEachSlot (Bit 0) */ + #define SDEMMC_SDEMMC_SLOT_ITNR_STATUS_REG_InterruptSignalForEachSlot_Msk (0xffUL) /*!< InterruptSignalForEachSlot (Bitfield-Mask: 0xff) */ +/* ============================================ SDEMMC_TRANSFERMODE_COMMAND_REG ============================================ */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_CommandIndex_Pos (24UL) /*!< CommandIndex (Bit 24) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_CommandIndex_Msk (0x3f000000UL) /*!< CommandIndex (Bitfield-Mask: 0x3f) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_CommandType_Pos (23UL) /*!< CommandType (Bit 23) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_CommandType_Msk (0x800000UL) /*!< CommandType (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_DataPresentSelect_Pos (21UL) /*!< DataPresentSelect (Bit 21) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_DataPresentSelect_Msk (0x200000UL) /*!< DataPresentSelect (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_CommandIndexCheckEnable_Pos (20UL) /*!< CommandIndexCheckEnable (Bit 20) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_CommandIndexCheckEnable_Msk (0x100000UL) /*!< CommandIndexCheckEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_CommandCRCCheckEnable_Pos (19UL) /*!< CommandCRCCheckEnable (Bit 19) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_CommandCRCCheckEnable_Msk (0x80000UL) /*!< CommandCRCCheckEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_ResponseTypeSelect_Pos (16UL) /*!< ResponseTypeSelect (Bit 16) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_ResponseTypeSelect_Msk (0x30000UL) /*!< ResponseTypeSelect (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_MultiSingleBlockSelect_Pos (5UL) /*!< MultiSingleBlockSelect (Bit 5) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_MultiSingleBlockSelect_Msk (0x20UL) /*!< MultiSingleBlockSelect (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_DataTransferDirectionSelect_Pos (4UL) /*!< DataTransferDirectionSelect (Bit 4) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_DataTransferDirectionSelect_Msk (0x10UL) /*!< DataTransferDirectionSelect (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_AutoCMDEnable_Pos (2UL) /*!< AutoCMDEnable (Bit 2) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_AutoCMDEnable_Msk (0xcUL) /*!< AutoCMDEnable (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_BlockCountEnable_Pos (1UL) /*!< BlockCountEnable (Bit 1) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_BlockCountEnable_Msk (0x2UL) /*!< BlockCountEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_DMAEnable_Pos (0UL) /*!< DMAEnable (Bit 0) */ + #define SDEMMC_SDEMMC_TRANSFERMODE_COMMAND_REG_DMAEnable_Msk (0x1UL) /*!< DMAEnable (Bitfield-Mask: 0x01) */ +/* =================================================== SDEMMC_VENDOR_REG =================================================== */ + #define SDEMMC_SDEMMC_VENDOR_REG_Delay_cmdin_datin_dis_Pos (1UL) /*!< Delay_cmdin_datin_dis (Bit 1) */ + #define SDEMMC_SDEMMC_VENDOR_REG_Delay_cmdin_datin_dis_Msk (0x2UL) /*!< Delay_cmdin_datin_dis (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC_VENDOR_REG_AutoGateSDCLK_Pos (0UL) /*!< AutoGateSDCLK (Bit 0) */ + #define SDEMMC_SDEMMC_VENDOR_REG_AutoGateSDCLK_Msk (0x1UL) /*!< AutoGateSDCLK (Bitfield-Mask: 0x01) */ +/* ================================================== SDEMMC__ARGU_1_REG =================================================== */ + #define SDEMMC_SDEMMC__ARGU_1_REG_Argument1_Pos (0UL) /*!< Argument1 (Bit 0) */ + #define SDEMMC_SDEMMC__ARGU_1_REG_Argument1_Msk (0xffffffffUL) /*!< Argument1 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ SDEMMC__CLK__CTRL__REG ================================================= */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SoftwareResetForDATLine_Pos (26UL) /*!< SoftwareResetForDATLine (Bit 26) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SoftwareResetForDATLine_Msk (0x4000000UL) /*!< SoftwareResetForDATLine (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SoftwareResetForCMDLine_Pos (25UL) /*!< SoftwareResetForCMDLine (Bit 25) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SoftwareResetForCMDLine_Msk (0x2000000UL) /*!< SoftwareResetForCMDLine (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SoftwareResetForAll_Pos (24UL) /*!< SoftwareResetForAll (Bit 24) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SoftwareResetForAll_Msk (0x1000000UL) /*!< SoftwareResetForAll (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_DataTimeoutCounterValue_Pos (16UL) /*!< DataTimeoutCounterValue (Bit 16) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_DataTimeoutCounterValue_Msk (0xf0000UL) /*!< DataTimeoutCounterValue (Bitfield-Mask: 0x0f) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SDCLKFrequencySelect_Pos (8UL) /*!< SDCLKFrequencySelect (Bit 8) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SDCLKFrequencySelect_Msk (0xff00UL) /*!< SDCLKFrequencySelect (Bitfield-Mask: 0xff) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_UpperBitsofSDCLKFrequencySelect_Pos (6UL) /*!< UpperBitsofSDCLKFrequencySelect (Bit 6) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_UpperBitsofSDCLKFrequencySelect_Msk (0xc0UL) /*!< UpperBitsofSDCLKFrequencySelect (Bitfield-Mask: 0x03) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_ClockGeneratorSelect_Pos (5UL) /*!< ClockGeneratorSelect (Bit 5) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_ClockGeneratorSelect_Msk (0x20UL) /*!< ClockGeneratorSelect (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SDClockEnable_Pos (2UL) /*!< SDClockEnable (Bit 2) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_SDClockEnable_Msk (0x4UL) /*!< SDClockEnable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_InternalClockStable_Pos (1UL) /*!< InternalClockStable (Bit 1) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_InternalClockStable_Msk (0x2UL) /*!< InternalClockStable (Bitfield-Mask: 0x01) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_InternalClockEnable_Pos (0UL) /*!< InternalClockEnable (Bit 0) */ + #define SDEMMC_SDEMMC__CLK__CTRL__REG_InternalClockEnable_Msk (0x1UL) /*!< InternalClockEnable (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ SDIO ================ */ +/* =========================================================================================================================== */ + +/* ============================================= SDIO_ADMA_SYSTEM_ADDRESS_REG ============================================== */ + #define SDIO_SDIO_ADMA_SYSTEM_ADDRESS_REG_ADMA_SYSTEM_ADDRESS_Pos (28UL) /*!< ADMA_SYSTEM_ADDRESS (Bit 28) */ + #define SDIO_SDIO_ADMA_SYSTEM_ADDRESS_REG_ADMA_SYSTEM_ADDRESS_Msk (0xf0000000UL) /*!< ADMA_SYSTEM_ADDRESS (Bitfield-Mask: 0x0f) */ +/* ============================================== SDIO_AHB_FN0_INT_ENABLE_REG ============================================== */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_ADMA_ERR_EN_Pos (11UL) /*!< FN0_ADMA_ERR_EN (Bit 11) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_ADMA_ERR_EN_Msk (0x800UL) /*!< FN0_ADMA_ERR_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_ADMA_INT_EN_Pos (10UL) /*!< FN0_ADMA_INT_EN (Bit 10) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_ADMA_INT_EN_Msk (0x400UL) /*!< FN0_ADMA_INT_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_ADMA_END_EN_Pos (9UL) /*!< FN0_ADMA_END_EN (Bit 9) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_ADMA_END_EN_Msk (0x200UL) /*!< FN0_ADMA_END_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_RD_ERR_EN_Pos (8UL) /*!< FN0_RD_ERR_EN (Bit 8) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_RD_ERR_EN_Msk (0x100UL) /*!< FN0_RD_ERR_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_RD_OVR_EN_Pos (7UL) /*!< FN0_RD_OVR_EN (Bit 7) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_RD_OVR_EN_Msk (0x80UL) /*!< FN0_RD_OVR_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_RD_STRT_EN_Pos (6UL) /*!< FN0_RD_STRT_EN (Bit 6) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_RD_STRT_EN_Msk (0x40UL) /*!< FN0_RD_STRT_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_WR_TRN_OVR_EN_Pos (5UL) /*!< FN0_WR_TRN_OVR_EN (Bit 5) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_WR_TRN_OVR_EN_Msk (0x20UL) /*!< FN0_WR_TRN_OVR_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_WR_STRT_EN_Pos (4UL) /*!< FN0_WR_STRT_EN (Bit 4) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_FN0_WR_STRT_EN_Msk (0x10UL) /*!< FN0_WR_STRT_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_CMD19_RD_TRN_OVR_EN_Pos (3UL) /*!< CMD19_RD_TRN_OVR_EN (Bit 3) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_CMD19_RD_TRN_OVR_EN_Msk (0x8UL) /*!< CMD19_RD_TRN_OVR_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_CMD19_RD_STRT_EN_Pos (2UL) /*!< CMD19_RD_STRT_EN (Bit 2) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_CMD19_RD_STRT_EN_Msk (0x4UL) /*!< CMD19_RD_STRT_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_VOLT_SWITCH_CMD_EN_Pos (1UL) /*!< VOLT_SWITCH_CMD_EN (Bit 1) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_VOLT_SWITCH_CMD_EN_Msk (0x2UL) /*!< VOLT_SWITCH_CMD_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_AHBSOFT_RST_EN_Pos (0UL) /*!< AHBSOFT_RST_EN (Bit 0) */ + #define SDIO_SDIO_AHB_FN0_INT_ENABLE_REG_AHBSOFT_RST_EN_Msk (0x1UL) /*!< AHBSOFT_RST_EN (Bitfield-Mask: 0x01) */ +/* ================================================= SDIO_AHB_FN0_INT_REG ================================================== */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_ADMA_ERR_Pos (11UL) /*!< FN0_ADMA_ERR (Bit 11) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_ADMA_ERR_Msk (0x800UL) /*!< FN0_ADMA_ERR (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_ADMA_INT_Pos (10UL) /*!< FN0_ADMA_INT (Bit 10) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_ADMA_INT_Msk (0x400UL) /*!< FN0_ADMA_INT (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_ADMA_END_Pos (9UL) /*!< FN0_ADMA_END (Bit 9) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_ADMA_END_Msk (0x200UL) /*!< FN0_ADMA_END (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_RD_ERR_Pos (8UL) /*!< FN0_RD_ERR (Bit 8) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_RD_ERR_Msk (0x100UL) /*!< FN0_RD_ERR (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_RD_OVR_Pos (7UL) /*!< FN0_RD_OVR (Bit 7) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_RD_OVR_Msk (0x80UL) /*!< FN0_RD_OVR (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_RD_STRT_Pos (6UL) /*!< FN0_RD_STRT (Bit 6) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_RD_STRT_Msk (0x40UL) /*!< FN0_RD_STRT (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_WR_TRN_OVR_Pos (5UL) /*!< FN0_WR_TRN_OVR (Bit 5) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_WR_TRN_OVR_Msk (0x20UL) /*!< FN0_WR_TRN_OVR (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_WR_STRT_Pos (4UL) /*!< FN0_WR_STRT (Bit 4) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_FN0_WR_STRT_Msk (0x10UL) /*!< FN0_WR_STRT (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_CMD19_RD_TRN_OVR_Pos (3UL) /*!< CMD19_RD_TRN_OVR (Bit 3) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_CMD19_RD_TRN_OVR_Msk (0x8UL) /*!< CMD19_RD_TRN_OVR (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_CMD19_RD_STRT_Pos (2UL) /*!< CMD19_RD_STRT (Bit 2) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_CMD19_RD_STRT_Msk (0x4UL) /*!< CMD19_RD_STRT (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_VOLT_SWITCH_CMD_Pos (1UL) /*!< VOLT_SWITCH_CMD (Bit 1) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_VOLT_SWITCH_CMD_Msk (0x2UL) /*!< VOLT_SWITCH_CMD (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_AHBSOFT_RST_Pos (0UL) /*!< AHBSOFT_RST (Bit 0) */ + #define SDIO_SDIO_AHB_FN0_INT_REG_AHBSOFT_RST_Msk (0x1UL) /*!< AHBSOFT_RST (Bitfield-Mask: 0x01) */ +/* ============================================== SDIO_AHB_FN1_INT_ENABLE_REG ============================================== */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FUN1_EN_INT_EN_Pos (13UL) /*!< FUN1_EN_INT_EN (Bit 13) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FUN1_EN_INT_EN_Msk (0x2000UL) /*!< FUN1_EN_INT_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_ADMA_ERR_EN_Pos (12UL) /*!< ADMA_ERR_EN (Bit 12) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_ADMA_ERR_EN_Msk (0x1000UL) /*!< ADMA_ERR_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_ADMA_INT_EN_Pos (11UL) /*!< ADMA_INT_EN (Bit 11) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_ADMA_INT_EN_Msk (0x800UL) /*!< ADMA_INT_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_RESUME_EN_Pos (10UL) /*!< RESUME_EN (Bit 10) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_RESUME_EN_Msk (0x400UL) /*!< RESUME_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_SUSPEND_EN_Pos (9UL) /*!< FN1_SUSPEND_EN (Bit 9) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_SUSPEND_EN_Msk (0x200UL) /*!< FN1_SUSPEND_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_ADMA_END_INT_EN_Pos (8UL) /*!< ADMA_END_INT_EN (Bit 8) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_ADMA_END_INT_EN_Msk (0x100UL) /*!< ADMA_END_INT_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_SDIO_WR_START_EN_Pos (7UL) /*!< FN1_SDIO_WR_START_EN (Bit 7) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_SDIO_WR_START_EN_Msk (0x80UL) /*!< FN1_SDIO_WR_START_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_SDIO_RD_START_EN_Pos (6UL) /*!< FN1_SDIO_RD_START_EN (Bit 6) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_SDIO_RD_START_EN_Msk (0x40UL) /*!< FN1_SDIO_RD_START_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_ACK_TO_ARM_EN_Pos (5UL) /*!< FN1_ACK_TO_ARM_EN (Bit 5) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_ACK_TO_ARM_EN_Msk (0x20UL) /*!< FN1_ACK_TO_ARM_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_SD_HOST_FN1_MSG_RDY_EN_Pos (4UL) /*!< SD_HOST_FN1_MSG_RDY_EN (Bit 4) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_SD_HOST_FN1_MSG_RDY_EN_Msk (0x10UL) /*!< SD_HOST_FN1_MSG_RDY_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FUN1_RST_EN_Pos (3UL) /*!< FUN1_RST_EN (Bit 3) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FUN1_RST_EN_Msk (0x8UL) /*!< FUN1_RST_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_RD_ERROR_EN_Pos (2UL) /*!< FN1_RD_ERROR_EN (Bit 2) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_RD_ERROR_EN_Msk (0x4UL) /*!< FN1_RD_ERROR_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_RD_OVER_EN_Pos (1UL) /*!< FN1_RD_OVER_EN (Bit 1) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_RD_OVER_EN_Msk (0x2UL) /*!< FN1_RD_OVER_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_WR_OVER_EN_Pos (0UL) /*!< FN1_WR_OVER_EN (Bit 0) */ + #define SDIO_SDIO_AHB_FN1_INT_ENABLE_REG_FN1_WR_OVER_EN_Msk (0x1UL) /*!< FN1_WR_OVER_EN (Bitfield-Mask: 0x01) */ +/* ================================================= SDIO_AHB_FN1_INT_REG ================================================== */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FUN1_EN_Pos (13UL) /*!< FUN1_EN (Bit 13) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FUN1_EN_Msk (0x2000UL) /*!< FUN1_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_ADMA_ERR_Pos (12UL) /*!< ADMA_ERR (Bit 12) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_ADMA_ERR_Msk (0x1000UL) /*!< ADMA_ERR (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_ADMA_INT_Pos (11UL) /*!< ADMA_INT (Bit 11) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_ADMA_INT_Msk (0x800UL) /*!< ADMA_INT (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_RESUME_Pos (10UL) /*!< RESUME (Bit 10) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_RESUME_Msk (0x400UL) /*!< RESUME (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_SUSPEND_Pos (9UL) /*!< FN1_SUSPEND (Bit 9) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_SUSPEND_Msk (0x200UL) /*!< FN1_SUSPEND (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_ADMA_END_INT_Pos (8UL) /*!< ADMA_END_INT (Bit 8) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_ADMA_END_INT_Msk (0x100UL) /*!< ADMA_END_INT (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_SDIO_WR_START_Pos (7UL) /*!< FN1_SDIO_WR_START (Bit 7) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_SDIO_WR_START_Msk (0x80UL) /*!< FN1_SDIO_WR_START (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_SDIO_RD_START_Pos (6UL) /*!< FN1_SDIO_RD_START (Bit 6) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_SDIO_RD_START_Msk (0x40UL) /*!< FN1_SDIO_RD_START (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_ACK_TO_ARM_Pos (5UL) /*!< FN1_ACK_TO_ARM (Bit 5) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_ACK_TO_ARM_Msk (0x20UL) /*!< FN1_ACK_TO_ARM (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_SD_HOST_FN1_MSG_RDY_Pos (4UL) /*!< SD_HOST_FN1_MSG_RDY (Bit 4) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_SD_HOST_FN1_MSG_RDY_Msk (0x10UL) /*!< SD_HOST_FN1_MSG_RDY (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FUN1_RST_Pos (3UL) /*!< FUN1_RST (Bit 3) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FUN1_RST_Msk (0x8UL) /*!< FUN1_RST (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_RD_ERROR_Pos (2UL) /*!< FN1_RD_ERROR (Bit 2) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_RD_ERROR_Msk (0x4UL) /*!< FN1_RD_ERROR (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_RD_OVER_Pos (1UL) /*!< FN1_RD_OVER (Bit 1) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_RD_OVER_Msk (0x2UL) /*!< FN1_RD_OVER (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_WR_OVER_Pos (0UL) /*!< FN1_WR_OVER (Bit 0) */ + #define SDIO_SDIO_AHB_FN1_INT_REG_FN1_WR_OVER_Msk (0x1UL) /*!< FN1_WR_OVER (Bitfield-Mask: 0x01) */ +/* ============================================== SDIO_AHB_SDIOTRANSCOUNT_REG ============================================== */ + #define SDIO_SDIO_AHB_SDIOTRANSCOUNT_REG_XFER_CNT_REG_Pos (0UL) /*!< XFER_CNT_REG (Bit 0) */ + #define SDIO_SDIO_AHB_SDIOTRANSCOUNT_REG_XFER_CNT_REG_Msk (0x1fffffUL) /*!< XFER_CNT_REG (Bitfield-Mask: 0x1fffff) */ +/* ================================================ SDIO_AHB_TRANSCOUNT_REG ================================================ */ + #define SDIO_SDIO_AHB_TRANSCOUNT_REG_AHB_XFER_CNT_Pos (0UL) /*!< AHB_XFER_CNT (Bit 0) */ + #define SDIO_SDIO_AHB_TRANSCOUNT_REG_AHB_XFER_CNT_Msk (0x1fffffUL) /*!< AHB_XFER_CNT (Bitfield-Mask: 0x1fffff) */ +/* =================================================== SDIO_ARGUMENT_REG =================================================== */ + #define SDIO_SDIO_ARGUMENT_REG_ARG_REG_Pos (0UL) /*!< ARG_REG (Bit 0) */ + #define SDIO_SDIO_ARGUMENT_REG_ARG_REG_Msk (0xffffffffUL) /*!< ARG_REG (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== SDIO_ARM_GP_REG ==================================================== */ + #define SDIO_SDIO_ARM_GP_REG_ARM_GP_Pos (0UL) /*!< ARM_GP (Bit 0) */ + #define SDIO_SDIO_ARM_GP_REG_ARM_GP_Msk (0xffffffffUL) /*!< ARM_GP (Bitfield-Mask: 0xffffffff) */ +/* =================================================== SDIO_BLKSIZE_REG ==================================================== */ + #define SDIO_SDIO_BLKSIZE_REG_SIN_MUL_BLK_Pos (12UL) /*!< SIN_MUL_BLK (Bit 12) */ + #define SDIO_SDIO_BLKSIZE_REG_SIN_MUL_BLK_Msk (0x1000UL) /*!< SIN_MUL_BLK (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_BLKSIZE_REG_BLK_SIZE_Pos (0UL) /*!< BLK_SIZE (Bit 0) */ + #define SDIO_SDIO_BLKSIZE_REG_BLK_SIZE_Msk (0xfffUL) /*!< BLK_SIZE (Bitfield-Mask: 0xfff) */ +/* =================================================== SDIO_CARDRDY_REG ==================================================== */ + #define SDIO_SDIO_CARDRDY_REG_CARD_RDY_Pos (0UL) /*!< CARD_RDY (Bit 0) */ + #define SDIO_SDIO_CARDRDY_REG_CARD_RDY_Msk (0x1UL) /*!< CARD_RDY (Bitfield-Mask: 0x01) */ +/* ===================================================== SDIO_CCCR_REG ===================================================== */ + #define SDIO_SDIO_CCCR_REG_CMD_INDEX_Pos (22UL) /*!< CMD_INDEX (Bit 22) */ + #define SDIO_SDIO_CCCR_REG_CMD_INDEX_Msk (0xfc00000UL) /*!< CMD_INDEX (Bitfield-Mask: 0x3f) */ + #define SDIO_SDIO_CCCR_REG_SHS_Pos (21UL) /*!< SHS (Bit 21) */ + #define SDIO_SDIO_CCCR_REG_SHS_Msk (0x200000UL) /*!< SHS (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_SMPC_Pos (20UL) /*!< SMPC (Bit 20) */ + #define SDIO_SDIO_CCCR_REG_SMPC_Msk (0x100000UL) /*!< SMPC (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_FOURBLS_Pos (19UL) /*!< FOURBLS (Bit 19) */ + #define SDIO_SDIO_CCCR_REG_FOURBLS_Msk (0x80000UL) /*!< FOURBLS (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_LSC_Pos (18UL) /*!< LSC (Bit 18) */ + #define SDIO_SDIO_CCCR_REG_LSC_Msk (0x40000UL) /*!< LSC (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_S4MI_Pos (17UL) /*!< S4MI (Bit 17) */ + #define SDIO_SDIO_CCCR_REG_S4MI_Msk (0x20000UL) /*!< S4MI (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_SBS_Pos (16UL) /*!< SBS (Bit 16) */ + #define SDIO_SDIO_CCCR_REG_SBS_Msk (0x10000UL) /*!< SBS (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_SRW_Pos (15UL) /*!< SRW (Bit 15) */ + #define SDIO_SDIO_CCCR_REG_SRW_Msk (0x8000UL) /*!< SRW (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_SMB_Pos (14UL) /*!< SMB (Bit 14) */ + #define SDIO_SDIO_CCCR_REG_SMB_Msk (0x4000UL) /*!< SMB (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_SDC_Pos (13UL) /*!< SDC (Bit 13) */ + #define SDIO_SDIO_CCCR_REG_SDC_Msk (0x2000UL) /*!< SDC (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_SCSI_Pos (12UL) /*!< SCSI (Bit 12) */ + #define SDIO_SDIO_CCCR_REG_SCSI_Msk (0x1000UL) /*!< SCSI (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CCCR_REG_SD_REVISION_Pos (8UL) /*!< SD_REVISION (Bit 8) */ + #define SDIO_SDIO_CCCR_REG_SD_REVISION_Msk (0xf00UL) /*!< SD_REVISION (Bitfield-Mask: 0x0f) */ + #define SDIO_SDIO_CCCR_REG_SDIO_REVISION_Pos (4UL) /*!< SDIO_REVISION (Bit 4) */ + #define SDIO_SDIO_CCCR_REG_SDIO_REVISION_Msk (0xf0UL) /*!< SDIO_REVISION (Bitfield-Mask: 0x0f) */ + #define SDIO_SDIO_CCCR_REG_CCCR_REVISION_Pos (0UL) /*!< CCCR_REVISION (Bit 0) */ + #define SDIO_SDIO_CCCR_REG_CCCR_REVISION_Msk (0xfUL) /*!< CCCR_REVISION (Bitfield-Mask: 0x0f) */ +/* =============================================== SDIO_CLK_DELAY_TIMER_REG ================================================ */ + #define SDIO_SDIO_CLK_DELAY_TIMER_REG_CLK_DELAY_TIMER_Pos (0UL) /*!< CLK_DELAY_TIMER (Bit 0) */ + #define SDIO_SDIO_CLK_DELAY_TIMER_REG_CLK_DELAY_TIMER_Msk (0xffffffffUL) /*!< CLK_DELAY_TIMER (Bitfield-Mask: 0xffffffff) */ +/* ================================================= SDIO_CLOCK_WAKEUP_REG ================================================= */ + #define SDIO_SDIO_CLOCK_WAKEUP_REG_MANUAL_CLK_ENABLE_Pos (1UL) /*!< MANUAL_CLK_ENABLE (Bit 1) */ + #define SDIO_SDIO_CLOCK_WAKEUP_REG_MANUAL_CLK_ENABLE_Msk (0x2UL) /*!< MANUAL_CLK_ENABLE (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_CLOCK_WAKEUP_REG_AUTO_CLK_ENABLE_Pos (0UL) /*!< AUTO_CLK_ENABLE (Bit 0) */ + #define SDIO_SDIO_CLOCK_WAKEUP_REG_AUTO_CLK_ENABLE_Msk (0x1UL) /*!< AUTO_CLK_ENABLE (Bitfield-Mask: 0x01) */ +/* ================================================= SDIO_CSA_POINTER_REG ================================================== */ + #define SDIO_SDIO_CSA_POINTER_REG_CSA_POINTER_Pos (0UL) /*!< CSA_POINTER (Bit 0) */ + #define SDIO_SDIO_CSA_POINTER_REG_CSA_POINTER_Msk (0xffffffUL) /*!< CSA_POINTER (Bitfield-Mask: 0xffffff) */ +/* ===================================================== SDIO_FBR_REG ====================================================== */ + #define SDIO_SDIO_FBR_REG_SDIO_SPS_Pos (13UL) /*!< SDIO_SPS (Bit 13) */ + #define SDIO_SDIO_FBR_REG_SDIO_SPS_Msk (0x2000UL) /*!< SDIO_SPS (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_FBR_REG_EXTENDED_IO_DEVICE_CODE1_Pos (5UL) /*!< EXTENDED_IO_DEVICE_CODE1 (Bit 5) */ + #define SDIO_SDIO_FBR_REG_EXTENDED_IO_DEVICE_CODE1_Msk (0x1fe0UL) /*!< EXTENDED_IO_DEVICE_CODE1 (Bitfield-Mask: 0xff) */ + #define SDIO_SDIO_FBR_REG_FUN_CSA_SUP_Pos (4UL) /*!< FUN_CSA_SUP (Bit 4) */ + #define SDIO_SDIO_FBR_REG_FUN_CSA_SUP_Msk (0x10UL) /*!< FUN_CSA_SUP (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_FBR_REG_IO_DEVICE_CODE1_Pos (0UL) /*!< IO_DEVICE_CODE1 (Bit 0) */ + #define SDIO_SDIO_FBR_REG_IO_DEVICE_CODE1_Msk (0xfUL) /*!< IO_DEVICE_CODE1 (Bitfield-Mask: 0x0f) */ +/* ==================================================== SDIO_FUNRDY_REG ==================================================== */ + #define SDIO_SDIO_FUNRDY_REG_CARD_RDY_Pos (0UL) /*!< CARD_RDY (Bit 0) */ + #define SDIO_SDIO_FUNRDY_REG_CARD_RDY_Msk (0x1UL) /*!< CARD_RDY (Bitfield-Mask: 0x01) */ +/* ================================================= SDIO_GLB_INT_ENA_REG ================================================== */ + #define SDIO_SDIO_GLB_INT_ENA_REG_FN1_INT_TO_ARM_EN_Pos (1UL) /*!< FN1_INT_TO_ARM_EN (Bit 1) */ + #define SDIO_SDIO_GLB_INT_ENA_REG_FN1_INT_TO_ARM_EN_Msk (0x2UL) /*!< FN1_INT_TO_ARM_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_GLB_INT_ENA_REG_FN0_INT_TO_ARM_EN_Pos (0UL) /*!< FN0_INT_TO_ARM_EN (Bit 0) */ + #define SDIO_SDIO_GLB_INT_ENA_REG_FN0_INT_TO_ARM_EN_Msk (0x1UL) /*!< FN0_INT_TO_ARM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= SDIO_GLB_INT_STS_REG ================================================== */ + #define SDIO_SDIO_GLB_INT_STS_REG_FN1_INT_TO_ARM_Pos (1UL) /*!< FN1_INT_TO_ARM (Bit 1) */ + #define SDIO_SDIO_GLB_INT_STS_REG_FN1_INT_TO_ARM_Msk (0x2UL) /*!< FN1_INT_TO_ARM (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_GLB_INT_STS_REG_FN0_INT_TO_ARM_Pos (0UL) /*!< FN0_INT_TO_ARM (Bit 0) */ + #define SDIO_SDIO_GLB_INT_STS_REG_FN0_INT_TO_ARM_Msk (0x1UL) /*!< FN0_INT_TO_ARM (Bitfield-Mask: 0x01) */ +/* ================================================== SDIO_INTERRUPT_REG =================================================== */ + #define SDIO_SDIO_INTERRUPT_REG_ACK_TO_SD_HOST_EN_Pos (11UL) /*!< ACK_TO_SD_HOST_EN (Bit 11) */ + #define SDIO_SDIO_INTERRUPT_REG_ACK_TO_SD_HOST_EN_Msk (0x800UL) /*!< ACK_TO_SD_HOST_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_INTERRUPT_REG_MESSAGE_FROM_ARM_EN_Pos (10UL) /*!< MESSAGE_FROM_ARM_EN (Bit 10) */ + #define SDIO_SDIO_INTERRUPT_REG_MESSAGE_FROM_ARM_EN_Msk (0x400UL) /*!< MESSAGE_FROM_ARM_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_INTERRUPT_REG_READ_ERROR_EN_Pos (9UL) /*!< READ_ERROR_EN (Bit 9) */ + #define SDIO_SDIO_INTERRUPT_REG_READ_ERROR_EN_Msk (0x200UL) /*!< READ_ERROR_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_INTERRUPT_REG_READ_DATA_READY_INT_EN_Pos (8UL) /*!< READ_DATA_READY_INT_EN (Bit 8) */ + #define SDIO_SDIO_INTERRUPT_REG_READ_DATA_READY_INT_EN_Msk (0x100UL) /*!< READ_DATA_READY_INT_EN (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_INTERRUPT_REG_ACK_TO_SD_HOST_Pos (3UL) /*!< ACK_TO_SD_HOST (Bit 3) */ + #define SDIO_SDIO_INTERRUPT_REG_ACK_TO_SD_HOST_Msk (0x8UL) /*!< ACK_TO_SD_HOST (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_INTERRUPT_REG_MESSAGE_FROM_ARM_Pos (2UL) /*!< MESSAGE_FROM_ARM (Bit 2) */ + #define SDIO_SDIO_INTERRUPT_REG_MESSAGE_FROM_ARM_Msk (0x4UL) /*!< MESSAGE_FROM_ARM (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_INTERRUPT_REG_READ_ERROR_Pos (1UL) /*!< READ_ERROR (Bit 1) */ + #define SDIO_SDIO_INTERRUPT_REG_READ_ERROR_Msk (0x2UL) /*!< READ_ERROR (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_INTERRUPT_REG_READ_DATA_READY_INT_Pos (0UL) /*!< READ_DATA_READY_INT (Bit 0) */ + #define SDIO_SDIO_INTERRUPT_REG_READ_DATA_READY_INT_Msk (0x1UL) /*!< READ_DATA_READY_INT (Bitfield-Mask: 0x01) */ +/* ===================================================== SDIO_IOR_REG ====================================================== */ + #define SDIO_SDIO_IOR_REG_IOR_REG_Pos (0UL) /*!< IOR_REG (Bit 0) */ + #define SDIO_SDIO_IOR_REG_IOR_REG_Msk (0x1UL) /*!< IOR_REG (Bitfield-Mask: 0x01) */ +/* ================================================= SDIO_IO_ACC_MODE_REG ================================================== */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SAI_Pos (6UL) /*!< SAI (Bit 6) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SAI_Msk (0x40UL) /*!< SAI (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SDTD_Pos (5UL) /*!< SDTD (Bit 5) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SDTD_Msk (0x20UL) /*!< SDTD (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SDTC_Pos (4UL) /*!< SDTC (Bit 4) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SDTC_Msk (0x10UL) /*!< SDTC (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SDTA_Pos (3UL) /*!< SDTA (Bit 3) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SDTA_Msk (0x8UL) /*!< SDTA (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SDDR50_Pos (2UL) /*!< SDDR50 (Bit 2) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SDDR50_Msk (0x4UL) /*!< SDDR50 (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SSDR104_Pos (1UL) /*!< SSDR104 (Bit 1) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SSDR104_Msk (0x2UL) /*!< SSDR104 (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SSDR50_Pos (0UL) /*!< SSDR50 (Bit 0) */ + #define SDIO_SDIO_IO_ACC_MODE_REG_SSDR50_Msk (0x1UL) /*!< SSDR50 (Bitfield-Mask: 0x01) */ +/* =============================================== SDIO_LAST_FETCH_ADDR_REG ================================================ */ + #define SDIO_SDIO_LAST_FETCH_ADDR_REG_LAST_FETCH_ADDR_Pos (0UL) /*!< LAST_FETCH_ADDR (Bit 0) */ + #define SDIO_SDIO_LAST_FETCH_ADDR_REG_LAST_FETCH_ADDR_Msk (0xffffffffUL) /*!< LAST_FETCH_ADDR (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== SDIO_OCR_REG ====================================================== */ + #define SDIO_SDIO_OCR_REG_OCR_Pos (0UL) /*!< OCR (Bit 0) */ + #define SDIO_SDIO_OCR_REG_OCR_Msk (0xffffffUL) /*!< OCR (Bitfield-Mask: 0xffffff) */ +/* ================================================ SDIO_POWER_CONTROL_REG ================================================= */ + #define SDIO_SDIO_POWER_CONTROL_REG_FASTINIT_REQUEST_Pos (9UL) /*!< FASTINIT_REQUEST (Bit 9) */ + #define SDIO_SDIO_POWER_CONTROL_REG_FASTINIT_REQUEST_Msk (0x200UL) /*!< FASTINIT_REQUEST (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_POWER_CONTROL_REG_POWERDOWN_REQUEST_Pos (8UL) /*!< POWERDOWN_REQUEST (Bit 8) */ + #define SDIO_SDIO_POWER_CONTROL_REG_POWERDOWN_REQUEST_Msk (0x100UL) /*!< POWERDOWN_REQUEST (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_POWER_CONTROL_REG_EPS_FUN1_Pos (1UL) /*!< EPS_FUN1 (Bit 1) */ + #define SDIO_SDIO_POWER_CONTROL_REG_EPS_FUN1_Msk (0x2UL) /*!< EPS_FUN1 (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_POWER_CONTROL_REG_EMPC_Pos (0UL) /*!< EMPC (Bit 0) */ + #define SDIO_SDIO_POWER_CONTROL_REG_EMPC_Msk (0x1UL) /*!< EMPC (Bitfield-Mask: 0x01) */ +/* ================================================= SDIO_POWER_STATE_REG ================================================== */ + #define SDIO_SDIO_POWER_STATE_REG_PWR_STATE_FN1_Pos (0UL) /*!< PWR_STATE_FN1 (Bit 0) */ + #define SDIO_SDIO_POWER_STATE_REG_PWR_STATE_FN1_Msk (0xfUL) /*!< PWR_STATE_FN1 (Bitfield-Mask: 0x0f) */ +/* =================================================== SDIO_RDBLKCNT_REG =================================================== */ + #define SDIO_SDIO_RDBLKCNT_REG_RD_BLK_CNT_Pos (0UL) /*!< RD_BLK_CNT (Bit 0) */ + #define SDIO_SDIO_RDBLKCNT_REG_RD_BLK_CNT_Msk (0xffffUL) /*!< RD_BLK_CNT (Bitfield-Mask: 0xffff) */ +/* =================================================== SDIO_RDDATRDY_REG =================================================== */ + #define SDIO_SDIO_RDDATRDY_REG_FN1_RDDATRDY_Pos (0UL) /*!< FN1_RDDATRDY (Bit 0) */ + #define SDIO_SDIO_RDDATRDY_REG_FN1_RDDATRDY_Msk (0x1UL) /*!< FN1_RDDATRDY (Bitfield-Mask: 0x01) */ +/* ================================================== SDIO_SD_HOST_GP_REG ================================================== */ + #define SDIO_SDIO_SD_HOST_GP_REG_SD_HOST_GP_Pos (0UL) /*!< SD_HOST_GP (Bit 0) */ + #define SDIO_SDIO_SD_HOST_GP_REG_SD_HOST_GP_Msk (0xffffffffUL) /*!< SD_HOST_GP (Bitfield-Mask: 0xffffffff) */ +/* ================================================= SDIO_SOFT_RST_AHB_REG ================================================= */ + #define SDIO_SDIO_SOFT_RST_AHB_REG_AHBSOFT_VALID_Pos (0UL) /*!< AHBSOFT_VALID (Bit 0) */ + #define SDIO_SDIO_SOFT_RST_AHB_REG_AHBSOFT_VALID_Msk (0x1UL) /*!< AHBSOFT_VALID (Bitfield-Mask: 0x01) */ +/* ================================================= SDIO_UHS_SUPPORT_REG ================================================== */ + #define SDIO_SDIO_UHS_SUPPORT_REG_SD_CMD_LINE_SWITCHED_Pos (4UL) /*!< SD_CMD_LINE_SWITCHED (Bit 4) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_SD_CMD_LINE_SWITCHED_Msk (0x10UL) /*!< SD_CMD_LINE_SWITCHED (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_SD_CLK_LINE_SWITCHED_Pos (3UL) /*!< SD_CLK_LINE_SWITCHED (Bit 3) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_SD_CLK_LINE_SWITCHED_Msk (0x8UL) /*!< SD_CLK_LINE_SWITCHED (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_CARD_VOLT_ACCEPTED_Pos (2UL) /*!< CARD_VOLT_ACCEPTED (Bit 2) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_CARD_VOLT_ACCEPTED_Msk (0x4UL) /*!< CARD_VOLT_ACCEPTED (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_DDR_DLY_SELECT_Pos (1UL) /*!< DDR_DLY_SELECT (Bit 1) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_DDR_DLY_SELECT_Msk (0x2UL) /*!< DDR_DLY_SELECT (Bitfield-Mask: 0x01) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_UHS_SUPPORT_Pos (0UL) /*!< UHS_SUPPORT (Bit 0) */ + #define SDIO_SDIO_UHS_SUPPORT_REG_UHS_SUPPORT_Msk (0x1UL) /*!< UHS_SUPPORT (Bitfield-Mask: 0x01) */ +/* =================================================== SDIO_WRBLKCNT_REG =================================================== */ + #define SDIO_SDIO_WRBLKCNT_REG_WR_BLK_CNT_Pos (0UL) /*!< WR_BLK_CNT (Bit 0) */ + #define SDIO_SDIO_WRBLKCNT_REG_WR_BLK_CNT_Msk (0xffffUL) /*!< WR_BLK_CNT (Bitfield-Mask: 0xffff) */ + +/* =========================================================================================================================== */ +/* ================ SPI ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== SPI_CLOCK_REG ===================================================== */ + #define SPI_SPI_CLOCK_REG_SPI_CLK_DIV_Pos (0UL) /*!< SPI_CLK_DIV (Bit 0) */ + #define SPI_SPI_CLOCK_REG_SPI_CLK_DIV_Msk (0x7fUL) /*!< SPI_CLK_DIV (Bitfield-Mask: 0x7f) */ +/* ==================================================== SPI_CONFIG_REG ===================================================== */ + #define SPI_SPI_CONFIG_REG_SPI_SLAVE_EN_Pos (7UL) /*!< SPI_SLAVE_EN (Bit 7) */ + #define SPI_SPI_CONFIG_REG_SPI_SLAVE_EN_Msk (0x80UL) /*!< SPI_SLAVE_EN (Bitfield-Mask: 0x01) */ + #define SPI_SPI_CONFIG_REG_SPI_WORD_LENGTH_Pos (2UL) /*!< SPI_WORD_LENGTH (Bit 2) */ + #define SPI_SPI_CONFIG_REG_SPI_WORD_LENGTH_Msk (0x7cUL) /*!< SPI_WORD_LENGTH (Bitfield-Mask: 0x1f) */ + #define SPI_SPI_CONFIG_REG_SPI_MODE_Pos (0UL) /*!< SPI_MODE (Bit 0) */ + #define SPI_SPI_CONFIG_REG_SPI_MODE_Msk (0x3UL) /*!< SPI_MODE (Bitfield-Mask: 0x03) */ +/* =================================================== SPI_CS_CONFIG_REG =================================================== */ + #define SPI_SPI_CS_CONFIG_REG_SPI_CS_SELECT_Pos (0UL) /*!< SPI_CS_SELECT (Bit 0) */ + #define SPI_SPI_CS_CONFIG_REG_SPI_CS_SELECT_Msk (0x7UL) /*!< SPI_CS_SELECT (Bitfield-Mask: 0x07) */ +/* ===================================================== SPI_CTRL_REG ====================================================== */ + #define SPI_SPI_CTRL_REG_SPI_SWAP_BYTES_Pos (7UL) /*!< SPI_SWAP_BYTES (Bit 7) */ + #define SPI_SPI_CTRL_REG_SPI_SWAP_BYTES_Msk (0x80UL) /*!< SPI_SWAP_BYTES (Bitfield-Mask: 0x01) */ + #define SPI_SPI_CTRL_REG_SPI_CAPTURE_AT_NEXT_EDGE_Pos (6UL) /*!< SPI_CAPTURE_AT_NEXT_EDGE (Bit 6) */ + #define SPI_SPI_CTRL_REG_SPI_CAPTURE_AT_NEXT_EDGE_Msk (0x40UL) /*!< SPI_CAPTURE_AT_NEXT_EDGE (Bitfield-Mask: 0x01) */ + #define SPI_SPI_CTRL_REG_SPI_FIFO_RESET_Pos (5UL) /*!< SPI_FIFO_RESET (Bit 5) */ + #define SPI_SPI_CTRL_REG_SPI_FIFO_RESET_Msk (0x20UL) /*!< SPI_FIFO_RESET (Bitfield-Mask: 0x01) */ + #define SPI_SPI_CTRL_REG_SPI_DMA_RX_EN_Pos (4UL) /*!< SPI_DMA_RX_EN (Bit 4) */ + #define SPI_SPI_CTRL_REG_SPI_DMA_RX_EN_Msk (0x10UL) /*!< SPI_DMA_RX_EN (Bitfield-Mask: 0x01) */ + #define SPI_SPI_CTRL_REG_SPI_DMA_TX_EN_Pos (3UL) /*!< SPI_DMA_TX_EN (Bit 3) */ + #define SPI_SPI_CTRL_REG_SPI_DMA_TX_EN_Msk (0x8UL) /*!< SPI_DMA_TX_EN (Bitfield-Mask: 0x01) */ + #define SPI_SPI_CTRL_REG_SPI_RX_EN_Pos (2UL) /*!< SPI_RX_EN (Bit 2) */ + #define SPI_SPI_CTRL_REG_SPI_RX_EN_Msk (0x4UL) /*!< SPI_RX_EN (Bitfield-Mask: 0x01) */ + #define SPI_SPI_CTRL_REG_SPI_TX_EN_Pos (1UL) /*!< SPI_TX_EN (Bit 1) */ + #define SPI_SPI_CTRL_REG_SPI_TX_EN_Msk (0x2UL) /*!< SPI_TX_EN (Bitfield-Mask: 0x01) */ + #define SPI_SPI_CTRL_REG_SPI_EN_Pos (0UL) /*!< SPI_EN (Bit 0) */ + #define SPI_SPI_CTRL_REG_SPI_EN_Msk (0x1UL) /*!< SPI_EN (Bitfield-Mask: 0x01) */ +/* ================================================== SPI_FIFO_CONFIG_REG ================================================== */ + #define SPI_SPI_FIFO_CONFIG_REG_SPI_RX_TL_Pos (8UL) /*!< SPI_RX_TL (Bit 8) */ + #define SPI_SPI_FIFO_CONFIG_REG_SPI_RX_TL_Msk (0xff00UL) /*!< SPI_RX_TL (Bitfield-Mask: 0xff) */ + #define SPI_SPI_FIFO_CONFIG_REG_SPI_TX_TL_Pos (0UL) /*!< SPI_TX_TL (Bit 0) */ + #define SPI_SPI_FIFO_CONFIG_REG_SPI_TX_TL_Msk (0xffUL) /*!< SPI_TX_TL (Bitfield-Mask: 0xff) */ +/* =================================================== SPI_FIFO_READ_REG =================================================== */ + #define SPI_SPI_FIFO_READ_REG_SPI_FIFO_READ_Pos (0UL) /*!< SPI_FIFO_READ (Bit 0) */ + #define SPI_SPI_FIFO_READ_REG_SPI_FIFO_READ_Msk (0xffffffffUL) /*!< SPI_FIFO_READ (Bitfield-Mask: 0xffffffff) */ +/* ================================================== SPI_FIFO_STATUS_REG ================================================== */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_TRANSACTION_ACTIVE_Pos (15UL) /*!< SPI_TRANSACTION_ACTIVE (Bit 15) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_TRANSACTION_ACTIVE_Msk (0x8000UL) /*!< SPI_TRANSACTION_ACTIVE (Bitfield-Mask: 0x01) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_RX_FIFO_OVFL_Pos (14UL) /*!< SPI_RX_FIFO_OVFL (Bit 14) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_RX_FIFO_OVFL_Msk (0x4000UL) /*!< SPI_RX_FIFO_OVFL (Bitfield-Mask: 0x01) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_STATUS_TX_FULL_Pos (13UL) /*!< SPI_STATUS_TX_FULL (Bit 13) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_STATUS_TX_FULL_Msk (0x2000UL) /*!< SPI_STATUS_TX_FULL (Bitfield-Mask: 0x01) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_STATUS_RX_EMPTY_Pos (12UL) /*!< SPI_STATUS_RX_EMPTY (Bit 12) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_STATUS_RX_EMPTY_Msk (0x1000UL) /*!< SPI_STATUS_RX_EMPTY (Bitfield-Mask: 0x01) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_TX_FIFO_LEVEL_Pos (6UL) /*!< SPI_TX_FIFO_LEVEL (Bit 6) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_TX_FIFO_LEVEL_Msk (0xfc0UL) /*!< SPI_TX_FIFO_LEVEL (Bitfield-Mask: 0x3f) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_RX_FIFO_LEVEL_Pos (0UL) /*!< SPI_RX_FIFO_LEVEL (Bit 0) */ + #define SPI_SPI_FIFO_STATUS_REG_SPI_RX_FIFO_LEVEL_Msk (0x3fUL) /*!< SPI_RX_FIFO_LEVEL (Bitfield-Mask: 0x3f) */ +/* ================================================== SPI_FIFO_WRITE_REG =================================================== */ + #define SPI_SPI_FIFO_WRITE_REG_SPI_FIFO_WRITE_Pos (0UL) /*!< SPI_FIFO_WRITE (Bit 0) */ + #define SPI_SPI_FIFO_WRITE_REG_SPI_FIFO_WRITE_Msk (0xffffffffUL) /*!< SPI_FIFO_WRITE (Bitfield-Mask: 0xffffffff) */ +/* =================================================== SPI_IRQ_MASK_REG ==================================================== */ + #define SPI_SPI_IRQ_MASK_REG_SPI_IRQ_MASK_RX_FULL_Pos (1UL) /*!< SPI_IRQ_MASK_RX_FULL (Bit 1) */ + #define SPI_SPI_IRQ_MASK_REG_SPI_IRQ_MASK_RX_FULL_Msk (0x2UL) /*!< SPI_IRQ_MASK_RX_FULL (Bitfield-Mask: 0x01) */ + #define SPI_SPI_IRQ_MASK_REG_SPI_IRQ_MASK_TX_EMPTY_Pos (0UL) /*!< SPI_IRQ_MASK_TX_EMPTY (Bit 0) */ + #define SPI_SPI_IRQ_MASK_REG_SPI_IRQ_MASK_TX_EMPTY_Msk (0x1UL) /*!< SPI_IRQ_MASK_TX_EMPTY (Bitfield-Mask: 0x01) */ +/* ==================================================== SPI_STATUS_REG ===================================================== */ + #define SPI_SPI_STATUS_REG_SPI_STATUS_RX_FULL_Pos (1UL) /*!< SPI_STATUS_RX_FULL (Bit 1) */ + #define SPI_SPI_STATUS_REG_SPI_STATUS_RX_FULL_Msk (0x2UL) /*!< SPI_STATUS_RX_FULL (Bitfield-Mask: 0x01) */ + #define SPI_SPI_STATUS_REG_SPI_STATUS_TX_EMPTY_Pos (0UL) /*!< SPI_STATUS_TX_EMPTY (Bit 0) */ + #define SPI_SPI_STATUS_REG_SPI_STATUS_TX_EMPTY_Msk (0x1UL) /*!< SPI_STATUS_TX_EMPTY (Bitfield-Mask: 0x01) */ +/* ================================================ SPI_TXBUFFER_FORCE_REG ================================================= */ + #define SPI_SPI_TXBUFFER_FORCE_REG_SPI_TXBUFFER_FORCE_Pos (0UL) /*!< SPI_TXBUFFER_FORCE (Bit 0) */ + #define SPI_SPI_TXBUFFER_FORCE_REG_SPI_TXBUFFER_FORCE_Msk (0xffffffffUL) /*!< SPI_TXBUFFER_FORCE (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ SPI2 ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== SPI2_CLOCK_REG ===================================================== */ + #define SPI2_SPI2_CLOCK_REG_SPI_CLK_DIV_Pos (0UL) /*!< SPI_CLK_DIV (Bit 0) */ + #define SPI2_SPI2_CLOCK_REG_SPI_CLK_DIV_Msk (0x7fUL) /*!< SPI_CLK_DIV (Bitfield-Mask: 0x7f) */ +/* ==================================================== SPI2_CONFIG_REG ==================================================== */ + #define SPI2_SPI2_CONFIG_REG_SPI_SLAVE_EN_Pos (7UL) /*!< SPI_SLAVE_EN (Bit 7) */ + #define SPI2_SPI2_CONFIG_REG_SPI_SLAVE_EN_Msk (0x80UL) /*!< SPI_SLAVE_EN (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_CONFIG_REG_SPI_WORD_LENGTH_Pos (2UL) /*!< SPI_WORD_LENGTH (Bit 2) */ + #define SPI2_SPI2_CONFIG_REG_SPI_WORD_LENGTH_Msk (0x7cUL) /*!< SPI_WORD_LENGTH (Bitfield-Mask: 0x1f) */ + #define SPI2_SPI2_CONFIG_REG_SPI_MODE_Pos (0UL) /*!< SPI_MODE (Bit 0) */ + #define SPI2_SPI2_CONFIG_REG_SPI_MODE_Msk (0x3UL) /*!< SPI_MODE (Bitfield-Mask: 0x03) */ +/* ================================================== SPI2_CS_CONFIG_REG =================================================== */ + #define SPI2_SPI2_CS_CONFIG_REG_SPI_CS_SELECT_Pos (0UL) /*!< SPI_CS_SELECT (Bit 0) */ + #define SPI2_SPI2_CS_CONFIG_REG_SPI_CS_SELECT_Msk (0x7UL) /*!< SPI_CS_SELECT (Bitfield-Mask: 0x07) */ +/* ===================================================== SPI2_CTRL_REG ===================================================== */ + #define SPI2_SPI2_CTRL_REG_SPI_SWAP_BYTES_Pos (7UL) /*!< SPI_SWAP_BYTES (Bit 7) */ + #define SPI2_SPI2_CTRL_REG_SPI_SWAP_BYTES_Msk (0x80UL) /*!< SPI_SWAP_BYTES (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_CTRL_REG_SPI_CAPTURE_AT_NEXT_EDGE_Pos (6UL) /*!< SPI_CAPTURE_AT_NEXT_EDGE (Bit 6) */ + #define SPI2_SPI2_CTRL_REG_SPI_CAPTURE_AT_NEXT_EDGE_Msk (0x40UL) /*!< SPI_CAPTURE_AT_NEXT_EDGE (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_CTRL_REG_SPI_FIFO_RESET_Pos (5UL) /*!< SPI_FIFO_RESET (Bit 5) */ + #define SPI2_SPI2_CTRL_REG_SPI_FIFO_RESET_Msk (0x20UL) /*!< SPI_FIFO_RESET (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_CTRL_REG_SPI_DMA_RX_EN_Pos (4UL) /*!< SPI_DMA_RX_EN (Bit 4) */ + #define SPI2_SPI2_CTRL_REG_SPI_DMA_RX_EN_Msk (0x10UL) /*!< SPI_DMA_RX_EN (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_CTRL_REG_SPI_DMA_TX_EN_Pos (3UL) /*!< SPI_DMA_TX_EN (Bit 3) */ + #define SPI2_SPI2_CTRL_REG_SPI_DMA_TX_EN_Msk (0x8UL) /*!< SPI_DMA_TX_EN (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_CTRL_REG_SPI_RX_EN_Pos (2UL) /*!< SPI_RX_EN (Bit 2) */ + #define SPI2_SPI2_CTRL_REG_SPI_RX_EN_Msk (0x4UL) /*!< SPI_RX_EN (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_CTRL_REG_SPI_TX_EN_Pos (1UL) /*!< SPI_TX_EN (Bit 1) */ + #define SPI2_SPI2_CTRL_REG_SPI_TX_EN_Msk (0x2UL) /*!< SPI_TX_EN (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_CTRL_REG_SPI_EN_Pos (0UL) /*!< SPI_EN (Bit 0) */ + #define SPI2_SPI2_CTRL_REG_SPI_EN_Msk (0x1UL) /*!< SPI_EN (Bitfield-Mask: 0x01) */ +/* ================================================= SPI2_FIFO_CONFIG_REG ================================================== */ + #define SPI2_SPI2_FIFO_CONFIG_REG_SPI_RX_TL_Pos (8UL) /*!< SPI_RX_TL (Bit 8) */ + #define SPI2_SPI2_FIFO_CONFIG_REG_SPI_RX_TL_Msk (0xff00UL) /*!< SPI_RX_TL (Bitfield-Mask: 0xff) */ + #define SPI2_SPI2_FIFO_CONFIG_REG_SPI_TX_TL_Pos (0UL) /*!< SPI_TX_TL (Bit 0) */ + #define SPI2_SPI2_FIFO_CONFIG_REG_SPI_TX_TL_Msk (0xffUL) /*!< SPI_TX_TL (Bitfield-Mask: 0xff) */ +/* ================================================== SPI2_FIFO_READ_REG =================================================== */ + #define SPI2_SPI2_FIFO_READ_REG_SPI_FIFO_READ_Pos (0UL) /*!< SPI_FIFO_READ (Bit 0) */ + #define SPI2_SPI2_FIFO_READ_REG_SPI_FIFO_READ_Msk (0xffffffffUL) /*!< SPI_FIFO_READ (Bitfield-Mask: 0xffffffff) */ +/* ================================================= SPI2_FIFO_STATUS_REG ================================================== */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_TRANSACTION_ACTIVE_Pos (15UL) /*!< SPI_TRANSACTION_ACTIVE (Bit 15) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_TRANSACTION_ACTIVE_Msk (0x8000UL) /*!< SPI_TRANSACTION_ACTIVE (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_RX_FIFO_OVFL_Pos (14UL) /*!< SPI_RX_FIFO_OVFL (Bit 14) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_RX_FIFO_OVFL_Msk (0x4000UL) /*!< SPI_RX_FIFO_OVFL (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_STATUS_TX_FULL_Pos (13UL) /*!< SPI_STATUS_TX_FULL (Bit 13) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_STATUS_TX_FULL_Msk (0x2000UL) /*!< SPI_STATUS_TX_FULL (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_STATUS_RX_EMPTY_Pos (12UL) /*!< SPI_STATUS_RX_EMPTY (Bit 12) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_STATUS_RX_EMPTY_Msk (0x1000UL) /*!< SPI_STATUS_RX_EMPTY (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_TX_FIFO_LEVEL_Pos (6UL) /*!< SPI_TX_FIFO_LEVEL (Bit 6) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_TX_FIFO_LEVEL_Msk (0xfc0UL) /*!< SPI_TX_FIFO_LEVEL (Bitfield-Mask: 0x3f) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_RX_FIFO_LEVEL_Pos (0UL) /*!< SPI_RX_FIFO_LEVEL (Bit 0) */ + #define SPI2_SPI2_FIFO_STATUS_REG_SPI_RX_FIFO_LEVEL_Msk (0x3fUL) /*!< SPI_RX_FIFO_LEVEL (Bitfield-Mask: 0x3f) */ +/* ================================================== SPI2_FIFO_WRITE_REG ================================================== */ + #define SPI2_SPI2_FIFO_WRITE_REG_SPI_FIFO_WRITE_Pos (0UL) /*!< SPI_FIFO_WRITE (Bit 0) */ + #define SPI2_SPI2_FIFO_WRITE_REG_SPI_FIFO_WRITE_Msk (0xffffffffUL) /*!< SPI_FIFO_WRITE (Bitfield-Mask: 0xffffffff) */ +/* =================================================== SPI2_IRQ_MASK_REG =================================================== */ + #define SPI2_SPI2_IRQ_MASK_REG_SPI_IRQ_MASK_RX_FULL_Pos (1UL) /*!< SPI_IRQ_MASK_RX_FULL (Bit 1) */ + #define SPI2_SPI2_IRQ_MASK_REG_SPI_IRQ_MASK_RX_FULL_Msk (0x2UL) /*!< SPI_IRQ_MASK_RX_FULL (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_IRQ_MASK_REG_SPI_IRQ_MASK_TX_EMPTY_Pos (0UL) /*!< SPI_IRQ_MASK_TX_EMPTY (Bit 0) */ + #define SPI2_SPI2_IRQ_MASK_REG_SPI_IRQ_MASK_TX_EMPTY_Msk (0x1UL) /*!< SPI_IRQ_MASK_TX_EMPTY (Bitfield-Mask: 0x01) */ +/* ==================================================== SPI2_STATUS_REG ==================================================== */ + #define SPI2_SPI2_STATUS_REG_SPI_STATUS_RX_FULL_Pos (1UL) /*!< SPI_STATUS_RX_FULL (Bit 1) */ + #define SPI2_SPI2_STATUS_REG_SPI_STATUS_RX_FULL_Msk (0x2UL) /*!< SPI_STATUS_RX_FULL (Bitfield-Mask: 0x01) */ + #define SPI2_SPI2_STATUS_REG_SPI_STATUS_TX_EMPTY_Pos (0UL) /*!< SPI_STATUS_TX_EMPTY (Bit 0) */ + #define SPI2_SPI2_STATUS_REG_SPI_STATUS_TX_EMPTY_Msk (0x1UL) /*!< SPI_STATUS_TX_EMPTY (Bitfield-Mask: 0x01) */ +/* ================================================ SPI2_TXBUFFER_FORCE_REG ================================================ */ + #define SPI2_SPI2_TXBUFFER_FORCE_REG_SPI_TXBUFFER_FORCE_Pos (0UL) /*!< SPI_TXBUFFER_FORCE (Bit 0) */ + #define SPI2_SPI2_TXBUFFER_FORCE_REG_SPI_TXBUFFER_FORCE_Msk (0xffffffffUL) /*!< SPI_TXBUFFER_FORCE (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ SRC_FIFO_IF ================ */ +/* =========================================================================================================================== */ + +/* ================================================= APU_DAI_FIFO_IN1_REG ================================================== */ + #define SRC_FIFO_IF_APU_DAI_FIFO_IN1_REG_DAI_IN_Pos (0UL) /*!< DAI_IN (Bit 0) */ + #define SRC_FIFO_IF_APU_DAI_FIFO_IN1_REG_DAI_IN_Msk (0xffffffffUL) /*!< DAI_IN (Bitfield-Mask: 0xffffffff) */ +/* ================================================= APU_DAI_FIFO_IN2_REG ================================================== */ + #define SRC_FIFO_IF_APU_DAI_FIFO_IN2_REG_DAI_IN_Pos (0UL) /*!< DAI_IN (Bit 0) */ + #define SRC_FIFO_IF_APU_DAI_FIFO_IN2_REG_DAI_IN_Msk (0xffffffffUL) /*!< DAI_IN (Bitfield-Mask: 0xffffffff) */ +/* ================================================= APU_DAI_FIFO_OUT1_REG ================================================= */ + #define SRC_FIFO_IF_APU_DAI_FIFO_OUT1_REG_DAI_OUT_Pos (0UL) /*!< DAI_OUT (Bit 0) */ + #define SRC_FIFO_IF_APU_DAI_FIFO_OUT1_REG_DAI_OUT_Msk (0xffffffffUL) /*!< DAI_OUT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= APU_DAI_FIFO_OUT2_REG ================================================= */ + #define SRC_FIFO_IF_APU_DAI_FIFO_OUT2_REG_DAI_OUT_Pos (0UL) /*!< DAI_OUT (Bit 0) */ + #define SRC_FIFO_IF_APU_DAI_FIFO_OUT2_REG_DAI_OUT_Msk (0xffffffffUL) /*!< DAI_OUT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== APU_FIFO_STATUS_REG ================================================== */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH2_IN_FULL_Pos (23UL) /*!< DAI_CH2_IN_FULL (Bit 23) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH2_IN_FULL_Msk (0x800000UL) /*!< DAI_CH2_IN_FULL (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH2_IN_EMPTY_Pos (22UL) /*!< DAI_CH2_IN_EMPTY (Bit 22) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH2_IN_EMPTY_Msk (0x400000UL) /*!< DAI_CH2_IN_EMPTY (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH2_OUT_FULL_Pos (21UL) /*!< DAI_CH2_OUT_FULL (Bit 21) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH2_OUT_FULL_Msk (0x200000UL) /*!< DAI_CH2_OUT_FULL (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH2_OUT_EMPTY_Pos (20UL) /*!< DAI_CH2_OUT_EMPTY (Bit 20) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH2_OUT_EMPTY_Msk (0x100000UL) /*!< DAI_CH2_OUT_EMPTY (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH1_IN_FULL_Pos (19UL) /*!< DAI_CH1_IN_FULL (Bit 19) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH1_IN_FULL_Msk (0x80000UL) /*!< DAI_CH1_IN_FULL (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH1_IN_EMPTY_Pos (18UL) /*!< DAI_CH1_IN_EMPTY (Bit 18) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH1_IN_EMPTY_Msk (0x40000UL) /*!< DAI_CH1_IN_EMPTY (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH1_OUT_FULL_Pos (17UL) /*!< DAI_CH1_OUT_FULL (Bit 17) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH1_OUT_FULL_Msk (0x20000UL) /*!< DAI_CH1_OUT_FULL (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH1_OUT_EMPTY_Pos (16UL) /*!< DAI_CH1_OUT_EMPTY (Bit 16) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_DAI_CH1_OUT_EMPTY_Msk (0x10000UL) /*!< DAI_CH1_OUT_EMPTY (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH2_OUT_FULL_Pos (7UL) /*!< SRC_CH2_OUT_FULL (Bit 7) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH2_OUT_FULL_Msk (0x80UL) /*!< SRC_CH2_OUT_FULL (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH2_OUT_EMPTY_Pos (6UL) /*!< SRC_CH2_OUT_EMPTY (Bit 6) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH2_OUT_EMPTY_Msk (0x40UL) /*!< SRC_CH2_OUT_EMPTY (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH2_IN_FULL_Pos (5UL) /*!< SRC_CH2_IN_FULL (Bit 5) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH2_IN_FULL_Msk (0x20UL) /*!< SRC_CH2_IN_FULL (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH2_IN_EMPTY_Pos (4UL) /*!< SRC_CH2_IN_EMPTY (Bit 4) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH2_IN_EMPTY_Msk (0x10UL) /*!< SRC_CH2_IN_EMPTY (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH1_OUT_FULL_Pos (3UL) /*!< SRC_CH1_OUT_FULL (Bit 3) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH1_OUT_FULL_Msk (0x8UL) /*!< SRC_CH1_OUT_FULL (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH1_OUT_EMPTY_Pos (2UL) /*!< SRC_CH1_OUT_EMPTY (Bit 2) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH1_OUT_EMPTY_Msk (0x4UL) /*!< SRC_CH1_OUT_EMPTY (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH1_IN_FULL_Pos (1UL) /*!< SRC_CH1_IN_FULL (Bit 1) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH1_IN_FULL_Msk (0x2UL) /*!< SRC_CH1_IN_FULL (Bitfield-Mask: 0x01) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH1_IN_EMPTY_Pos (0UL) /*!< SRC_CH1_IN_EMPTY (Bit 0) */ + #define SRC_FIFO_IF_APU_FIFO_STATUS_REG_SRC_CH1_IN_EMPTY_Msk (0x1UL) /*!< SRC_CH1_IN_EMPTY (Bitfield-Mask: 0x01) */ +/* ================================================= APU_SRC_FIFO_IN1_REG ================================================== */ + #define SRC_FIFO_IF_APU_SRC_FIFO_IN1_REG_SRC_IN_Pos (0UL) /*!< SRC_IN (Bit 0) */ + #define SRC_FIFO_IF_APU_SRC_FIFO_IN1_REG_SRC_IN_Msk (0xffffffffUL) /*!< SRC_IN (Bitfield-Mask: 0xffffffff) */ +/* ================================================= APU_SRC_FIFO_IN2_REG ================================================== */ + #define SRC_FIFO_IF_APU_SRC_FIFO_IN2_REG_SRC_IN_Pos (0UL) /*!< SRC_IN (Bit 0) */ + #define SRC_FIFO_IF_APU_SRC_FIFO_IN2_REG_SRC_IN_Msk (0xffffffffUL) /*!< SRC_IN (Bitfield-Mask: 0xffffffff) */ +/* ================================================= APU_SRC_FIFO_OUT1_REG ================================================= */ + #define SRC_FIFO_IF_APU_SRC_FIFO_OUT1_REG_SRC_OUT_Pos (0UL) /*!< SRC_OUT (Bit 0) */ + #define SRC_FIFO_IF_APU_SRC_FIFO_OUT1_REG_SRC_OUT_Msk (0xffffffffUL) /*!< SRC_OUT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= APU_SRC_FIFO_OUT2_REG ================================================= */ + #define SRC_FIFO_IF_APU_SRC_FIFO_OUT2_REG_SRC_OUT_Pos (0UL) /*!< SRC_OUT (Bit 0) */ + #define SRC_FIFO_IF_APU_SRC_FIFO_OUT2_REG_SRC_OUT_Msk (0xffffffffUL) /*!< SRC_OUT (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ SRC_IF ================ */ +/* =========================================================================================================================== */ + +/* ================================================= APU_DAI_FIFO_CTRL_REG ================================================= */ + #define SRC_IF_APU_DAI_FIFO_CTRL_REG_FIFO_CTRL_Pos (0UL) /*!< FIFO_CTRL (Bit 0) */ + #define SRC_IF_APU_DAI_FIFO_CTRL_REG_FIFO_CTRL_Msk (0xffffffffUL) /*!< FIFO_CTRL (Bitfield-Mask: 0xffffffff) */ +/* ================================================ APU_SRC_COEF0A_SET1_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF0A_SET1_REG_SRC_COEF10_Pos (0UL) /*!< SRC_COEF10 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF0A_SET1_REG_SRC_COEF10_Msk (0xffffUL) /*!< SRC_COEF10 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF0A_SET2_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF0A_SET2_REG_SRC_COEF10_Pos (0UL) /*!< SRC_COEF10 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF0A_SET2_REG_SRC_COEF10_Msk (0xffffUL) /*!< SRC_COEF10 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF10_SET1_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF10_SET1_REG_SRC_COEF1_Pos (16UL) /*!< SRC_COEF1 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF10_SET1_REG_SRC_COEF1_Msk (0xffff0000UL) /*!< SRC_COEF1 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF10_SET1_REG_SRC_COEF0_Pos (0UL) /*!< SRC_COEF0 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF10_SET1_REG_SRC_COEF0_Msk (0xffffUL) /*!< SRC_COEF0 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF10_SET2_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF10_SET2_REG_SRC_COEF1_Pos (16UL) /*!< SRC_COEF1 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF10_SET2_REG_SRC_COEF1_Msk (0xffff0000UL) /*!< SRC_COEF1 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF10_SET2_REG_SRC_COEF0_Pos (0UL) /*!< SRC_COEF0 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF10_SET2_REG_SRC_COEF0_Msk (0xffffUL) /*!< SRC_COEF0 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF32_SET1_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF32_SET1_REG_SRC_COEF3_Pos (16UL) /*!< SRC_COEF3 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF32_SET1_REG_SRC_COEF3_Msk (0xffff0000UL) /*!< SRC_COEF3 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF32_SET1_REG_SRC_COEF2_Pos (0UL) /*!< SRC_COEF2 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF32_SET1_REG_SRC_COEF2_Msk (0xffffUL) /*!< SRC_COEF2 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF32_SET2_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF32_SET2_REG_SRC_COEF3_Pos (16UL) /*!< SRC_COEF3 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF32_SET2_REG_SRC_COEF3_Msk (0xffff0000UL) /*!< SRC_COEF3 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF32_SET2_REG_SRC_COEF2_Pos (0UL) /*!< SRC_COEF2 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF32_SET2_REG_SRC_COEF2_Msk (0xffffUL) /*!< SRC_COEF2 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF54_SET1_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF54_SET1_REG_SRC_COEF5_Pos (16UL) /*!< SRC_COEF5 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF54_SET1_REG_SRC_COEF5_Msk (0xffff0000UL) /*!< SRC_COEF5 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF54_SET1_REG_SRC_COEF4_Pos (0UL) /*!< SRC_COEF4 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF54_SET1_REG_SRC_COEF4_Msk (0xffffUL) /*!< SRC_COEF4 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF54_SET2_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF54_SET2_REG_SRC_COEF5_Pos (16UL) /*!< SRC_COEF5 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF54_SET2_REG_SRC_COEF5_Msk (0xffff0000UL) /*!< SRC_COEF5 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF54_SET2_REG_SRC_COEF4_Pos (0UL) /*!< SRC_COEF4 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF54_SET2_REG_SRC_COEF4_Msk (0xffffUL) /*!< SRC_COEF4 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF76_SET1_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF76_SET1_REG_SRC_COEF7_Pos (16UL) /*!< SRC_COEF7 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF76_SET1_REG_SRC_COEF7_Msk (0xffff0000UL) /*!< SRC_COEF7 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF76_SET1_REG_SRC_COEF6_Pos (0UL) /*!< SRC_COEF6 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF76_SET1_REG_SRC_COEF6_Msk (0xffffUL) /*!< SRC_COEF6 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF76_SET2_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF76_SET2_REG_SRC_COEF7_Pos (16UL) /*!< SRC_COEF7 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF76_SET2_REG_SRC_COEF7_Msk (0xffff0000UL) /*!< SRC_COEF7 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF76_SET2_REG_SRC_COEF6_Pos (0UL) /*!< SRC_COEF6 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF76_SET2_REG_SRC_COEF6_Msk (0xffffUL) /*!< SRC_COEF6 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF98_SET1_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF98_SET1_REG_SRC_COEF9_Pos (16UL) /*!< SRC_COEF9 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF98_SET1_REG_SRC_COEF9_Msk (0xffff0000UL) /*!< SRC_COEF9 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF98_SET1_REG_SRC_COEF8_Pos (0UL) /*!< SRC_COEF8 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF98_SET1_REG_SRC_COEF8_Msk (0xffffUL) /*!< SRC_COEF8 (Bitfield-Mask: 0xffff) */ +/* ================================================ APU_SRC_COEF98_SET2_REG ================================================ */ + #define SRC_IF_APU_SRC_COEF98_SET2_REG_SRC_COEF9_Pos (16UL) /*!< SRC_COEF9 (Bit 16) */ + #define SRC_IF_APU_SRC_COEF98_SET2_REG_SRC_COEF9_Msk (0xffff0000UL) /*!< SRC_COEF9 (Bitfield-Mask: 0xffff) */ + #define SRC_IF_APU_SRC_COEF98_SET2_REG_SRC_COEF8_Pos (0UL) /*!< SRC_COEF8 (Bit 0) */ + #define SRC_IF_APU_SRC_COEF98_SET2_REG_SRC_COEF8_Msk (0xffffUL) /*!< SRC_COEF8 (Bitfield-Mask: 0xffff) */ +/* =================================================== APU_SRC_CTRL_REG ==================================================== */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_COEF_SET_Pos (30UL) /*!< SRC_IN_COEF_SET (Bit 30) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_COEF_SET_Msk (0x40000000UL) /*!< SRC_IN_COEF_SET (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_FIFO_OUT2_ENABLE_Pos (27UL) /*!< SRC_FIFO_OUT2_ENABLE (Bit 27) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_FIFO_OUT2_ENABLE_Msk (0x8000000UL) /*!< SRC_FIFO_OUT2_ENABLE (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_FIFO_OUT1_ENABLE_Pos (26UL) /*!< SRC_FIFO_OUT1_ENABLE (Bit 26) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_FIFO_OUT1_ENABLE_Msk (0x4000000UL) /*!< SRC_FIFO_OUT1_ENABLE (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_FLOWCLR_Pos (25UL) /*!< SRC_OUT_FLOWCLR (Bit 25) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_FLOWCLR_Msk (0x2000000UL) /*!< SRC_OUT_FLOWCLR (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_FLOWCLR_Pos (24UL) /*!< SRC_IN_FLOWCLR (Bit 24) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_FLOWCLR_Msk (0x1000000UL) /*!< SRC_IN_FLOWCLR (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_UNFLOW_Pos (23UL) /*!< SRC_OUT_UNFLOW (Bit 23) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_UNFLOW_Msk (0x800000UL) /*!< SRC_OUT_UNFLOW (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_OVFLOW_Pos (22UL) /*!< SRC_OUT_OVFLOW (Bit 22) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_OVFLOW_Msk (0x400000UL) /*!< SRC_OUT_OVFLOW (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_UNFLOW_Pos (21UL) /*!< SRC_IN_UNFLOW (Bit 21) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_UNFLOW_Msk (0x200000UL) /*!< SRC_IN_UNFLOW (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_OVFLOW_Pos (20UL) /*!< SRC_IN_OVFLOW (Bit 20) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_OVFLOW_Msk (0x100000UL) /*!< SRC_IN_OVFLOW (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_RESYNC_Pos (19UL) /*!< SRC_RESYNC (Bit 19) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_RESYNC_Msk (0x80000UL) /*!< SRC_RESYNC (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_OK_Pos (18UL) /*!< SRC_OUT_OK (Bit 18) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_OK_Msk (0x40000UL) /*!< SRC_OUT_OK (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_US_Pos (16UL) /*!< SRC_OUT_US (Bit 16) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_US_Msk (0x30000UL) /*!< SRC_OUT_US (Bitfield-Mask: 0x03) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_SET_Pos (15UL) /*!< SRC_OUT_SET (Bit 15) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_SET_Msk (0x8000UL) /*!< SRC_OUT_SET (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_CAL_BYPASS_Pos (14UL) /*!< SRC_OUT_CAL_BYPASS (Bit 14) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_CAL_BYPASS_Msk (0x4000UL) /*!< SRC_OUT_CAL_BYPASS (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_AMODE_Pos (13UL) /*!< SRC_OUT_AMODE (Bit 13) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_OUT_AMODE_Msk (0x2000UL) /*!< SRC_OUT_AMODE (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_PDM_EN_Pos (12UL) /*!< SRC_PDM_EN (Bit 12) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_PDM_EN_Msk (0x1000UL) /*!< SRC_PDM_EN (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_FIFO_IN2_ENABLE_Pos (11UL) /*!< SRC_FIFO_IN2_ENABLE (Bit 11) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_FIFO_IN2_ENABLE_Msk (0x800UL) /*!< SRC_FIFO_IN2_ENABLE (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_FIFO_IN1_ENABLE_Pos (10UL) /*!< SRC_FIFO_IN1_ENABLE (Bit 10) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_FIFO_IN1_ENABLE_Msk (0x400UL) /*!< SRC_FIFO_IN1_ENABLE (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_PCM_GAIN_Pos (8UL) /*!< SRC_PCM_GAIN (Bit 8) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_PCM_GAIN_Msk (0x300UL) /*!< SRC_PCM_GAIN (Bitfield-Mask: 0x03) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_DITHER_DISABLE_Pos (7UL) /*!< SRC_DITHER_DISABLE (Bit 7) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_DITHER_DISABLE_Msk (0x80UL) /*!< SRC_DITHER_DISABLE (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_OK_Pos (6UL) /*!< SRC_IN_OK (Bit 6) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_OK_Msk (0x40UL) /*!< SRC_IN_OK (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_DS_Pos (4UL) /*!< SRC_IN_DS (Bit 4) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_DS_Msk (0x30UL) /*!< SRC_IN_DS (Bitfield-Mask: 0x03) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_PDM_IN_INV_Pos (3UL) /*!< SRC_PDM_IN_INV (Bit 3) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_PDM_IN_INV_Msk (0x8UL) /*!< SRC_PDM_IN_INV (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_CAL_BYPASS_Pos (2UL) /*!< SRC_IN_CAL_BYPASS (Bit 2) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_CAL_BYPASS_Msk (0x4UL) /*!< SRC_IN_CAL_BYPASS (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_AMODE_Pos (1UL) /*!< SRC_IN_AMODE (Bit 1) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_IN_AMODE_Msk (0x2UL) /*!< SRC_IN_AMODE (Bitfield-Mask: 0x01) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_EN_Pos (0UL) /*!< SRC_EN (Bit 0) */ + #define SRC_IF_APU_SRC_CTRL_REG_SRC_EN_Msk (0x1UL) /*!< SRC_EN (Bitfield-Mask: 0x01) */ +/* ================================================= APU_SRC_FIFO_CTRL_REG ================================================= */ + #define SRC_IF_APU_SRC_FIFO_CTRL_REG_FIFO_CTRL_Pos (0UL) /*!< FIFO_CTRL (Bit 0) */ + #define SRC_IF_APU_SRC_FIFO_CTRL_REG_FIFO_CTRL_Msk (0xffffffffUL) /*!< FIFO_CTRL (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== APU_SRC_IN1_REG ==================================================== */ + #define SRC_IF_APU_SRC_IN1_REG_SRC_IN_Pos (0UL) /*!< SRC_IN (Bit 0) */ + #define SRC_IF_APU_SRC_IN1_REG_SRC_IN_Msk (0xffffffffUL) /*!< SRC_IN (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== APU_SRC_IN2_REG ==================================================== */ + #define SRC_IF_APU_SRC_IN2_REG_SRC_IN_Pos (0UL) /*!< SRC_IN (Bit 0) */ + #define SRC_IF_APU_SRC_IN2_REG_SRC_IN_Msk (0xffffffffUL) /*!< SRC_IN (Bitfield-Mask: 0xffffffff) */ +/* =================================================== APU_SRC_IN_FS_REG =================================================== */ + #define SRC_IF_APU_SRC_IN_FS_REG_SRC_IN_FS_Pos (0UL) /*!< SRC_IN_FS (Bit 0) */ + #define SRC_IF_APU_SRC_IN_FS_REG_SRC_IN_FS_Msk (0xffffffUL) /*!< SRC_IN_FS (Bitfield-Mask: 0xffffff) */ +/* =================================================== APU_SRC_OUT1_REG ==================================================== */ + #define SRC_IF_APU_SRC_OUT1_REG_SRC_OUT_Pos (0UL) /*!< SRC_OUT (Bit 0) */ + #define SRC_IF_APU_SRC_OUT1_REG_SRC_OUT_Msk (0xffffffffUL) /*!< SRC_OUT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== APU_SRC_OUT2_REG ==================================================== */ + #define SRC_IF_APU_SRC_OUT2_REG_SRC_OUT_Pos (0UL) /*!< SRC_OUT (Bit 0) */ + #define SRC_IF_APU_SRC_OUT2_REG_SRC_OUT_Msk (0xffffffffUL) /*!< SRC_OUT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== APU_SRC_OUT_FS_REG =================================================== */ + #define SRC_IF_APU_SRC_OUT_FS_REG_SRC_OUT_FS_Pos (0UL) /*!< SRC_OUT_FS (Bit 0) */ + #define SRC_IF_APU_SRC_OUT_FS_REG_SRC_OUT_FS_Msk (0xffffffUL) /*!< SRC_OUT_FS (Bitfield-Mask: 0xffffff) */ + +/* =========================================================================================================================== */ +/* ================ SYS_WDOG ================ */ +/* =========================================================================================================================== */ + +/* =================================================== WATCHDOG_CTRL_REG =================================================== */ + #define SYS_WDOG_WATCHDOG_CTRL_REG_WRITE_BUSY_Pos (3UL) /*!< WRITE_BUSY (Bit 3) */ + #define SYS_WDOG_WATCHDOG_CTRL_REG_WRITE_BUSY_Msk (0x8UL) /*!< WRITE_BUSY (Bitfield-Mask: 0x01) */ + #define SYS_WDOG_WATCHDOG_CTRL_REG_WDOG_FREEZE_EN_Pos (2UL) /*!< WDOG_FREEZE_EN (Bit 2) */ + #define SYS_WDOG_WATCHDOG_CTRL_REG_WDOG_FREEZE_EN_Msk (0x4UL) /*!< WDOG_FREEZE_EN (Bitfield-Mask: 0x01) */ + #define SYS_WDOG_WATCHDOG_CTRL_REG_NMI_RST_Pos (0UL) /*!< NMI_RST (Bit 0) */ + #define SYS_WDOG_WATCHDOG_CTRL_REG_NMI_RST_Msk (0x1UL) /*!< NMI_RST (Bitfield-Mask: 0x01) */ +/* ===================================================== WATCHDOG_REG ====================================================== */ + #define SYS_WDOG_WATCHDOG_REG_WDOG_WEN_Pos (14UL) /*!< WDOG_WEN (Bit 14) */ + #define SYS_WDOG_WATCHDOG_REG_WDOG_WEN_Msk (0xffffc000UL) /*!< WDOG_WEN (Bitfield-Mask: 0x3ffff) */ + #define SYS_WDOG_WATCHDOG_REG_WDOG_VAL_NEG_Pos (13UL) /*!< WDOG_VAL_NEG (Bit 13) */ + #define SYS_WDOG_WATCHDOG_REG_WDOG_VAL_NEG_Msk (0x2000UL) /*!< WDOG_VAL_NEG (Bitfield-Mask: 0x01) */ + #define SYS_WDOG_WATCHDOG_REG_WDOG_VAL_Pos (0UL) /*!< WDOG_VAL (Bit 0) */ + #define SYS_WDOG_WATCHDOG_REG_WDOG_VAL_Msk (0x1fffUL) /*!< WDOG_VAL (Bitfield-Mask: 0x1fff) */ + +/* =========================================================================================================================== */ +/* ================ SYSBUS ================ */ +/* =========================================================================================================================== */ + +/* =================================================== AHB_DMA_CCLM1_REG =================================================== */ + #define SYSBUS_AHB_DMA_CCLM1_REG_AHB_DMA_CCLM_Pos (0UL) /*!< AHB_DMA_CCLM (Bit 0) */ + #define SYSBUS_AHB_DMA_CCLM1_REG_AHB_DMA_CCLM_Msk (0xffffUL) /*!< AHB_DMA_CCLM (Bitfield-Mask: 0xffff) */ +/* =================================================== AHB_DMA_CCLM2_REG =================================================== */ + #define SYSBUS_AHB_DMA_CCLM2_REG_AHB_DMA_CCLM_Pos (0UL) /*!< AHB_DMA_CCLM (Bit 0) */ + #define SYSBUS_AHB_DMA_CCLM2_REG_AHB_DMA_CCLM_Msk (0xffffUL) /*!< AHB_DMA_CCLM (Bitfield-Mask: 0xffff) */ +/* =================================================== AHB_DMA_CCLM3_REG =================================================== */ + #define SYSBUS_AHB_DMA_CCLM3_REG_AHB_DMA_CCLM_Pos (0UL) /*!< AHB_DMA_CCLM (Bit 0) */ + #define SYSBUS_AHB_DMA_CCLM3_REG_AHB_DMA_CCLM_Msk (0xffffUL) /*!< AHB_DMA_CCLM (Bitfield-Mask: 0xffff) */ +/* =================================================== AHB_DMA_CCLM4_REG =================================================== */ + #define SYSBUS_AHB_DMA_CCLM4_REG_AHB_DMA_CCLM_Pos (0UL) /*!< AHB_DMA_CCLM (Bit 0) */ + #define SYSBUS_AHB_DMA_CCLM4_REG_AHB_DMA_CCLM_Msk (0xffffUL) /*!< AHB_DMA_CCLM (Bitfield-Mask: 0xffff) */ +/* =================================================== AHB_DMA_CCLM5_REG =================================================== */ + #define SYSBUS_AHB_DMA_CCLM5_REG_AHB_DMA_CCLM_Pos (0UL) /*!< AHB_DMA_CCLM (Bit 0) */ + #define SYSBUS_AHB_DMA_CCLM5_REG_AHB_DMA_CCLM_Msk (0xffffUL) /*!< AHB_DMA_CCLM (Bitfield-Mask: 0xffff) */ +/* =================================================== AHB_DMA_CCLM6_REG =================================================== */ + #define SYSBUS_AHB_DMA_CCLM6_REG_AHB_DMA_CCLM_Pos (0UL) /*!< AHB_DMA_CCLM (Bit 0) */ + #define SYSBUS_AHB_DMA_CCLM6_REG_AHB_DMA_CCLM_Msk (0xffffUL) /*!< AHB_DMA_CCLM (Bitfield-Mask: 0xffff) */ +/* =================================================== AHB_DMA_CCLM7_REG =================================================== */ + #define SYSBUS_AHB_DMA_CCLM7_REG_AHB_DMA_CCLM_Pos (0UL) /*!< AHB_DMA_CCLM (Bit 0) */ + #define SYSBUS_AHB_DMA_CCLM7_REG_AHB_DMA_CCLM_Msk (0xffffUL) /*!< AHB_DMA_CCLM (Bitfield-Mask: 0xffff) */ +/* ================================================ AHB_DMA_DFLT_MASTER_REG ================================================ */ + #define SYSBUS_AHB_DMA_DFLT_MASTER_REG_AHB_DMA_DFLT_MASTER_Pos (0UL) /*!< AHB_DMA_DFLT_MASTER (Bit 0) */ + #define SYSBUS_AHB_DMA_DFLT_MASTER_REG_AHB_DMA_DFLT_MASTER_Msk (0xfUL) /*!< AHB_DMA_DFLT_MASTER (Bitfield-Mask: 0x0f) */ +/* ==================================================== AHB_DMA_PL1_REG ==================================================== */ + #define SYSBUS_AHB_DMA_PL1_REG_AHB_DMA_PL1_Pos (0UL) /*!< AHB_DMA_PL1 (Bit 0) */ + #define SYSBUS_AHB_DMA_PL1_REG_AHB_DMA_PL1_Msk (0xfUL) /*!< AHB_DMA_PL1 (Bitfield-Mask: 0x0f) */ +/* ==================================================== AHB_DMA_PL2_REG ==================================================== */ + #define SYSBUS_AHB_DMA_PL2_REG_AHB_DMA_PL2_Pos (0UL) /*!< AHB_DMA_PL2 (Bit 0) */ + #define SYSBUS_AHB_DMA_PL2_REG_AHB_DMA_PL2_Msk (0xfUL) /*!< AHB_DMA_PL2 (Bitfield-Mask: 0x0f) */ +/* ==================================================== AHB_DMA_PL3_REG ==================================================== */ + #define SYSBUS_AHB_DMA_PL3_REG_AHB_DMA_PL3_Pos (0UL) /*!< AHB_DMA_PL3 (Bit 0) */ + #define SYSBUS_AHB_DMA_PL3_REG_AHB_DMA_PL3_Msk (0xfUL) /*!< AHB_DMA_PL3 (Bitfield-Mask: 0x0f) */ +/* ==================================================== AHB_DMA_PL4_REG ==================================================== */ + #define SYSBUS_AHB_DMA_PL4_REG_AHB_DMA_PL4_Pos (0UL) /*!< AHB_DMA_PL4 (Bit 0) */ + #define SYSBUS_AHB_DMA_PL4_REG_AHB_DMA_PL4_Msk (0xfUL) /*!< AHB_DMA_PL4 (Bitfield-Mask: 0x0f) */ +/* ==================================================== AHB_DMA_PL5_REG ==================================================== */ + #define SYSBUS_AHB_DMA_PL5_REG_AHB_DMA_PL5_Pos (0UL) /*!< AHB_DMA_PL5 (Bit 0) */ + #define SYSBUS_AHB_DMA_PL5_REG_AHB_DMA_PL5_Msk (0xfUL) /*!< AHB_DMA_PL5 (Bitfield-Mask: 0x0f) */ +/* ==================================================== AHB_DMA_PL6_REG ==================================================== */ + #define SYSBUS_AHB_DMA_PL6_REG_AHB_DMA_PL6_Pos (0UL) /*!< AHB_DMA_PL6 (Bit 0) */ + #define SYSBUS_AHB_DMA_PL6_REG_AHB_DMA_PL6_Msk (0xfUL) /*!< AHB_DMA_PL6 (Bitfield-Mask: 0x0f) */ +/* ==================================================== AHB_DMA_PL7_REG ==================================================== */ + #define SYSBUS_AHB_DMA_PL7_REG_AHB_DMA_PL7_Pos (0UL) /*!< AHB_DMA_PL7 (Bit 0) */ + #define SYSBUS_AHB_DMA_PL7_REG_AHB_DMA_PL7_Msk (0xfUL) /*!< AHB_DMA_PL7 (Bitfield-Mask: 0x0f) */ +/* ==================================================== AHB_DMA_TCL_REG ==================================================== */ + #define SYSBUS_AHB_DMA_TCL_REG_AHB_DMA_TCL_Pos (0UL) /*!< AHB_DMA_TCL (Bit 0) */ + #define SYSBUS_AHB_DMA_TCL_REG_AHB_DMA_TCL_Msk (0xffffUL) /*!< AHB_DMA_TCL (Bitfield-Mask: 0xffff) */ +/* ================================================== AHB_DMA_VERSION_REG ================================================== */ + #define SYSBUS_AHB_DMA_VERSION_REG_AHB_DMA_VERSION_Pos (0UL) /*!< AHB_DMA_VERSION (Bit 0) */ + #define SYSBUS_AHB_DMA_VERSION_REG_AHB_DMA_VERSION_Msk (0xffffffffUL) /*!< AHB_DMA_VERSION (Bitfield-Mask: 0xffffffff) */ +/* =================================================== AHB_DMA_WTEN_REG ==================================================== */ + #define SYSBUS_AHB_DMA_WTEN_REG_AHB_DMA_WTEN_Pos (0UL) /*!< AHB_DMA_WTEN (Bit 0) */ + #define SYSBUS_AHB_DMA_WTEN_REG_AHB_DMA_WTEN_Msk (0x1UL) /*!< AHB_DMA_WTEN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ SYSBUS_ICM ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== AHBSYS_ARB_REG ===================================================== */ + #define SYSBUS_ICM_AHBSYS_ARB_REG_AHBSYS_AHB_CPUS_PRIO_Pos (1UL) /*!< AHBSYS_AHB_CPUS_PRIO (Bit 1) */ + #define SYSBUS_ICM_AHBSYS_ARB_REG_AHBSYS_AHB_CPUS_PRIO_Msk (0x2UL) /*!< AHBSYS_AHB_CPUS_PRIO (Bitfield-Mask: 0x01) */ + #define SYSBUS_ICM_AHBSYS_ARB_REG_AHBSYS_AHB_DMA_PRIO_Pos (0UL) /*!< AHBSYS_AHB_DMA_PRIO (Bit 0) */ + #define SYSBUS_ICM_AHBSYS_ARB_REG_AHBSYS_AHB_DMA_PRIO_Msk (0x1UL) /*!< AHBSYS_AHB_DMA_PRIO (Bitfield-Mask: 0x01) */ +/* ====================================================== OTP_ARB_REG ====================================================== */ + #define SYSBUS_ICM_OTP_ARB_REG_OTP_AHB_DMA_PRIO_Pos (1UL) /*!< OTP_AHB_DMA_PRIO (Bit 1) */ + #define SYSBUS_ICM_OTP_ARB_REG_OTP_AHB_DMA_PRIO_Msk (0x2UL) /*!< OTP_AHB_DMA_PRIO (Bitfield-Mask: 0x01) */ + #define SYSBUS_ICM_OTP_ARB_REG_OTP_AHB_CPUS_PRIO_Pos (0UL) /*!< OTP_AHB_CPUS_PRIO (Bit 0) */ + #define SYSBUS_ICM_OTP_ARB_REG_OTP_AHB_CPUS_PRIO_Msk (0x1UL) /*!< OTP_AHB_CPUS_PRIO (Bitfield-Mask: 0x01) */ +/* ==================================================== QSPIRAM_ARB_REG ==================================================== */ + #define SYSBUS_ICM_QSPIRAM_ARB_REG_QSPIRAM_AHB_CPUS_PRIO_Pos (1UL) /*!< QSPIRAM_AHB_CPUS_PRIO (Bit 1) */ + #define SYSBUS_ICM_QSPIRAM_ARB_REG_QSPIRAM_AHB_CPUS_PRIO_Msk (0x2UL) /*!< QSPIRAM_AHB_CPUS_PRIO (Bitfield-Mask: 0x01) */ + #define SYSBUS_ICM_QSPIRAM_ARB_REG_QSPIRAM_AHB_DMA_PRIO_Pos (0UL) /*!< QSPIRAM_AHB_DMA_PRIO (Bit 0) */ + #define SYSBUS_ICM_QSPIRAM_ARB_REG_QSPIRAM_AHB_DMA_PRIO_Msk (0x1UL) /*!< QSPIRAM_AHB_DMA_PRIO (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ TDES ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== CBC_IV_0_REG ====================================================== */ + #define TDES_CBC_IV_0_REG_CBC_IV_0_Pos (0UL) /*!< CBC_IV_0 (Bit 0) */ + #define TDES_CBC_IV_0_REG_CBC_IV_0_Msk (0xffffffffUL) /*!< CBC_IV_0 (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== CBC_IV_1_REG ====================================================== */ + #define TDES_CBC_IV_1_REG_CBC_IV_1_Pos (0UL) /*!< CBC_IV_1 (Bit 0) */ + #define TDES_CBC_IV_1_REG_CBC_IV_1_Msk (0xffffffffUL) /*!< CBC_IV_1 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TDES_CBC_CTRL_REG =================================================== */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_DONE_Pos (24UL) /*!< TDES_CBC_DONE (Bit 24) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_DONE_Msk (0x1000000UL) /*!< TDES_CBC_DONE (Bitfield-Mask: 0x01) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_FIRST_Pos (16UL) /*!< TDES_CBC_FIRST (Bit 16) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_FIRST_Msk (0x10000UL) /*!< TDES_CBC_FIRST (Bitfield-Mask: 0x01) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_START_Pos (8UL) /*!< TDES_CBC_START (Bit 8) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_START_Msk (0x100UL) /*!< TDES_CBC_START (Bitfield-Mask: 0x01) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_IRQ_EN_Pos (1UL) /*!< TDES_CBC_IRQ_EN (Bit 1) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_IRQ_EN_Msk (0x2UL) /*!< TDES_CBC_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_ED_SEL_Pos (0UL) /*!< TDES_CBC_ED_SEL (Bit 0) */ + #define TDES_TDES_CBC_CTRL_REG_TDES_CBC_ED_SEL_Msk (0x1UL) /*!< TDES_CBC_ED_SEL (Bitfield-Mask: 0x01) */ +/* =================================================== TDES_INPUT_0_REG ==================================================== */ + #define TDES_TDES_INPUT_0_REG_TDES_INPUT_0_Pos (0UL) /*!< TDES_INPUT_0 (Bit 0) */ + #define TDES_TDES_INPUT_0_REG_TDES_INPUT_0_Msk (0xffffffffUL) /*!< TDES_INPUT_0 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TDES_INPUT_1_REG ==================================================== */ + #define TDES_TDES_INPUT_1_REG_TDES_INPUT_1_Pos (0UL) /*!< TDES_INPUT_1 (Bit 0) */ + #define TDES_TDES_INPUT_1_REG_TDES_INPUT_1_Msk (0xffffffffUL) /*!< TDES_INPUT_1 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== TDES_KEY1_0_REG ==================================================== */ + #define TDES_TDES_KEY1_0_REG_TDES_KEY1_0_Pos (0UL) /*!< TDES_KEY1_0 (Bit 0) */ + #define TDES_TDES_KEY1_0_REG_TDES_KEY1_0_Msk (0xffffffffUL) /*!< TDES_KEY1_0 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== TDES_KEY1_1_REG ==================================================== */ + #define TDES_TDES_KEY1_1_REG_TDES_KEY1_1_Pos (0UL) /*!< TDES_KEY1_1 (Bit 0) */ + #define TDES_TDES_KEY1_1_REG_TDES_KEY1_1_Msk (0xffffffffUL) /*!< TDES_KEY1_1 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== TDES_KEY2_0_REG ==================================================== */ + #define TDES_TDES_KEY2_0_REG_TDES_KEY2_0_Pos (0UL) /*!< TDES_KEY2_0 (Bit 0) */ + #define TDES_TDES_KEY2_0_REG_TDES_KEY2_0_Msk (0xffffffffUL) /*!< TDES_KEY2_0 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== TDES_KEY2_1_REG ==================================================== */ + #define TDES_TDES_KEY2_1_REG_TDES_KEY2_1_Pos (0UL) /*!< TDES_KEY2_1 (Bit 0) */ + #define TDES_TDES_KEY2_1_REG_TDES_KEY2_1_Msk (0xffffffffUL) /*!< TDES_KEY2_1 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== TDES_KEY3_0_REG ==================================================== */ + #define TDES_TDES_KEY3_0_REG_TDES_KEY3_0_Pos (0UL) /*!< TDES_KEY3_0 (Bit 0) */ + #define TDES_TDES_KEY3_0_REG_TDES_KEY3_0_Msk (0xffffffffUL) /*!< TDES_KEY3_0 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== TDES_KEY3_1_REG ==================================================== */ + #define TDES_TDES_KEY3_1_REG_TDES_KEY3_1_Pos (0UL) /*!< TDES_KEY3_1 (Bit 0) */ + #define TDES_TDES_KEY3_1_REG_TDES_KEY3_1_Msk (0xffffffffUL) /*!< TDES_KEY3_1 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TDES_OUTPUT_0_REG =================================================== */ + #define TDES_TDES_OUTPUT_0_REG_TDES_OUTPUT_0_Pos (0UL) /*!< TDES_OUTPUT_0 (Bit 0) */ + #define TDES_TDES_OUTPUT_0_REG_TDES_OUTPUT_0_Msk (0xffffffffUL) /*!< TDES_OUTPUT_0 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TDES_OUTPUT_1_REG =================================================== */ + #define TDES_TDES_OUTPUT_1_REG_TDES_OUTPUT_1_Pos (0UL) /*!< TDES_OUTPUT_1 (Bit 0) */ + #define TDES_TDES_OUTPUT_1_REG_TDES_OUTPUT_1_Msk (0xffffffffUL) /*!< TDES_OUTPUT_1 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ TIMER ================ */ +/* =========================================================================================================================== */ + +/* ================================================ TIMER_CAPTURE_GPIO1_REG ================================================ */ + #define TIMER_TIMER_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Pos (0UL) /*!< TIM_CAPTURE_GPIO12 (Bit 0) */ + #define TIMER_TIMER_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO12 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ TIMER_CAPTURE_GPIO2_REG ================================================ */ + #define TIMER_TIMER_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Pos (0UL) /*!< TIM_CAPTURE_GPIO22 (Bit 0) */ + #define TIMER_TIMER_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO22 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ TIMER_CAPTURE_GPIO3_REG ================================================ */ + #define TIMER_TIMER_CAPTURE_GPIO3_REG_TIM_CAPTURE_GPIO32_Pos (0UL) /*!< TIM_CAPTURE_GPIO32 (Bit 0) */ + #define TIMER_TIMER_CAPTURE_GPIO3_REG_TIM_CAPTURE_GPIO32_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO32 (Bitfield-Mask: 0xffffffff) */ +/* ================================================ TIMER_CAPTURE_GPIO4_REG ================================================ */ + #define TIMER_TIMER_CAPTURE_GPIO4_REG_TIM_CAPTURE_GPIO42_Pos (0UL) /*!< TIM_CAPTURE_GPIO42 (Bit 0) */ + #define TIMER_TIMER_CAPTURE_GPIO4_REG_TIM_CAPTURE_GPIO42_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO42 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== TIMER_CLEAR_GPIO_EVENT_REG =============================================== */ + #define TIMER_TIMER_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO4_EVENT_Pos (3UL) /*!< TIM_CLEAR_GPIO4_EVENT (Bit 3) */ + #define TIMER_TIMER_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO4_EVENT_Msk (0x8UL) /*!< TIM_CLEAR_GPIO4_EVENT (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO3_EVENT_Pos (2UL) /*!< TIM_CLEAR_GPIO3_EVENT (Bit 2) */ + #define TIMER_TIMER_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO3_EVENT_Msk (0x4UL) /*!< TIM_CLEAR_GPIO3_EVENT (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO2_EVENT_Pos (1UL) /*!< TIM_CLEAR_GPIO2_EVENT (Bit 1) */ + #define TIMER_TIMER_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO2_EVENT_Msk (0x2UL) /*!< TIM_CLEAR_GPIO2_EVENT (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO1_EVENT_Pos (0UL) /*!< TIM_CLEAR_GPIO1_EVENT (Bit 0) */ + #define TIMER_TIMER_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO1_EVENT_Msk (0x1UL) /*!< TIM_CLEAR_GPIO1_EVENT (Bitfield-Mask: 0x01) */ +/* =============================================== TIMER_CLEAR_IRQ_PULSE_REG =============================================== */ + #define TIMER_TIMER_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Pos (0UL) /*!< TIM_CLEAR_PULSE_IRQ (Bit 0) */ + #define TIMER_TIMER_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_PULSE_IRQ (Bitfield-Mask: 0x01) */ +/* ================================================== TIMER_CLEAR_IRQ_REG ================================================== */ + #define TIMER_TIMER_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Pos (0UL) /*!< TIM_CLEAR_IRQ (Bit 0) */ + #define TIMER_TIMER_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_IRQ (Bitfield-Mask: 0x01) */ +/* ==================================================== TIMER_CTRL_REG ===================================================== */ + #define TIMER_TIMER_CTRL_REG_TIM_SINGLE_EVENT_CAPTURE_Pos (20UL) /*!< TIM_SINGLE_EVENT_CAPTURE (Bit 20) */ + #define TIMER_TIMER_CTRL_REG_TIM_SINGLE_EVENT_CAPTURE_Msk (0x100000UL) /*!< TIM_SINGLE_EVENT_CAPTURE (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Pos (19UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bit 19) */ + #define TIMER_TIMER_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Msk (0x80000UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_EDGE_DET_CNT_EN_Pos (18UL) /*!< TIM_EDGE_DET_CNT_EN (Bit 18) */ + #define TIMER_TIMER_CTRL_REG_TIM_EDGE_DET_CNT_EN_Msk (0x40000UL) /*!< TIM_EDGE_DET_CNT_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_ONESHOT_SWITCH_Pos (17UL) /*!< TIM_ONESHOT_SWITCH (Bit 17) */ + #define TIMER_TIMER_CTRL_REG_TIM_ONESHOT_SWITCH_Msk (0x20000UL) /*!< TIM_ONESHOT_SWITCH (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_ONESHOT_TRIGGER_Pos (15UL) /*!< TIM_ONESHOT_TRIGGER (Bit 15) */ + #define TIMER_TIMER_CTRL_REG_TIM_ONESHOT_TRIGGER_Msk (0x18000UL) /*!< TIM_ONESHOT_TRIGGER (Bitfield-Mask: 0x03) */ + #define TIMER_TIMER_CTRL_REG_TIM_CAP_GPIO4_IRQ_EN_Pos (14UL) /*!< TIM_CAP_GPIO4_IRQ_EN (Bit 14) */ + #define TIMER_TIMER_CTRL_REG_TIM_CAP_GPIO4_IRQ_EN_Msk (0x4000UL) /*!< TIM_CAP_GPIO4_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_CAP_GPIO3_IRQ_EN_Pos (13UL) /*!< TIM_CAP_GPIO3_IRQ_EN (Bit 13) */ + #define TIMER_TIMER_CTRL_REG_TIM_CAP_GPIO3_IRQ_EN_Msk (0x2000UL) /*!< TIM_CAP_GPIO3_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_CAP_GPIO2_IRQ_EN_Pos (12UL) /*!< TIM_CAP_GPIO2_IRQ_EN (Bit 12) */ + #define TIMER_TIMER_CTRL_REG_TIM_CAP_GPIO2_IRQ_EN_Msk (0x1000UL) /*!< TIM_CAP_GPIO2_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_CAP_GPIO1_IRQ_EN_Pos (11UL) /*!< TIM_CAP_GPIO1_IRQ_EN (Bit 11) */ + #define TIMER_TIMER_CTRL_REG_TIM_CAP_GPIO1_IRQ_EN_Msk (0x800UL) /*!< TIM_CAP_GPIO1_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_IN4_EVENT_FALL_EN_Pos (10UL) /*!< TIM_IN4_EVENT_FALL_EN (Bit 10) */ + #define TIMER_TIMER_CTRL_REG_TIM_IN4_EVENT_FALL_EN_Msk (0x400UL) /*!< TIM_IN4_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_IN3_EVENT_FALL_EN_Pos (9UL) /*!< TIM_IN3_EVENT_FALL_EN (Bit 9) */ + #define TIMER_TIMER_CTRL_REG_TIM_IN3_EVENT_FALL_EN_Msk (0x200UL) /*!< TIM_IN3_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_CLK_EN_Pos (8UL) /*!< TIM_CLK_EN (Bit 8) */ + #define TIMER_TIMER_CTRL_REG_TIM_CLK_EN_Msk (0x100UL) /*!< TIM_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_SYS_CLK_EN_Pos (7UL) /*!< TIM_SYS_CLK_EN (Bit 7) */ + #define TIMER_TIMER_CTRL_REG_TIM_SYS_CLK_EN_Msk (0x80UL) /*!< TIM_SYS_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_FREE_RUN_MODE_EN_Pos (6UL) /*!< TIM_FREE_RUN_MODE_EN (Bit 6) */ + #define TIMER_TIMER_CTRL_REG_TIM_FREE_RUN_MODE_EN_Msk (0x40UL) /*!< TIM_FREE_RUN_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_IRQ_EN_Pos (5UL) /*!< TIM_IRQ_EN (Bit 5) */ + #define TIMER_TIMER_CTRL_REG_TIM_IRQ_EN_Msk (0x20UL) /*!< TIM_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Pos (4UL) /*!< TIM_IN2_EVENT_FALL_EN (Bit 4) */ + #define TIMER_TIMER_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Msk (0x10UL) /*!< TIM_IN2_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Pos (3UL) /*!< TIM_IN1_EVENT_FALL_EN (Bit 3) */ + #define TIMER_TIMER_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Msk (0x8UL) /*!< TIM_IN1_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_COUNT_DOWN_EN_Pos (2UL) /*!< TIM_COUNT_DOWN_EN (Bit 2) */ + #define TIMER_TIMER_CTRL_REG_TIM_COUNT_DOWN_EN_Msk (0x4UL) /*!< TIM_COUNT_DOWN_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_ONESHOT_MODE_EN_Pos (1UL) /*!< TIM_ONESHOT_MODE_EN (Bit 1) */ + #define TIMER_TIMER_CTRL_REG_TIM_ONESHOT_MODE_EN_Msk (0x2UL) /*!< TIM_ONESHOT_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_CTRL_REG_TIM_EN_Pos (0UL) /*!< TIM_EN (Bit 0) */ + #define TIMER_TIMER_CTRL_REG_TIM_EN_Msk (0x1UL) /*!< TIM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER_GPIO1_CONF_REG ================================================== */ + #define TIMER_TIMER_GPIO1_CONF_REG_TIM_GPIO1_CONF_Pos (0UL) /*!< TIM_GPIO1_CONF (Bit 0) */ + #define TIMER_TIMER_GPIO1_CONF_REG_TIM_GPIO1_CONF_Msk (0x3fUL) /*!< TIM_GPIO1_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER_GPIO2_CONF_REG ================================================== */ + #define TIMER_TIMER_GPIO2_CONF_REG_TIM_GPIO2_CONF_Pos (0UL) /*!< TIM_GPIO2_CONF (Bit 0) */ + #define TIMER_TIMER_GPIO2_CONF_REG_TIM_GPIO2_CONF_Msk (0x3fUL) /*!< TIM_GPIO2_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER_GPIO3_CONF_REG ================================================== */ + #define TIMER_TIMER_GPIO3_CONF_REG_TIM_GPIO3_CONF_Pos (0UL) /*!< TIM_GPIO3_CONF (Bit 0) */ + #define TIMER_TIMER_GPIO3_CONF_REG_TIM_GPIO3_CONF_Msk (0x3fUL) /*!< TIM_GPIO3_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER_GPIO4_CONF_REG ================================================== */ + #define TIMER_TIMER_GPIO4_CONF_REG_TIM_GPIO4_CONF_Pos (0UL) /*!< TIM_GPIO4_CONF (Bit 0) */ + #define TIMER_TIMER_GPIO4_CONF_REG_TIM_GPIO4_CONF_Msk (0x3fUL) /*!< TIM_GPIO4_CONF (Bitfield-Mask: 0x3f) */ +/* =============================================== TIMER_ONESHOT_TRIGGER_REG =============================================== */ + #define TIMER_TIMER_ONESHOT_TRIGGER_REG_TIM_ONESHOT_TRIGGER_SW_Pos (0UL) /*!< TIM_ONESHOT_TRIGGER_SW (Bit 0) */ + #define TIMER_TIMER_ONESHOT_TRIGGER_REG_TIM_ONESHOT_TRIGGER_SW_Msk (0x1UL) /*!< TIM_ONESHOT_TRIGGER_SW (Bitfield-Mask: 0x01) */ +/* ================================================ TIMER_PRESCALER_VAL_REG ================================================ */ + #define TIMER_TIMER_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Pos (0UL) /*!< TIM_PRESCALER_VAL (Bit 0) */ + #define TIMER_TIMER_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Msk (0x1fUL) /*!< TIM_PRESCALER_VAL (Bitfield-Mask: 0x1f) */ +/* ================================================ TIMER_PRE_SETTINGS_REG ================================================= */ + #define TIMER_TIMER_PRE_SETTINGS_REG_TIM_PRESCALER2_Pos (0UL) /*!< TIM_PRESCALER2 (Bit 0) */ + #define TIMER_TIMER_PRE_SETTINGS_REG_TIM_PRESCALER2_Msk (0x1fUL) /*!< TIM_PRESCALER2 (Bitfield-Mask: 0x1f) */ +/* =============================================== TIMER_PULSE_CNT_CTRL_REG ================================================ */ + #define TIMER_TIMER_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Pos (0UL) /*!< PULSE_CNT_THRESHOLD2 (Bit 0) */ + #define TIMER_TIMER_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Msk (0xffffffffUL) /*!< PULSE_CNT_THRESHOLD2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER_PULSE_GPIO_SEL_REG ================================================ */ + #define TIMER_TIMER_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Pos (0UL) /*!< PULSE_CNT_GPIO_SEL2 (Bit 0) */ + #define TIMER_TIMER_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Msk (0x3fUL) /*!< PULSE_CNT_GPIO_SEL2 (Bitfield-Mask: 0x3f) */ +/* ================================================== TIMER_PWM_CTRL_REG =================================================== */ + #define TIMER_TIMER_PWM_CTRL_REG_TIM_PWM_DC_Pos (16UL) /*!< TIM_PWM_DC (Bit 16) */ + #define TIMER_TIMER_PWM_CTRL_REG_TIM_PWM_DC_Msk (0xffff0000UL) /*!< TIM_PWM_DC (Bitfield-Mask: 0xffff) */ + #define TIMER_TIMER_PWM_CTRL_REG_TIM_PWM_FREQ_Pos (0UL) /*!< TIM_PWM_FREQ (Bit 0) */ + #define TIMER_TIMER_PWM_CTRL_REG_TIM_PWM_FREQ_Msk (0xffffUL) /*!< TIM_PWM_FREQ (Bitfield-Mask: 0xffff) */ +/* ================================================== TIMER_PWM_SYNC_REG =================================================== */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER6_SYNC_Pos (6UL) /*!< TIMER6_SYNC (Bit 6) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER6_SYNC_Msk (0x40UL) /*!< TIMER6_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER4_SYNC_Pos (5UL) /*!< TIMER4_SYNC (Bit 5) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER4_SYNC_Msk (0x20UL) /*!< TIMER4_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER3_SYNC_Pos (4UL) /*!< TIMER3_SYNC (Bit 4) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER3_SYNC_Msk (0x10UL) /*!< TIMER3_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER2_SYNC_Pos (3UL) /*!< TIMER2_SYNC (Bit 3) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER2_SYNC_Msk (0x8UL) /*!< TIMER2_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER_SYNC_Pos (2UL) /*!< TIMER_SYNC (Bit 2) */ + #define TIMER_TIMER_PWM_SYNC_REG_TIMER_SYNC_Msk (0x4UL) /*!< TIMER_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_PWM_SYNC_REG_SYNC_ENABLE_Pos (1UL) /*!< SYNC_ENABLE (Bit 1) */ + #define TIMER_TIMER_PWM_SYNC_REG_SYNC_ENABLE_Msk (0x2UL) /*!< SYNC_ENABLE (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_PWM_SYNC_REG_PWM_START_Pos (0UL) /*!< PWM_START (Bit 0) */ + #define TIMER_TIMER_PWM_SYNC_REG_PWM_START_Msk (0x1UL) /*!< PWM_START (Bitfield-Mask: 0x01) */ +/* ================================================== TIMER_SETTINGS_REG =================================================== */ + #define TIMER_TIMER_SETTINGS_REG_TIM_RELOAD2_Pos (0UL) /*!< TIM_RELOAD2 (Bit 0) */ + #define TIMER_TIMER_SETTINGS_REG_TIM_RELOAD2_Msk (0xffffffffUL) /*!< TIM_RELOAD2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================== TIMER_SHOTWIDTH_REG ================================================== */ + #define TIMER_TIMER_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Pos (0UL) /*!< TIM_SHOTWIDTH2 (Bit 0) */ + #define TIMER_TIMER_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Msk (0xffffffffUL) /*!< TIM_SHOTWIDTH2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TIMER_STATUS_REG ==================================================== */ + #define TIMER_TIMER_STATUS_REG_TIM_CAPTIM_DETECTED_Pos (15UL) /*!< TIM_CAPTIM_DETECTED (Bit 15) */ + #define TIMER_TIMER_STATUS_REG_TIM_CAPTIM_DETECTED_Msk (0x8000UL) /*!< TIM_CAPTIM_DETECTED (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_IRQ_PULSE_STATUS_Pos (14UL) /*!< TIM_IRQ_PULSE_STATUS (Bit 14) */ + #define TIMER_TIMER_STATUS_REG_TIM_IRQ_PULSE_STATUS_Msk (0x4000UL) /*!< TIM_IRQ_PULSE_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_IN4_STATE_Pos (13UL) /*!< TIM_IN4_STATE (Bit 13) */ + #define TIMER_TIMER_STATUS_REG_TIM_IN4_STATE_Msk (0x2000UL) /*!< TIM_IN4_STATE (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_IN3_STATE_Pos (12UL) /*!< TIM_IN3_STATE (Bit 12) */ + #define TIMER_TIMER_STATUS_REG_TIM_IN3_STATE_Msk (0x1000UL) /*!< TIM_IN3_STATE (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Pos (11UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bit 11) */ + #define TIMER_TIMER_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Msk (0x800UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_PWM_BUSY_Pos (10UL) /*!< TIM_PWM_BUSY (Bit 10) */ + #define TIMER_TIMER_STATUS_REG_TIM_PWM_BUSY_Msk (0x400UL) /*!< TIM_PWM_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_TIMER_BUSY_Pos (9UL) /*!< TIM_TIMER_BUSY (Bit 9) */ + #define TIMER_TIMER_STATUS_REG_TIM_TIMER_BUSY_Msk (0x200UL) /*!< TIM_TIMER_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_IRQ_STATUS_Pos (8UL) /*!< TIM_IRQ_STATUS (Bit 8) */ + #define TIMER_TIMER_STATUS_REG_TIM_IRQ_STATUS_Msk (0x100UL) /*!< TIM_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_GPIO4_EVENT_PENDING_Pos (7UL) /*!< TIM_GPIO4_EVENT_PENDING (Bit 7) */ + #define TIMER_TIMER_STATUS_REG_TIM_GPIO4_EVENT_PENDING_Msk (0x80UL) /*!< TIM_GPIO4_EVENT_PENDING (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_GPIO3_EVENT_PENDING_Pos (6UL) /*!< TIM_GPIO3_EVENT_PENDING (Bit 6) */ + #define TIMER_TIMER_STATUS_REG_TIM_GPIO3_EVENT_PENDING_Msk (0x40UL) /*!< TIM_GPIO3_EVENT_PENDING (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_GPIO2_EVENT_PENDING_Pos (5UL) /*!< TIM_GPIO2_EVENT_PENDING (Bit 5) */ + #define TIMER_TIMER_STATUS_REG_TIM_GPIO2_EVENT_PENDING_Msk (0x20UL) /*!< TIM_GPIO2_EVENT_PENDING (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_GPIO1_EVENT_PENDING_Pos (4UL) /*!< TIM_GPIO1_EVENT_PENDING (Bit 4) */ + #define TIMER_TIMER_STATUS_REG_TIM_GPIO1_EVENT_PENDING_Msk (0x10UL) /*!< TIM_GPIO1_EVENT_PENDING (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_ONESHOT_PHASE_Pos (2UL) /*!< TIM_ONESHOT_PHASE (Bit 2) */ + #define TIMER_TIMER_STATUS_REG_TIM_ONESHOT_PHASE_Msk (0xcUL) /*!< TIM_ONESHOT_PHASE (Bitfield-Mask: 0x03) */ + #define TIMER_TIMER_STATUS_REG_TIM_IN2_STATE_Pos (1UL) /*!< TIM_IN2_STATE (Bit 1) */ + #define TIMER_TIMER_STATUS_REG_TIM_IN2_STATE_Msk (0x2UL) /*!< TIM_IN2_STATE (Bitfield-Mask: 0x01) */ + #define TIMER_TIMER_STATUS_REG_TIM_IN1_STATE_Pos (0UL) /*!< TIM_IN1_STATE (Bit 0) */ + #define TIMER_TIMER_STATUS_REG_TIM_IN1_STATE_Msk (0x1UL) /*!< TIM_IN1_STATE (Bitfield-Mask: 0x01) */ +/* ================================================== TIMER_TIMER_VAL_REG ================================================== */ + #define TIMER_TIMER_TIMER_VAL_REG_TIM_TIMER_VALUE_Pos (0UL) /*!< TIM_TIMER_VALUE (Bit 0) */ + #define TIMER_TIMER_TIMER_VAL_REG_TIM_TIMER_VALUE_Msk (0xffffffffUL) /*!< TIM_TIMER_VALUE (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ TIMER2 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER2_CAPTURE_GPIO1_REG ================================================ */ + #define TIMER2_TIMER2_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Pos (0UL) /*!< TIM_CAPTURE_GPIO12 (Bit 0) */ + #define TIMER2_TIMER2_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO12 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER2_CAPTURE_GPIO2_REG ================================================ */ + #define TIMER2_TIMER2_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Pos (0UL) /*!< TIM_CAPTURE_GPIO22 (Bit 0) */ + #define TIMER2_TIMER2_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO22 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== TIMER2_CLEAR_IRQ_PULSE_REG =============================================== */ + #define TIMER2_TIMER2_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Pos (0UL) /*!< TIM_CLEAR_PULSE_IRQ (Bit 0) */ + #define TIMER2_TIMER2_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_PULSE_IRQ (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER2_CLEAR_IRQ_REG ================================================== */ + #define TIMER2_TIMER2_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Pos (0UL) /*!< TIM_CLEAR_IRQ (Bit 0) */ + #define TIMER2_TIMER2_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_IRQ (Bitfield-Mask: 0x01) */ +/* ==================================================== TIMER2_CTRL_REG ==================================================== */ + #define TIMER2_TIMER2_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Pos (19UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bit 19) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Msk (0x80000UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_EDGE_DET_CNT_EN_Pos (18UL) /*!< TIM_EDGE_DET_CNT_EN (Bit 18) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_EDGE_DET_CNT_EN_Msk (0x40000UL) /*!< TIM_EDGE_DET_CNT_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_CLK_EN_Pos (8UL) /*!< TIM_CLK_EN (Bit 8) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_CLK_EN_Msk (0x100UL) /*!< TIM_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_SYS_CLK_EN_Pos (7UL) /*!< TIM_SYS_CLK_EN (Bit 7) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_SYS_CLK_EN_Msk (0x80UL) /*!< TIM_SYS_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_FREE_RUN_MODE_EN_Pos (6UL) /*!< TIM_FREE_RUN_MODE_EN (Bit 6) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_FREE_RUN_MODE_EN_Msk (0x40UL) /*!< TIM_FREE_RUN_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_IRQ_EN_Pos (5UL) /*!< TIM_IRQ_EN (Bit 5) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_IRQ_EN_Msk (0x20UL) /*!< TIM_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Pos (4UL) /*!< TIM_IN2_EVENT_FALL_EN (Bit 4) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Msk (0x10UL) /*!< TIM_IN2_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Pos (3UL) /*!< TIM_IN1_EVENT_FALL_EN (Bit 3) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Msk (0x8UL) /*!< TIM_IN1_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_COUNT_DOWN_EN_Pos (2UL) /*!< TIM_COUNT_DOWN_EN (Bit 2) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_COUNT_DOWN_EN_Msk (0x4UL) /*!< TIM_COUNT_DOWN_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_ONESHOT_MODE_EN_Pos (1UL) /*!< TIM_ONESHOT_MODE_EN (Bit 1) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_ONESHOT_MODE_EN_Msk (0x2UL) /*!< TIM_ONESHOT_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_EN_Pos (0UL) /*!< TIM_EN (Bit 0) */ + #define TIMER2_TIMER2_CTRL_REG_TIM_EN_Msk (0x1UL) /*!< TIM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER2_GPIO1_CONF_REG ================================================= */ + #define TIMER2_TIMER2_GPIO1_CONF_REG_TIM_GPIO1_CONF_Pos (0UL) /*!< TIM_GPIO1_CONF (Bit 0) */ + #define TIMER2_TIMER2_GPIO1_CONF_REG_TIM_GPIO1_CONF_Msk (0x3fUL) /*!< TIM_GPIO1_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER2_GPIO2_CONF_REG ================================================= */ + #define TIMER2_TIMER2_GPIO2_CONF_REG_TIM_GPIO2_CONF_Pos (0UL) /*!< TIM_GPIO2_CONF (Bit 0) */ + #define TIMER2_TIMER2_GPIO2_CONF_REG_TIM_GPIO2_CONF_Msk (0x3fUL) /*!< TIM_GPIO2_CONF (Bitfield-Mask: 0x3f) */ +/* =============================================== TIMER2_PRESCALER_VAL_REG ================================================ */ + #define TIMER2_TIMER2_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Pos (0UL) /*!< TIM_PRESCALER_VAL (Bit 0) */ + #define TIMER2_TIMER2_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Msk (0x1fUL) /*!< TIM_PRESCALER_VAL (Bitfield-Mask: 0x1f) */ +/* ================================================ TIMER2_PRE_SETTINGS_REG ================================================ */ + #define TIMER2_TIMER2_PRE_SETTINGS_REG_TIM_PRESCALER2_Pos (0UL) /*!< TIM_PRESCALER2 (Bit 0) */ + #define TIMER2_TIMER2_PRE_SETTINGS_REG_TIM_PRESCALER2_Msk (0x1fUL) /*!< TIM_PRESCALER2 (Bitfield-Mask: 0x1f) */ +/* =============================================== TIMER2_PULSE_CNT_CTRL_REG =============================================== */ + #define TIMER2_TIMER2_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Pos (0UL) /*!< PULSE_CNT_THRESHOLD2 (Bit 0) */ + #define TIMER2_TIMER2_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Msk (0xffffffffUL) /*!< PULSE_CNT_THRESHOLD2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER2_PULSE_GPIO_SEL_REG =============================================== */ + #define TIMER2_TIMER2_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Pos (0UL) /*!< PULSE_CNT_GPIO_SEL2 (Bit 0) */ + #define TIMER2_TIMER2_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Msk (0x3fUL) /*!< PULSE_CNT_GPIO_SEL2 (Bitfield-Mask: 0x3f) */ +/* ================================================== TIMER2_PWM_CTRL_REG ================================================== */ + #define TIMER2_TIMER2_PWM_CTRL_REG_TIM_PWM_DC_Pos (16UL) /*!< TIM_PWM_DC (Bit 16) */ + #define TIMER2_TIMER2_PWM_CTRL_REG_TIM_PWM_DC_Msk (0xffff0000UL) /*!< TIM_PWM_DC (Bitfield-Mask: 0xffff) */ + #define TIMER2_TIMER2_PWM_CTRL_REG_TIM_PWM_FREQ_Pos (0UL) /*!< TIM_PWM_FREQ (Bit 0) */ + #define TIMER2_TIMER2_PWM_CTRL_REG_TIM_PWM_FREQ_Msk (0xffffUL) /*!< TIM_PWM_FREQ (Bitfield-Mask: 0xffff) */ +/* ================================================== TIMER2_SETTINGS_REG ================================================== */ + #define TIMER2_TIMER2_SETTINGS_REG_TIM_RELOAD2_Pos (0UL) /*!< TIM_RELOAD2 (Bit 0) */ + #define TIMER2_TIMER2_SETTINGS_REG_TIM_RELOAD2_Msk (0xffffffffUL) /*!< TIM_RELOAD2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= TIMER2_SHOTWIDTH_REG ================================================== */ + #define TIMER2_TIMER2_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Pos (0UL) /*!< TIM_SHOTWIDTH2 (Bit 0) */ + #define TIMER2_TIMER2_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Msk (0xffffffffUL) /*!< TIM_SHOTWIDTH2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TIMER2_STATUS_REG =================================================== */ + #define TIMER2_TIMER2_STATUS_REG_TIM_IRQ_PULSE_STATUS_Pos (14UL) /*!< TIM_IRQ_PULSE_STATUS (Bit 14) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_IRQ_PULSE_STATUS_Msk (0x4000UL) /*!< TIM_IRQ_PULSE_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Pos (11UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bit 11) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Msk (0x800UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_PWM_BUSY_Pos (10UL) /*!< TIM_PWM_BUSY (Bit 10) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_PWM_BUSY_Msk (0x400UL) /*!< TIM_PWM_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_TIMER_BUSY_Pos (9UL) /*!< TIM_TIMER_BUSY (Bit 9) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_TIMER_BUSY_Msk (0x200UL) /*!< TIM_TIMER_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_IRQ_STATUS_Pos (8UL) /*!< TIM_IRQ_STATUS (Bit 8) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_IRQ_STATUS_Msk (0x100UL) /*!< TIM_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_ONESHOT_PHASE_Pos (2UL) /*!< TIM_ONESHOT_PHASE (Bit 2) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_ONESHOT_PHASE_Msk (0xcUL) /*!< TIM_ONESHOT_PHASE (Bitfield-Mask: 0x03) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_IN2_STATE_Pos (1UL) /*!< TIM_IN2_STATE (Bit 1) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_IN2_STATE_Msk (0x2UL) /*!< TIM_IN2_STATE (Bitfield-Mask: 0x01) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_IN1_STATE_Pos (0UL) /*!< TIM_IN1_STATE (Bit 0) */ + #define TIMER2_TIMER2_STATUS_REG_TIM_IN1_STATE_Msk (0x1UL) /*!< TIM_IN1_STATE (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER2_TIMER_VAL_REG ================================================== */ + #define TIMER2_TIMER2_TIMER_VAL_REG_TIM_TIMER_VALUE2_Pos (0UL) /*!< TIM_TIMER_VALUE2 (Bit 0) */ + #define TIMER2_TIMER2_TIMER_VAL_REG_TIM_TIMER_VALUE2_Msk (0xffffffffUL) /*!< TIM_TIMER_VALUE2 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ TIMER3 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER3_CAPTURE_GPIO1_REG ================================================ */ + #define TIMER3_TIMER3_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Pos (0UL) /*!< TIM_CAPTURE_GPIO12 (Bit 0) */ + #define TIMER3_TIMER3_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO12 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER3_CAPTURE_GPIO2_REG ================================================ */ + #define TIMER3_TIMER3_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Pos (0UL) /*!< TIM_CAPTURE_GPIO22 (Bit 0) */ + #define TIMER3_TIMER3_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO22 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== TIMER3_CLEAR_IRQ_PULSE_REG =============================================== */ + #define TIMER3_TIMER3_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Pos (0UL) /*!< TIM_CLEAR_PULSE_IRQ (Bit 0) */ + #define TIMER3_TIMER3_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_PULSE_IRQ (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER3_CLEAR_IRQ_REG ================================================== */ + #define TIMER3_TIMER3_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Pos (0UL) /*!< TIM_CLEAR_IRQ (Bit 0) */ + #define TIMER3_TIMER3_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_IRQ (Bitfield-Mask: 0x01) */ +/* ==================================================== TIMER3_CTRL_REG ==================================================== */ + #define TIMER3_TIMER3_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Pos (19UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bit 19) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Msk (0x80000UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_EDGE_DET_CNT_EN_Pos (18UL) /*!< TIM_EDGE_DET_CNT_EN (Bit 18) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_EDGE_DET_CNT_EN_Msk (0x40000UL) /*!< TIM_EDGE_DET_CNT_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_CLK_EN_Pos (8UL) /*!< TIM_CLK_EN (Bit 8) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_CLK_EN_Msk (0x100UL) /*!< TIM_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_SYS_CLK_EN_Pos (7UL) /*!< TIM_SYS_CLK_EN (Bit 7) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_SYS_CLK_EN_Msk (0x80UL) /*!< TIM_SYS_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_FREE_RUN_MODE_EN_Pos (6UL) /*!< TIM_FREE_RUN_MODE_EN (Bit 6) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_FREE_RUN_MODE_EN_Msk (0x40UL) /*!< TIM_FREE_RUN_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_IRQ_EN_Pos (5UL) /*!< TIM_IRQ_EN (Bit 5) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_IRQ_EN_Msk (0x20UL) /*!< TIM_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Pos (4UL) /*!< TIM_IN2_EVENT_FALL_EN (Bit 4) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Msk (0x10UL) /*!< TIM_IN2_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Pos (3UL) /*!< TIM_IN1_EVENT_FALL_EN (Bit 3) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Msk (0x8UL) /*!< TIM_IN1_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_COUNT_DOWN_EN_Pos (2UL) /*!< TIM_COUNT_DOWN_EN (Bit 2) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_COUNT_DOWN_EN_Msk (0x4UL) /*!< TIM_COUNT_DOWN_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_ONESHOT_MODE_EN_Pos (1UL) /*!< TIM_ONESHOT_MODE_EN (Bit 1) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_ONESHOT_MODE_EN_Msk (0x2UL) /*!< TIM_ONESHOT_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_EN_Pos (0UL) /*!< TIM_EN (Bit 0) */ + #define TIMER3_TIMER3_CTRL_REG_TIM_EN_Msk (0x1UL) /*!< TIM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER3_GPIO1_CONF_REG ================================================= */ + #define TIMER3_TIMER3_GPIO1_CONF_REG_TIM_GPIO1_CONF_Pos (0UL) /*!< TIM_GPIO1_CONF (Bit 0) */ + #define TIMER3_TIMER3_GPIO1_CONF_REG_TIM_GPIO1_CONF_Msk (0x3fUL) /*!< TIM_GPIO1_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER3_GPIO2_CONF_REG ================================================= */ + #define TIMER3_TIMER3_GPIO2_CONF_REG_TIM_GPIO2_CONF_Pos (0UL) /*!< TIM_GPIO2_CONF (Bit 0) */ + #define TIMER3_TIMER3_GPIO2_CONF_REG_TIM_GPIO2_CONF_Msk (0x3fUL) /*!< TIM_GPIO2_CONF (Bitfield-Mask: 0x3f) */ +/* =============================================== TIMER3_PRESCALER_VAL_REG ================================================ */ + #define TIMER3_TIMER3_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Pos (0UL) /*!< TIM_PRESCALER_VAL (Bit 0) */ + #define TIMER3_TIMER3_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Msk (0x1fUL) /*!< TIM_PRESCALER_VAL (Bitfield-Mask: 0x1f) */ +/* ================================================ TIMER3_PRE_SETTINGS_REG ================================================ */ + #define TIMER3_TIMER3_PRE_SETTINGS_REG_TIM_PRESCALER2_Pos (0UL) /*!< TIM_PRESCALER2 (Bit 0) */ + #define TIMER3_TIMER3_PRE_SETTINGS_REG_TIM_PRESCALER2_Msk (0x1fUL) /*!< TIM_PRESCALER2 (Bitfield-Mask: 0x1f) */ +/* =============================================== TIMER3_PULSE_CNT_CTRL_REG =============================================== */ + #define TIMER3_TIMER3_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Pos (0UL) /*!< PULSE_CNT_THRESHOLD2 (Bit 0) */ + #define TIMER3_TIMER3_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Msk (0xffffffffUL) /*!< PULSE_CNT_THRESHOLD2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER3_PULSE_GPIO_SEL_REG =============================================== */ + #define TIMER3_TIMER3_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Pos (0UL) /*!< PULSE_CNT_GPIO_SEL2 (Bit 0) */ + #define TIMER3_TIMER3_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Msk (0x3fUL) /*!< PULSE_CNT_GPIO_SEL2 (Bitfield-Mask: 0x3f) */ +/* ================================================== TIMER3_PWM_CTRL_REG ================================================== */ + #define TIMER3_TIMER3_PWM_CTRL_REG_TIM_PWM_DC_Pos (16UL) /*!< TIM_PWM_DC (Bit 16) */ + #define TIMER3_TIMER3_PWM_CTRL_REG_TIM_PWM_DC_Msk (0xffff0000UL) /*!< TIM_PWM_DC (Bitfield-Mask: 0xffff) */ + #define TIMER3_TIMER3_PWM_CTRL_REG_TIM_PWM_FREQ_Pos (0UL) /*!< TIM_PWM_FREQ (Bit 0) */ + #define TIMER3_TIMER3_PWM_CTRL_REG_TIM_PWM_FREQ_Msk (0xffffUL) /*!< TIM_PWM_FREQ (Bitfield-Mask: 0xffff) */ +/* ================================================== TIMER3_SETTINGS_REG ================================================== */ + #define TIMER3_TIMER3_SETTINGS_REG_TIM_RELOAD2_Pos (0UL) /*!< TIM_RELOAD2 (Bit 0) */ + #define TIMER3_TIMER3_SETTINGS_REG_TIM_RELOAD2_Msk (0xffffffffUL) /*!< TIM_RELOAD2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= TIMER3_SHOTWIDTH_REG ================================================== */ + #define TIMER3_TIMER3_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Pos (0UL) /*!< TIM_SHOTWIDTH2 (Bit 0) */ + #define TIMER3_TIMER3_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Msk (0xffffffffUL) /*!< TIM_SHOTWIDTH2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TIMER3_STATUS_REG =================================================== */ + #define TIMER3_TIMER3_STATUS_REG_TIM_IRQ_PULSE_STATUS_Pos (14UL) /*!< TIM_IRQ_PULSE_STATUS (Bit 14) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_IRQ_PULSE_STATUS_Msk (0x4000UL) /*!< TIM_IRQ_PULSE_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Pos (11UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bit 11) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Msk (0x800UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_PWM_BUSY_Pos (10UL) /*!< TIM_PWM_BUSY (Bit 10) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_PWM_BUSY_Msk (0x400UL) /*!< TIM_PWM_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_TIMER_BUSY_Pos (9UL) /*!< TIM_TIMER_BUSY (Bit 9) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_TIMER_BUSY_Msk (0x200UL) /*!< TIM_TIMER_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_IRQ_STATUS_Pos (8UL) /*!< TIM_IRQ_STATUS (Bit 8) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_IRQ_STATUS_Msk (0x100UL) /*!< TIM_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_ONESHOT_PHASE_Pos (2UL) /*!< TIM_ONESHOT_PHASE (Bit 2) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_ONESHOT_PHASE_Msk (0xcUL) /*!< TIM_ONESHOT_PHASE (Bitfield-Mask: 0x03) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_IN2_STATE_Pos (1UL) /*!< TIM_IN2_STATE (Bit 1) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_IN2_STATE_Msk (0x2UL) /*!< TIM_IN2_STATE (Bitfield-Mask: 0x01) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_IN1_STATE_Pos (0UL) /*!< TIM_IN1_STATE (Bit 0) */ + #define TIMER3_TIMER3_STATUS_REG_TIM_IN1_STATE_Msk (0x1UL) /*!< TIM_IN1_STATE (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER3_TIMER_VAL_REG ================================================== */ + #define TIMER3_TIMER3_TIMER_VAL_REG_TIM_TIMER_VALUE2_Pos (0UL) /*!< TIM_TIMER_VALUE2 (Bit 0) */ + #define TIMER3_TIMER3_TIMER_VAL_REG_TIM_TIMER_VALUE2_Msk (0xffffffffUL) /*!< TIM_TIMER_VALUE2 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ TIMER4 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER4_CAPTURE_GPIO1_REG ================================================ */ + #define TIMER4_TIMER4_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Pos (0UL) /*!< TIM_CAPTURE_GPIO12 (Bit 0) */ + #define TIMER4_TIMER4_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO12 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER4_CAPTURE_GPIO2_REG ================================================ */ + #define TIMER4_TIMER4_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Pos (0UL) /*!< TIM_CAPTURE_GPIO22 (Bit 0) */ + #define TIMER4_TIMER4_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO22 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== TIMER4_CLEAR_IRQ_PULSE_REG =============================================== */ + #define TIMER4_TIMER4_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Pos (0UL) /*!< TIM_CLEAR_PULSE_IRQ (Bit 0) */ + #define TIMER4_TIMER4_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_PULSE_IRQ (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER4_CLEAR_IRQ_REG ================================================== */ + #define TIMER4_TIMER4_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Pos (0UL) /*!< TIM_CLEAR_IRQ (Bit 0) */ + #define TIMER4_TIMER4_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_IRQ (Bitfield-Mask: 0x01) */ +/* ==================================================== TIMER4_CTRL_REG ==================================================== */ + #define TIMER4_TIMER4_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Pos (19UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bit 19) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Msk (0x80000UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_EDGE_DET_CNT_EN_Pos (18UL) /*!< TIM_EDGE_DET_CNT_EN (Bit 18) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_EDGE_DET_CNT_EN_Msk (0x40000UL) /*!< TIM_EDGE_DET_CNT_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_CLK_EN_Pos (8UL) /*!< TIM_CLK_EN (Bit 8) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_CLK_EN_Msk (0x100UL) /*!< TIM_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_SYS_CLK_EN_Pos (7UL) /*!< TIM_SYS_CLK_EN (Bit 7) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_SYS_CLK_EN_Msk (0x80UL) /*!< TIM_SYS_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_FREE_RUN_MODE_EN_Pos (6UL) /*!< TIM_FREE_RUN_MODE_EN (Bit 6) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_FREE_RUN_MODE_EN_Msk (0x40UL) /*!< TIM_FREE_RUN_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_IRQ_EN_Pos (5UL) /*!< TIM_IRQ_EN (Bit 5) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_IRQ_EN_Msk (0x20UL) /*!< TIM_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Pos (4UL) /*!< TIM_IN2_EVENT_FALL_EN (Bit 4) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Msk (0x10UL) /*!< TIM_IN2_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Pos (3UL) /*!< TIM_IN1_EVENT_FALL_EN (Bit 3) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Msk (0x8UL) /*!< TIM_IN1_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_COUNT_DOWN_EN_Pos (2UL) /*!< TIM_COUNT_DOWN_EN (Bit 2) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_COUNT_DOWN_EN_Msk (0x4UL) /*!< TIM_COUNT_DOWN_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_ONESHOT_MODE_EN_Pos (1UL) /*!< TIM_ONESHOT_MODE_EN (Bit 1) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_ONESHOT_MODE_EN_Msk (0x2UL) /*!< TIM_ONESHOT_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_EN_Pos (0UL) /*!< TIM_EN (Bit 0) */ + #define TIMER4_TIMER4_CTRL_REG_TIM_EN_Msk (0x1UL) /*!< TIM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER4_GPIO1_CONF_REG ================================================= */ + #define TIMER4_TIMER4_GPIO1_CONF_REG_TIM_GPIO1_CONF_Pos (0UL) /*!< TIM_GPIO1_CONF (Bit 0) */ + #define TIMER4_TIMER4_GPIO1_CONF_REG_TIM_GPIO1_CONF_Msk (0x3fUL) /*!< TIM_GPIO1_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER4_GPIO2_CONF_REG ================================================= */ + #define TIMER4_TIMER4_GPIO2_CONF_REG_TIM_GPIO2_CONF_Pos (0UL) /*!< TIM_GPIO2_CONF (Bit 0) */ + #define TIMER4_TIMER4_GPIO2_CONF_REG_TIM_GPIO2_CONF_Msk (0x3fUL) /*!< TIM_GPIO2_CONF (Bitfield-Mask: 0x3f) */ +/* =============================================== TIMER4_PRESCALER_VAL_REG ================================================ */ + #define TIMER4_TIMER4_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Pos (0UL) /*!< TIM_PRESCALER_VAL (Bit 0) */ + #define TIMER4_TIMER4_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Msk (0x1fUL) /*!< TIM_PRESCALER_VAL (Bitfield-Mask: 0x1f) */ +/* ================================================ TIMER4_PRE_SETTINGS_REG ================================================ */ + #define TIMER4_TIMER4_PRE_SETTINGS_REG_TIM_PRESCALER2_Pos (0UL) /*!< TIM_PRESCALER2 (Bit 0) */ + #define TIMER4_TIMER4_PRE_SETTINGS_REG_TIM_PRESCALER2_Msk (0x1fUL) /*!< TIM_PRESCALER2 (Bitfield-Mask: 0x1f) */ +/* =============================================== TIMER4_PULSE_CNT_CTRL_REG =============================================== */ + #define TIMER4_TIMER4_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Pos (0UL) /*!< PULSE_CNT_THRESHOLD2 (Bit 0) */ + #define TIMER4_TIMER4_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Msk (0xffffffffUL) /*!< PULSE_CNT_THRESHOLD2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER4_PULSE_GPIO_SEL_REG =============================================== */ + #define TIMER4_TIMER4_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Pos (0UL) /*!< PULSE_CNT_GPIO_SEL2 (Bit 0) */ + #define TIMER4_TIMER4_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Msk (0x3fUL) /*!< PULSE_CNT_GPIO_SEL2 (Bitfield-Mask: 0x3f) */ +/* ================================================== TIMER4_PWM_CTRL_REG ================================================== */ + #define TIMER4_TIMER4_PWM_CTRL_REG_TIM_PWM_DC_Pos (16UL) /*!< TIM_PWM_DC (Bit 16) */ + #define TIMER4_TIMER4_PWM_CTRL_REG_TIM_PWM_DC_Msk (0xffff0000UL) /*!< TIM_PWM_DC (Bitfield-Mask: 0xffff) */ + #define TIMER4_TIMER4_PWM_CTRL_REG_TIM_PWM_FREQ_Pos (0UL) /*!< TIM_PWM_FREQ (Bit 0) */ + #define TIMER4_TIMER4_PWM_CTRL_REG_TIM_PWM_FREQ_Msk (0xffffUL) /*!< TIM_PWM_FREQ (Bitfield-Mask: 0xffff) */ +/* ================================================== TIMER4_SETTINGS_REG ================================================== */ + #define TIMER4_TIMER4_SETTINGS_REG_TIM_RELOAD2_Pos (0UL) /*!< TIM_RELOAD2 (Bit 0) */ + #define TIMER4_TIMER4_SETTINGS_REG_TIM_RELOAD2_Msk (0xffffffffUL) /*!< TIM_RELOAD2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= TIMER4_SHOTWIDTH_REG ================================================== */ + #define TIMER4_TIMER4_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Pos (0UL) /*!< TIM_SHOTWIDTH2 (Bit 0) */ + #define TIMER4_TIMER4_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Msk (0xffffffffUL) /*!< TIM_SHOTWIDTH2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TIMER4_STATUS_REG =================================================== */ + #define TIMER4_TIMER4_STATUS_REG_TIM_IRQ_PULSE_STATUS_Pos (14UL) /*!< TIM_IRQ_PULSE_STATUS (Bit 14) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_IRQ_PULSE_STATUS_Msk (0x4000UL) /*!< TIM_IRQ_PULSE_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Pos (11UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bit 11) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Msk (0x800UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_PWM_BUSY_Pos (10UL) /*!< TIM_PWM_BUSY (Bit 10) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_PWM_BUSY_Msk (0x400UL) /*!< TIM_PWM_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_TIMER_BUSY_Pos (9UL) /*!< TIM_TIMER_BUSY (Bit 9) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_TIMER_BUSY_Msk (0x200UL) /*!< TIM_TIMER_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_IRQ_STATUS_Pos (8UL) /*!< TIM_IRQ_STATUS (Bit 8) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_IRQ_STATUS_Msk (0x100UL) /*!< TIM_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_ONESHOT_PHASE_Pos (2UL) /*!< TIM_ONESHOT_PHASE (Bit 2) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_ONESHOT_PHASE_Msk (0xcUL) /*!< TIM_ONESHOT_PHASE (Bitfield-Mask: 0x03) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_IN2_STATE_Pos (1UL) /*!< TIM_IN2_STATE (Bit 1) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_IN2_STATE_Msk (0x2UL) /*!< TIM_IN2_STATE (Bitfield-Mask: 0x01) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_IN1_STATE_Pos (0UL) /*!< TIM_IN1_STATE (Bit 0) */ + #define TIMER4_TIMER4_STATUS_REG_TIM_IN1_STATE_Msk (0x1UL) /*!< TIM_IN1_STATE (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER4_TIMER_VAL_REG ================================================== */ + #define TIMER4_TIMER4_TIMER_VAL_REG_TIM_TIMER_VALUE2_Pos (0UL) /*!< TIM_TIMER_VALUE2 (Bit 0) */ + #define TIMER4_TIMER4_TIMER_VAL_REG_TIM_TIMER_VALUE2_Msk (0xffffffffUL) /*!< TIM_TIMER_VALUE2 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ TIMER5 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER5_CAPTURE_GPIO1_REG ================================================ */ + #define TIMER5_TIMER5_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Pos (0UL) /*!< TIM_CAPTURE_GPIO12 (Bit 0) */ + #define TIMER5_TIMER5_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO12 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER5_CAPTURE_GPIO2_REG ================================================ */ + #define TIMER5_TIMER5_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Pos (0UL) /*!< TIM_CAPTURE_GPIO22 (Bit 0) */ + #define TIMER5_TIMER5_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO22 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER5_CAPTURE_GPIO3_REG ================================================ */ + #define TIMER5_TIMER5_CAPTURE_GPIO3_REG_TIM_CAPTURE_GPIO32_Pos (0UL) /*!< TIM_CAPTURE_GPIO32 (Bit 0) */ + #define TIMER5_TIMER5_CAPTURE_GPIO3_REG_TIM_CAPTURE_GPIO32_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO32 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER5_CAPTURE_GPIO4_REG ================================================ */ + #define TIMER5_TIMER5_CAPTURE_GPIO4_REG_TIM_CAPTURE_GPIO42_Pos (0UL) /*!< TIM_CAPTURE_GPIO42 (Bit 0) */ + #define TIMER5_TIMER5_CAPTURE_GPIO4_REG_TIM_CAPTURE_GPIO42_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO42 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== TIMER5_CLEAR_GPIO_EVENT_REG ============================================== */ + #define TIMER5_TIMER5_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO4_EVENT_Pos (3UL) /*!< TIM_CLEAR_GPIO4_EVENT (Bit 3) */ + #define TIMER5_TIMER5_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO4_EVENT_Msk (0x8UL) /*!< TIM_CLEAR_GPIO4_EVENT (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO3_EVENT_Pos (2UL) /*!< TIM_CLEAR_GPIO3_EVENT (Bit 2) */ + #define TIMER5_TIMER5_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO3_EVENT_Msk (0x4UL) /*!< TIM_CLEAR_GPIO3_EVENT (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO2_EVENT_Pos (1UL) /*!< TIM_CLEAR_GPIO2_EVENT (Bit 1) */ + #define TIMER5_TIMER5_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO2_EVENT_Msk (0x2UL) /*!< TIM_CLEAR_GPIO2_EVENT (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO1_EVENT_Pos (0UL) /*!< TIM_CLEAR_GPIO1_EVENT (Bit 0) */ + #define TIMER5_TIMER5_CLEAR_GPIO_EVENT_REG_TIM_CLEAR_GPIO1_EVENT_Msk (0x1UL) /*!< TIM_CLEAR_GPIO1_EVENT (Bitfield-Mask: 0x01) */ +/* ============================================== TIMER5_CLEAR_IRQ_PULSE_REG =============================================== */ + #define TIMER5_TIMER5_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Pos (0UL) /*!< TIM_CLEAR_PULSE_IRQ (Bit 0) */ + #define TIMER5_TIMER5_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_PULSE_IRQ (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER5_CLEAR_IRQ_REG ================================================== */ + #define TIMER5_TIMER5_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Pos (0UL) /*!< TIM_CLEAR_IRQ (Bit 0) */ + #define TIMER5_TIMER5_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_IRQ (Bitfield-Mask: 0x01) */ +/* ==================================================== TIMER5_CTRL_REG ==================================================== */ + #define TIMER5_TIMER5_CTRL_REG_TIM_SINGLE_EVENT_CAPTURE_Pos (20UL) /*!< TIM_SINGLE_EVENT_CAPTURE (Bit 20) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_SINGLE_EVENT_CAPTURE_Msk (0x100000UL) /*!< TIM_SINGLE_EVENT_CAPTURE (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Pos (19UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bit 19) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Msk (0x80000UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_EDGE_DET_CNT_EN_Pos (18UL) /*!< TIM_EDGE_DET_CNT_EN (Bit 18) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_EDGE_DET_CNT_EN_Msk (0x40000UL) /*!< TIM_EDGE_DET_CNT_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_ONESHOT_SWITCH_Pos (17UL) /*!< TIM_ONESHOT_SWITCH (Bit 17) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_ONESHOT_SWITCH_Msk (0x20000UL) /*!< TIM_ONESHOT_SWITCH (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_ONESHOT_TRIGGER_Pos (15UL) /*!< TIM_ONESHOT_TRIGGER (Bit 15) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_ONESHOT_TRIGGER_Msk (0x18000UL) /*!< TIM_ONESHOT_TRIGGER (Bitfield-Mask: 0x03) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CAP_GPIO4_IRQ_EN_Pos (14UL) /*!< TIM_CAP_GPIO4_IRQ_EN (Bit 14) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CAP_GPIO4_IRQ_EN_Msk (0x4000UL) /*!< TIM_CAP_GPIO4_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CAP_GPIO3_IRQ_EN_Pos (13UL) /*!< TIM_CAP_GPIO3_IRQ_EN (Bit 13) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CAP_GPIO3_IRQ_EN_Msk (0x2000UL) /*!< TIM_CAP_GPIO3_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CAP_GPIO2_IRQ_EN_Pos (12UL) /*!< TIM_CAP_GPIO2_IRQ_EN (Bit 12) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CAP_GPIO2_IRQ_EN_Msk (0x1000UL) /*!< TIM_CAP_GPIO2_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CAP_GPIO1_IRQ_EN_Pos (11UL) /*!< TIM_CAP_GPIO1_IRQ_EN (Bit 11) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CAP_GPIO1_IRQ_EN_Msk (0x800UL) /*!< TIM_CAP_GPIO1_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IN4_EVENT_FALL_EN_Pos (10UL) /*!< TIM_IN4_EVENT_FALL_EN (Bit 10) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IN4_EVENT_FALL_EN_Msk (0x400UL) /*!< TIM_IN4_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IN3_EVENT_FALL_EN_Pos (9UL) /*!< TIM_IN3_EVENT_FALL_EN (Bit 9) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IN3_EVENT_FALL_EN_Msk (0x200UL) /*!< TIM_IN3_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CLK_EN_Pos (8UL) /*!< TIM_CLK_EN (Bit 8) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_CLK_EN_Msk (0x100UL) /*!< TIM_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_SYS_CLK_EN_Pos (7UL) /*!< TIM_SYS_CLK_EN (Bit 7) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_SYS_CLK_EN_Msk (0x80UL) /*!< TIM_SYS_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_FREE_RUN_MODE_EN_Pos (6UL) /*!< TIM_FREE_RUN_MODE_EN (Bit 6) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_FREE_RUN_MODE_EN_Msk (0x40UL) /*!< TIM_FREE_RUN_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IRQ_EN_Pos (5UL) /*!< TIM_IRQ_EN (Bit 5) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IRQ_EN_Msk (0x20UL) /*!< TIM_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Pos (4UL) /*!< TIM_IN2_EVENT_FALL_EN (Bit 4) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Msk (0x10UL) /*!< TIM_IN2_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Pos (3UL) /*!< TIM_IN1_EVENT_FALL_EN (Bit 3) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Msk (0x8UL) /*!< TIM_IN1_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_COUNT_DOWN_EN_Pos (2UL) /*!< TIM_COUNT_DOWN_EN (Bit 2) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_COUNT_DOWN_EN_Msk (0x4UL) /*!< TIM_COUNT_DOWN_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_ONESHOT_MODE_EN_Pos (1UL) /*!< TIM_ONESHOT_MODE_EN (Bit 1) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_ONESHOT_MODE_EN_Msk (0x2UL) /*!< TIM_ONESHOT_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_EN_Pos (0UL) /*!< TIM_EN (Bit 0) */ + #define TIMER5_TIMER5_CTRL_REG_TIM_EN_Msk (0x1UL) /*!< TIM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER5_GPIO1_CONF_REG ================================================= */ + #define TIMER5_TIMER5_GPIO1_CONF_REG_TIM_GPIO1_CONF_Pos (0UL) /*!< TIM_GPIO1_CONF (Bit 0) */ + #define TIMER5_TIMER5_GPIO1_CONF_REG_TIM_GPIO1_CONF_Msk (0x3fUL) /*!< TIM_GPIO1_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER5_GPIO2_CONF_REG ================================================= */ + #define TIMER5_TIMER5_GPIO2_CONF_REG_TIM_GPIO2_CONF_Pos (0UL) /*!< TIM_GPIO2_CONF (Bit 0) */ + #define TIMER5_TIMER5_GPIO2_CONF_REG_TIM_GPIO2_CONF_Msk (0x3fUL) /*!< TIM_GPIO2_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER5_GPIO3_CONF_REG ================================================= */ + #define TIMER5_TIMER5_GPIO3_CONF_REG_TIM_GPIO3_CONF_Pos (0UL) /*!< TIM_GPIO3_CONF (Bit 0) */ + #define TIMER5_TIMER5_GPIO3_CONF_REG_TIM_GPIO3_CONF_Msk (0x3fUL) /*!< TIM_GPIO3_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER5_GPIO4_CONF_REG ================================================= */ + #define TIMER5_TIMER5_GPIO4_CONF_REG_TIM_GPIO4_CONF_Pos (0UL) /*!< TIM_GPIO4_CONF (Bit 0) */ + #define TIMER5_TIMER5_GPIO4_CONF_REG_TIM_GPIO4_CONF_Msk (0x3fUL) /*!< TIM_GPIO4_CONF (Bitfield-Mask: 0x3f) */ +/* ============================================== TIMER5_ONESHOT_TRIGGER_REG =============================================== */ + #define TIMER5_TIMER5_ONESHOT_TRIGGER_REG_TIM_ONESHOT_TRIGGER_SW_Pos (0UL) /*!< TIM_ONESHOT_TRIGGER_SW (Bit 0) */ + #define TIMER5_TIMER5_ONESHOT_TRIGGER_REG_TIM_ONESHOT_TRIGGER_SW_Msk (0x1UL) /*!< TIM_ONESHOT_TRIGGER_SW (Bitfield-Mask: 0x01) */ +/* =============================================== TIMER5_PRESCALER_VAL_REG ================================================ */ + #define TIMER5_TIMER5_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Pos (0UL) /*!< TIM_PRESCALER_VAL (Bit 0) */ + #define TIMER5_TIMER5_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Msk (0x1fUL) /*!< TIM_PRESCALER_VAL (Bitfield-Mask: 0x1f) */ +/* ================================================ TIMER5_PRE_SETTINGS_REG ================================================ */ + #define TIMER5_TIMER5_PRE_SETTINGS_REG_TIM_PRESCALER2_Pos (0UL) /*!< TIM_PRESCALER2 (Bit 0) */ + #define TIMER5_TIMER5_PRE_SETTINGS_REG_TIM_PRESCALER2_Msk (0x1fUL) /*!< TIM_PRESCALER2 (Bitfield-Mask: 0x1f) */ +/* =============================================== TIMER5_PULSE_CNT_CTRL_REG =============================================== */ + #define TIMER5_TIMER5_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Pos (0UL) /*!< PULSE_CNT_THRESHOLD2 (Bit 0) */ + #define TIMER5_TIMER5_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Msk (0xffffffffUL) /*!< PULSE_CNT_THRESHOLD2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER5_PULSE_GPIO_SEL_REG =============================================== */ + #define TIMER5_TIMER5_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Pos (0UL) /*!< PULSE_CNT_GPIO_SEL2 (Bit 0) */ + #define TIMER5_TIMER5_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Msk (0x3fUL) /*!< PULSE_CNT_GPIO_SEL2 (Bitfield-Mask: 0x3f) */ +/* ================================================== TIMER5_PWM_CTRL_REG ================================================== */ + #define TIMER5_TIMER5_PWM_CTRL_REG_TIM_PWM_DC_Pos (16UL) /*!< TIM_PWM_DC (Bit 16) */ + #define TIMER5_TIMER5_PWM_CTRL_REG_TIM_PWM_DC_Msk (0xffff0000UL) /*!< TIM_PWM_DC (Bitfield-Mask: 0xffff) */ + #define TIMER5_TIMER5_PWM_CTRL_REG_TIM_PWM_FREQ_Pos (0UL) /*!< TIM_PWM_FREQ (Bit 0) */ + #define TIMER5_TIMER5_PWM_CTRL_REG_TIM_PWM_FREQ_Msk (0xffffUL) /*!< TIM_PWM_FREQ (Bitfield-Mask: 0xffff) */ +/* ================================================== TIMER5_PWM_SYNC_REG ================================================== */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER6_SYNC_Pos (6UL) /*!< TIMER6_SYNC (Bit 6) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER6_SYNC_Msk (0x40UL) /*!< TIMER6_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER4_SYNC_Pos (5UL) /*!< TIMER4_SYNC (Bit 5) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER4_SYNC_Msk (0x20UL) /*!< TIMER4_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER3_SYNC_Pos (4UL) /*!< TIMER3_SYNC (Bit 4) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER3_SYNC_Msk (0x10UL) /*!< TIMER3_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER2_SYNC_Pos (3UL) /*!< TIMER2_SYNC (Bit 3) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER2_SYNC_Msk (0x8UL) /*!< TIMER2_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER_SYNC_Pos (2UL) /*!< TIMER_SYNC (Bit 2) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_TIMER_SYNC_Msk (0x4UL) /*!< TIMER_SYNC (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_SYNC_ENABLE_Pos (1UL) /*!< SYNC_ENABLE (Bit 1) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_SYNC_ENABLE_Msk (0x2UL) /*!< SYNC_ENABLE (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_PWM_START_Pos (0UL) /*!< PWM_START (Bit 0) */ + #define TIMER5_TIMER5_PWM_SYNC_REG_PWM_START_Msk (0x1UL) /*!< PWM_START (Bitfield-Mask: 0x01) */ +/* ================================================== TIMER5_SETTINGS_REG ================================================== */ + #define TIMER5_TIMER5_SETTINGS_REG_TIM_RELOAD2_Pos (0UL) /*!< TIM_RELOAD2 (Bit 0) */ + #define TIMER5_TIMER5_SETTINGS_REG_TIM_RELOAD2_Msk (0xffffffffUL) /*!< TIM_RELOAD2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= TIMER5_SHOTWIDTH_REG ================================================== */ + #define TIMER5_TIMER5_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Pos (0UL) /*!< TIM_SHOTWIDTH2 (Bit 0) */ + #define TIMER5_TIMER5_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Msk (0xffffffffUL) /*!< TIM_SHOTWIDTH2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TIMER5_STATUS_REG =================================================== */ + #define TIMER5_TIMER5_STATUS_REG_TIM_CAPTIM_DETECTED_Pos (15UL) /*!< TIM_CAPTIM_DETECTED (Bit 15) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_CAPTIM_DETECTED_Msk (0x8000UL) /*!< TIM_CAPTIM_DETECTED (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IRQ_PULSE_STATUS_Pos (14UL) /*!< TIM_IRQ_PULSE_STATUS (Bit 14) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IRQ_PULSE_STATUS_Msk (0x4000UL) /*!< TIM_IRQ_PULSE_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IN4_STATE_Pos (13UL) /*!< TIM_IN4_STATE (Bit 13) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IN4_STATE_Msk (0x2000UL) /*!< TIM_IN4_STATE (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IN3_STATE_Pos (12UL) /*!< TIM_IN3_STATE (Bit 12) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IN3_STATE_Msk (0x1000UL) /*!< TIM_IN3_STATE (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Pos (11UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bit 11) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Msk (0x800UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_PWM_BUSY_Pos (10UL) /*!< TIM_PWM_BUSY (Bit 10) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_PWM_BUSY_Msk (0x400UL) /*!< TIM_PWM_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_TIMER_BUSY_Pos (9UL) /*!< TIM_TIMER_BUSY (Bit 9) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_TIMER_BUSY_Msk (0x200UL) /*!< TIM_TIMER_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IRQ_STATUS_Pos (8UL) /*!< TIM_IRQ_STATUS (Bit 8) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IRQ_STATUS_Msk (0x100UL) /*!< TIM_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_GPIO4_EVENT_PENDING_Pos (7UL) /*!< TIM_GPIO4_EVENT_PENDING (Bit 7) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_GPIO4_EVENT_PENDING_Msk (0x80UL) /*!< TIM_GPIO4_EVENT_PENDING (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_GPIO3_EVENT_PENDING_Pos (6UL) /*!< TIM_GPIO3_EVENT_PENDING (Bit 6) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_GPIO3_EVENT_PENDING_Msk (0x40UL) /*!< TIM_GPIO3_EVENT_PENDING (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_GPIO2_EVENT_PENDING_Pos (5UL) /*!< TIM_GPIO2_EVENT_PENDING (Bit 5) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_GPIO2_EVENT_PENDING_Msk (0x20UL) /*!< TIM_GPIO2_EVENT_PENDING (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_GPIO1_EVENT_PENDING_Pos (4UL) /*!< TIM_GPIO1_EVENT_PENDING (Bit 4) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_GPIO1_EVENT_PENDING_Msk (0x10UL) /*!< TIM_GPIO1_EVENT_PENDING (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_ONESHOT_PHASE_Pos (2UL) /*!< TIM_ONESHOT_PHASE (Bit 2) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_ONESHOT_PHASE_Msk (0xcUL) /*!< TIM_ONESHOT_PHASE (Bitfield-Mask: 0x03) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IN2_STATE_Pos (1UL) /*!< TIM_IN2_STATE (Bit 1) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IN2_STATE_Msk (0x2UL) /*!< TIM_IN2_STATE (Bitfield-Mask: 0x01) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IN1_STATE_Pos (0UL) /*!< TIM_IN1_STATE (Bit 0) */ + #define TIMER5_TIMER5_STATUS_REG_TIM_IN1_STATE_Msk (0x1UL) /*!< TIM_IN1_STATE (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER5_TIMER_VAL_REG ================================================== */ + #define TIMER5_TIMER5_TIMER_VAL_REG_TIM_TIMER_VALUE_Pos (0UL) /*!< TIM_TIMER_VALUE (Bit 0) */ + #define TIMER5_TIMER5_TIMER_VAL_REG_TIM_TIMER_VALUE_Msk (0xffffffffUL) /*!< TIM_TIMER_VALUE (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ TIMER6 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER6_CAPTURE_GPIO1_REG ================================================ */ + #define TIMER6_TIMER6_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Pos (0UL) /*!< TIM_CAPTURE_GPIO12 (Bit 0) */ + #define TIMER6_TIMER6_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO12 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER6_CAPTURE_GPIO2_REG ================================================ */ + #define TIMER6_TIMER6_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Pos (0UL) /*!< TIM_CAPTURE_GPIO22 (Bit 0) */ + #define TIMER6_TIMER6_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO22 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== TIMER6_CLEAR_IRQ_PULSE_REG =============================================== */ + #define TIMER6_TIMER6_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Pos (0UL) /*!< TIM_CLEAR_PULSE_IRQ (Bit 0) */ + #define TIMER6_TIMER6_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_PULSE_IRQ (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER6_CLEAR_IRQ_REG ================================================== */ + #define TIMER6_TIMER6_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Pos (0UL) /*!< TIM_CLEAR_IRQ (Bit 0) */ + #define TIMER6_TIMER6_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_IRQ (Bitfield-Mask: 0x01) */ +/* ==================================================== TIMER6_CTRL_REG ==================================================== */ + #define TIMER6_TIMER6_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Pos (19UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bit 19) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Msk (0x80000UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_EDGE_DET_CNT_EN_Pos (18UL) /*!< TIM_EDGE_DET_CNT_EN (Bit 18) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_EDGE_DET_CNT_EN_Msk (0x40000UL) /*!< TIM_EDGE_DET_CNT_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_CLK_EN_Pos (8UL) /*!< TIM_CLK_EN (Bit 8) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_CLK_EN_Msk (0x100UL) /*!< TIM_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_SYS_CLK_EN_Pos (7UL) /*!< TIM_SYS_CLK_EN (Bit 7) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_SYS_CLK_EN_Msk (0x80UL) /*!< TIM_SYS_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_FREE_RUN_MODE_EN_Pos (6UL) /*!< TIM_FREE_RUN_MODE_EN (Bit 6) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_FREE_RUN_MODE_EN_Msk (0x40UL) /*!< TIM_FREE_RUN_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_IRQ_EN_Pos (5UL) /*!< TIM_IRQ_EN (Bit 5) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_IRQ_EN_Msk (0x20UL) /*!< TIM_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Pos (4UL) /*!< TIM_IN2_EVENT_FALL_EN (Bit 4) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Msk (0x10UL) /*!< TIM_IN2_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Pos (3UL) /*!< TIM_IN1_EVENT_FALL_EN (Bit 3) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Msk (0x8UL) /*!< TIM_IN1_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_COUNT_DOWN_EN_Pos (2UL) /*!< TIM_COUNT_DOWN_EN (Bit 2) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_COUNT_DOWN_EN_Msk (0x4UL) /*!< TIM_COUNT_DOWN_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_ONESHOT_MODE_EN_Pos (1UL) /*!< TIM_ONESHOT_MODE_EN (Bit 1) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_ONESHOT_MODE_EN_Msk (0x2UL) /*!< TIM_ONESHOT_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_EN_Pos (0UL) /*!< TIM_EN (Bit 0) */ + #define TIMER6_TIMER6_CTRL_REG_TIM_EN_Msk (0x1UL) /*!< TIM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER6_GPIO1_CONF_REG ================================================= */ + #define TIMER6_TIMER6_GPIO1_CONF_REG_TIM_GPIO1_CONF_Pos (0UL) /*!< TIM_GPIO1_CONF (Bit 0) */ + #define TIMER6_TIMER6_GPIO1_CONF_REG_TIM_GPIO1_CONF_Msk (0x3fUL) /*!< TIM_GPIO1_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER6_GPIO2_CONF_REG ================================================= */ + #define TIMER6_TIMER6_GPIO2_CONF_REG_TIM_GPIO2_CONF_Pos (0UL) /*!< TIM_GPIO2_CONF (Bit 0) */ + #define TIMER6_TIMER6_GPIO2_CONF_REG_TIM_GPIO2_CONF_Msk (0x3fUL) /*!< TIM_GPIO2_CONF (Bitfield-Mask: 0x3f) */ +/* =============================================== TIMER6_PRESCALER_VAL_REG ================================================ */ + #define TIMER6_TIMER6_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Pos (0UL) /*!< TIM_PRESCALER_VAL (Bit 0) */ + #define TIMER6_TIMER6_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Msk (0x1fUL) /*!< TIM_PRESCALER_VAL (Bitfield-Mask: 0x1f) */ +/* ================================================ TIMER6_PRE_SETTINGS_REG ================================================ */ + #define TIMER6_TIMER6_PRE_SETTINGS_REG_TIM_PRESCALER2_Pos (0UL) /*!< TIM_PRESCALER2 (Bit 0) */ + #define TIMER6_TIMER6_PRE_SETTINGS_REG_TIM_PRESCALER2_Msk (0x1fUL) /*!< TIM_PRESCALER2 (Bitfield-Mask: 0x1f) */ +/* =============================================== TIMER6_PULSE_CNT_CTRL_REG =============================================== */ + #define TIMER6_TIMER6_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Pos (0UL) /*!< PULSE_CNT_THRESHOLD2 (Bit 0) */ + #define TIMER6_TIMER6_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Msk (0xffffffffUL) /*!< PULSE_CNT_THRESHOLD2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER6_PULSE_GPIO_SEL_REG =============================================== */ + #define TIMER6_TIMER6_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Pos (0UL) /*!< PULSE_CNT_GPIO_SEL2 (Bit 0) */ + #define TIMER6_TIMER6_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Msk (0x3fUL) /*!< PULSE_CNT_GPIO_SEL2 (Bitfield-Mask: 0x3f) */ +/* ================================================== TIMER6_PWM_CTRL_REG ================================================== */ + #define TIMER6_TIMER6_PWM_CTRL_REG_TIM_PWM_DC_Pos (16UL) /*!< TIM_PWM_DC (Bit 16) */ + #define TIMER6_TIMER6_PWM_CTRL_REG_TIM_PWM_DC_Msk (0xffff0000UL) /*!< TIM_PWM_DC (Bitfield-Mask: 0xffff) */ + #define TIMER6_TIMER6_PWM_CTRL_REG_TIM_PWM_FREQ_Pos (0UL) /*!< TIM_PWM_FREQ (Bit 0) */ + #define TIMER6_TIMER6_PWM_CTRL_REG_TIM_PWM_FREQ_Msk (0xffffUL) /*!< TIM_PWM_FREQ (Bitfield-Mask: 0xffff) */ +/* ================================================== TIMER6_SETTINGS_REG ================================================== */ + #define TIMER6_TIMER6_SETTINGS_REG_TIM_RELOAD2_Pos (0UL) /*!< TIM_RELOAD2 (Bit 0) */ + #define TIMER6_TIMER6_SETTINGS_REG_TIM_RELOAD2_Msk (0xffffffffUL) /*!< TIM_RELOAD2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= TIMER6_SHOTWIDTH_REG ================================================== */ + #define TIMER6_TIMER6_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Pos (0UL) /*!< TIM_SHOTWIDTH2 (Bit 0) */ + #define TIMER6_TIMER6_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Msk (0xffffffffUL) /*!< TIM_SHOTWIDTH2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TIMER6_STATUS_REG =================================================== */ + #define TIMER6_TIMER6_STATUS_REG_TIM_IRQ_PULSE_STATUS_Pos (14UL) /*!< TIM_IRQ_PULSE_STATUS (Bit 14) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_IRQ_PULSE_STATUS_Msk (0x4000UL) /*!< TIM_IRQ_PULSE_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Pos (11UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bit 11) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Msk (0x800UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_PWM_BUSY_Pos (10UL) /*!< TIM_PWM_BUSY (Bit 10) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_PWM_BUSY_Msk (0x400UL) /*!< TIM_PWM_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_TIMER_BUSY_Pos (9UL) /*!< TIM_TIMER_BUSY (Bit 9) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_TIMER_BUSY_Msk (0x200UL) /*!< TIM_TIMER_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_IRQ_STATUS_Pos (8UL) /*!< TIM_IRQ_STATUS (Bit 8) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_IRQ_STATUS_Msk (0x100UL) /*!< TIM_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_ONESHOT_PHASE_Pos (2UL) /*!< TIM_ONESHOT_PHASE (Bit 2) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_ONESHOT_PHASE_Msk (0xcUL) /*!< TIM_ONESHOT_PHASE (Bitfield-Mask: 0x03) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_IN2_STATE_Pos (1UL) /*!< TIM_IN2_STATE (Bit 1) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_IN2_STATE_Msk (0x2UL) /*!< TIM_IN2_STATE (Bitfield-Mask: 0x01) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_IN1_STATE_Pos (0UL) /*!< TIM_IN1_STATE (Bit 0) */ + #define TIMER6_TIMER6_STATUS_REG_TIM_IN1_STATE_Msk (0x1UL) /*!< TIM_IN1_STATE (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER6_TIMER_VAL_REG ================================================== */ + #define TIMER6_TIMER6_TIMER_VAL_REG_TIM_TIMER_VALUE2_Pos (0UL) /*!< TIM_TIMER_VALUE2 (Bit 0) */ + #define TIMER6_TIMER6_TIMER_VAL_REG_TIM_TIMER_VALUE2_Msk (0xffffffffUL) /*!< TIM_TIMER_VALUE2 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ TIMER7 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER7_CAPTURE_GPIO1_REG ================================================ */ + #define TIMER7_TIMER7_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Pos (0UL) /*!< TIM_CAPTURE_GPIO12 (Bit 0) */ + #define TIMER7_TIMER7_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO12 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER7_CAPTURE_GPIO2_REG ================================================ */ + #define TIMER7_TIMER7_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Pos (0UL) /*!< TIM_CAPTURE_GPIO22 (Bit 0) */ + #define TIMER7_TIMER7_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO22 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== TIMER7_CLEAR_IRQ_PULSE_REG =============================================== */ + #define TIMER7_TIMER7_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Pos (0UL) /*!< TIM_CLEAR_PULSE_IRQ (Bit 0) */ + #define TIMER7_TIMER7_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_PULSE_IRQ (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER7_CLEAR_IRQ_REG ================================================== */ + #define TIMER7_TIMER7_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Pos (0UL) /*!< TIM_CLEAR_IRQ (Bit 0) */ + #define TIMER7_TIMER7_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_IRQ (Bitfield-Mask: 0x01) */ +/* ==================================================== TIMER7_CTRL_REG ==================================================== */ + #define TIMER7_TIMER7_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Pos (19UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bit 19) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Msk (0x80000UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_EDGE_DET_CNT_EN_Pos (18UL) /*!< TIM_EDGE_DET_CNT_EN (Bit 18) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_EDGE_DET_CNT_EN_Msk (0x40000UL) /*!< TIM_EDGE_DET_CNT_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_CLK_EN_Pos (8UL) /*!< TIM_CLK_EN (Bit 8) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_CLK_EN_Msk (0x100UL) /*!< TIM_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_SYS_CLK_EN_Pos (7UL) /*!< TIM_SYS_CLK_EN (Bit 7) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_SYS_CLK_EN_Msk (0x80UL) /*!< TIM_SYS_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_FREE_RUN_MODE_EN_Pos (6UL) /*!< TIM_FREE_RUN_MODE_EN (Bit 6) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_FREE_RUN_MODE_EN_Msk (0x40UL) /*!< TIM_FREE_RUN_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_IRQ_EN_Pos (5UL) /*!< TIM_IRQ_EN (Bit 5) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_IRQ_EN_Msk (0x20UL) /*!< TIM_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Pos (4UL) /*!< TIM_IN2_EVENT_FALL_EN (Bit 4) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Msk (0x10UL) /*!< TIM_IN2_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Pos (3UL) /*!< TIM_IN1_EVENT_FALL_EN (Bit 3) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Msk (0x8UL) /*!< TIM_IN1_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_COUNT_DOWN_EN_Pos (2UL) /*!< TIM_COUNT_DOWN_EN (Bit 2) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_COUNT_DOWN_EN_Msk (0x4UL) /*!< TIM_COUNT_DOWN_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_ONESHOT_MODE_EN_Pos (1UL) /*!< TIM_ONESHOT_MODE_EN (Bit 1) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_ONESHOT_MODE_EN_Msk (0x2UL) /*!< TIM_ONESHOT_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_EN_Pos (0UL) /*!< TIM_EN (Bit 0) */ + #define TIMER7_TIMER7_CTRL_REG_TIM_EN_Msk (0x1UL) /*!< TIM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER7_GPIO1_CONF_REG ================================================= */ + #define TIMER7_TIMER7_GPIO1_CONF_REG_TIM_GPIO1_CONF_Pos (0UL) /*!< TIM_GPIO1_CONF (Bit 0) */ + #define TIMER7_TIMER7_GPIO1_CONF_REG_TIM_GPIO1_CONF_Msk (0x3fUL) /*!< TIM_GPIO1_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER7_GPIO2_CONF_REG ================================================= */ + #define TIMER7_TIMER7_GPIO2_CONF_REG_TIM_GPIO2_CONF_Pos (0UL) /*!< TIM_GPIO2_CONF (Bit 0) */ + #define TIMER7_TIMER7_GPIO2_CONF_REG_TIM_GPIO2_CONF_Msk (0x3fUL) /*!< TIM_GPIO2_CONF (Bitfield-Mask: 0x3f) */ +/* =============================================== TIMER7_PRESCALER_VAL_REG ================================================ */ + #define TIMER7_TIMER7_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Pos (0UL) /*!< TIM_PRESCALER_VAL (Bit 0) */ + #define TIMER7_TIMER7_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Msk (0x1fUL) /*!< TIM_PRESCALER_VAL (Bitfield-Mask: 0x1f) */ +/* ================================================ TIMER7_PRE_SETTINGS_REG ================================================ */ + #define TIMER7_TIMER7_PRE_SETTINGS_REG_TIM_PRESCALER2_Pos (0UL) /*!< TIM_PRESCALER2 (Bit 0) */ + #define TIMER7_TIMER7_PRE_SETTINGS_REG_TIM_PRESCALER2_Msk (0x1fUL) /*!< TIM_PRESCALER2 (Bitfield-Mask: 0x1f) */ +/* =============================================== TIMER7_PULSE_CNT_CTRL_REG =============================================== */ + #define TIMER7_TIMER7_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Pos (0UL) /*!< PULSE_CNT_THRESHOLD2 (Bit 0) */ + #define TIMER7_TIMER7_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Msk (0xffffffffUL) /*!< PULSE_CNT_THRESHOLD2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER7_PULSE_GPIO_SEL_REG =============================================== */ + #define TIMER7_TIMER7_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Pos (0UL) /*!< PULSE_CNT_GPIO_SEL2 (Bit 0) */ + #define TIMER7_TIMER7_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Msk (0x3fUL) /*!< PULSE_CNT_GPIO_SEL2 (Bitfield-Mask: 0x3f) */ +/* ================================================== TIMER7_PWM_CTRL_REG ================================================== */ + #define TIMER7_TIMER7_PWM_CTRL_REG_TIM_PWM_DC_Pos (16UL) /*!< TIM_PWM_DC (Bit 16) */ + #define TIMER7_TIMER7_PWM_CTRL_REG_TIM_PWM_DC_Msk (0xffff0000UL) /*!< TIM_PWM_DC (Bitfield-Mask: 0xffff) */ + #define TIMER7_TIMER7_PWM_CTRL_REG_TIM_PWM_FREQ_Pos (0UL) /*!< TIM_PWM_FREQ (Bit 0) */ + #define TIMER7_TIMER7_PWM_CTRL_REG_TIM_PWM_FREQ_Msk (0xffffUL) /*!< TIM_PWM_FREQ (Bitfield-Mask: 0xffff) */ +/* ================================================== TIMER7_SETTINGS_REG ================================================== */ + #define TIMER7_TIMER7_SETTINGS_REG_TIM_RELOAD2_Pos (0UL) /*!< TIM_RELOAD2 (Bit 0) */ + #define TIMER7_TIMER7_SETTINGS_REG_TIM_RELOAD2_Msk (0xffffffffUL) /*!< TIM_RELOAD2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= TIMER7_SHOTWIDTH_REG ================================================== */ + #define TIMER7_TIMER7_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Pos (0UL) /*!< TIM_SHOTWIDTH2 (Bit 0) */ + #define TIMER7_TIMER7_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Msk (0xffffffffUL) /*!< TIM_SHOTWIDTH2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TIMER7_STATUS_REG =================================================== */ + #define TIMER7_TIMER7_STATUS_REG_TIM_IRQ_PULSE_STATUS_Pos (14UL) /*!< TIM_IRQ_PULSE_STATUS (Bit 14) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_IRQ_PULSE_STATUS_Msk (0x4000UL) /*!< TIM_IRQ_PULSE_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Pos (11UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bit 11) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Msk (0x800UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_PWM_BUSY_Pos (10UL) /*!< TIM_PWM_BUSY (Bit 10) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_PWM_BUSY_Msk (0x400UL) /*!< TIM_PWM_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_TIMER_BUSY_Pos (9UL) /*!< TIM_TIMER_BUSY (Bit 9) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_TIMER_BUSY_Msk (0x200UL) /*!< TIM_TIMER_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_IRQ_STATUS_Pos (8UL) /*!< TIM_IRQ_STATUS (Bit 8) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_IRQ_STATUS_Msk (0x100UL) /*!< TIM_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_ONESHOT_PHASE_Pos (2UL) /*!< TIM_ONESHOT_PHASE (Bit 2) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_ONESHOT_PHASE_Msk (0xcUL) /*!< TIM_ONESHOT_PHASE (Bitfield-Mask: 0x03) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_IN2_STATE_Pos (1UL) /*!< TIM_IN2_STATE (Bit 1) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_IN2_STATE_Msk (0x2UL) /*!< TIM_IN2_STATE (Bitfield-Mask: 0x01) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_IN1_STATE_Pos (0UL) /*!< TIM_IN1_STATE (Bit 0) */ + #define TIMER7_TIMER7_STATUS_REG_TIM_IN1_STATE_Msk (0x1UL) /*!< TIM_IN1_STATE (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER7_TIMER_VAL_REG ================================================== */ + #define TIMER7_TIMER7_TIMER_VAL_REG_TIM_TIMER_VALUE2_Pos (0UL) /*!< TIM_TIMER_VALUE2 (Bit 0) */ + #define TIMER7_TIMER7_TIMER_VAL_REG_TIM_TIMER_VALUE2_Msk (0xffffffffUL) /*!< TIM_TIMER_VALUE2 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ TIMER8 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER8_CAPTURE_GPIO1_REG ================================================ */ + #define TIMER8_TIMER8_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Pos (0UL) /*!< TIM_CAPTURE_GPIO12 (Bit 0) */ + #define TIMER8_TIMER8_CAPTURE_GPIO1_REG_TIM_CAPTURE_GPIO12_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO12 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER8_CAPTURE_GPIO2_REG ================================================ */ + #define TIMER8_TIMER8_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Pos (0UL) /*!< TIM_CAPTURE_GPIO22 (Bit 0) */ + #define TIMER8_TIMER8_CAPTURE_GPIO2_REG_TIM_CAPTURE_GPIO22_Msk (0xffffffffUL) /*!< TIM_CAPTURE_GPIO22 (Bitfield-Mask: 0xffffffff) */ +/* ============================================== TIMER8_CLEAR_IRQ_PULSE_REG =============================================== */ + #define TIMER8_TIMER8_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Pos (0UL) /*!< TIM_CLEAR_PULSE_IRQ (Bit 0) */ + #define TIMER8_TIMER8_CLEAR_IRQ_PULSE_REG_TIM_CLEAR_PULSE_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_PULSE_IRQ (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER8_CLEAR_IRQ_REG ================================================== */ + #define TIMER8_TIMER8_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Pos (0UL) /*!< TIM_CLEAR_IRQ (Bit 0) */ + #define TIMER8_TIMER8_CLEAR_IRQ_REG_TIM_CLEAR_IRQ_Msk (0x1UL) /*!< TIM_CLEAR_IRQ (Bitfield-Mask: 0x01) */ +/* ==================================================== TIMER8_CTRL_REG ==================================================== */ + #define TIMER8_TIMER8_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Pos (19UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bit 19) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_EDGE_DET_CNT_FALL_EN_Msk (0x80000UL) /*!< TIM_EDGE_DET_CNT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_EDGE_DET_CNT_EN_Pos (18UL) /*!< TIM_EDGE_DET_CNT_EN (Bit 18) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_EDGE_DET_CNT_EN_Msk (0x40000UL) /*!< TIM_EDGE_DET_CNT_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_CLK_EN_Pos (8UL) /*!< TIM_CLK_EN (Bit 8) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_CLK_EN_Msk (0x100UL) /*!< TIM_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_SYS_CLK_EN_Pos (7UL) /*!< TIM_SYS_CLK_EN (Bit 7) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_SYS_CLK_EN_Msk (0x80UL) /*!< TIM_SYS_CLK_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_FREE_RUN_MODE_EN_Pos (6UL) /*!< TIM_FREE_RUN_MODE_EN (Bit 6) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_FREE_RUN_MODE_EN_Msk (0x40UL) /*!< TIM_FREE_RUN_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_IRQ_EN_Pos (5UL) /*!< TIM_IRQ_EN (Bit 5) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_IRQ_EN_Msk (0x20UL) /*!< TIM_IRQ_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Pos (4UL) /*!< TIM_IN2_EVENT_FALL_EN (Bit 4) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_IN2_EVENT_FALL_EN_Msk (0x10UL) /*!< TIM_IN2_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Pos (3UL) /*!< TIM_IN1_EVENT_FALL_EN (Bit 3) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_IN1_EVENT_FALL_EN_Msk (0x8UL) /*!< TIM_IN1_EVENT_FALL_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_COUNT_DOWN_EN_Pos (2UL) /*!< TIM_COUNT_DOWN_EN (Bit 2) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_COUNT_DOWN_EN_Msk (0x4UL) /*!< TIM_COUNT_DOWN_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_ONESHOT_MODE_EN_Pos (1UL) /*!< TIM_ONESHOT_MODE_EN (Bit 1) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_ONESHOT_MODE_EN_Msk (0x2UL) /*!< TIM_ONESHOT_MODE_EN (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_EN_Pos (0UL) /*!< TIM_EN (Bit 0) */ + #define TIMER8_TIMER8_CTRL_REG_TIM_EN_Msk (0x1UL) /*!< TIM_EN (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER8_GPIO1_CONF_REG ================================================= */ + #define TIMER8_TIMER8_GPIO1_CONF_REG_TIM_GPIO1_CONF_Pos (0UL) /*!< TIM_GPIO1_CONF (Bit 0) */ + #define TIMER8_TIMER8_GPIO1_CONF_REG_TIM_GPIO1_CONF_Msk (0x3fUL) /*!< TIM_GPIO1_CONF (Bitfield-Mask: 0x3f) */ +/* ================================================= TIMER8_GPIO2_CONF_REG ================================================= */ + #define TIMER8_TIMER8_GPIO2_CONF_REG_TIM_GPIO2_CONF_Pos (0UL) /*!< TIM_GPIO2_CONF (Bit 0) */ + #define TIMER8_TIMER8_GPIO2_CONF_REG_TIM_GPIO2_CONF_Msk (0x3fUL) /*!< TIM_GPIO2_CONF (Bitfield-Mask: 0x3f) */ +/* =============================================== TIMER8_PRESCALER_VAL_REG ================================================ */ + #define TIMER8_TIMER8_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Pos (0UL) /*!< TIM_PRESCALER_VAL (Bit 0) */ + #define TIMER8_TIMER8_PRESCALER_VAL_REG_TIM_PRESCALER_VAL_Msk (0x1fUL) /*!< TIM_PRESCALER_VAL (Bitfield-Mask: 0x1f) */ +/* ================================================ TIMER8_PRE_SETTINGS_REG ================================================ */ + #define TIMER8_TIMER8_PRE_SETTINGS_REG_TIM_PRESCALER2_Pos (0UL) /*!< TIM_PRESCALER2 (Bit 0) */ + #define TIMER8_TIMER8_PRE_SETTINGS_REG_TIM_PRESCALER2_Msk (0x1fUL) /*!< TIM_PRESCALER2 (Bitfield-Mask: 0x1f) */ +/* =============================================== TIMER8_PULSE_CNT_CTRL_REG =============================================== */ + #define TIMER8_TIMER8_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Pos (0UL) /*!< PULSE_CNT_THRESHOLD2 (Bit 0) */ + #define TIMER8_TIMER8_PULSE_CNT_CTRL_REG_PULSE_CNT_THRESHOLD2_Msk (0xffffffffUL) /*!< PULSE_CNT_THRESHOLD2 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== TIMER8_PULSE_GPIO_SEL_REG =============================================== */ + #define TIMER8_TIMER8_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Pos (0UL) /*!< PULSE_CNT_GPIO_SEL2 (Bit 0) */ + #define TIMER8_TIMER8_PULSE_GPIO_SEL_REG_PULSE_CNT_GPIO_SEL2_Msk (0x3fUL) /*!< PULSE_CNT_GPIO_SEL2 (Bitfield-Mask: 0x3f) */ +/* ================================================== TIMER8_PWM_CTRL_REG ================================================== */ + #define TIMER8_TIMER8_PWM_CTRL_REG_TIM_PWM_DC_Pos (16UL) /*!< TIM_PWM_DC (Bit 16) */ + #define TIMER8_TIMER8_PWM_CTRL_REG_TIM_PWM_DC_Msk (0xffff0000UL) /*!< TIM_PWM_DC (Bitfield-Mask: 0xffff) */ + #define TIMER8_TIMER8_PWM_CTRL_REG_TIM_PWM_FREQ_Pos (0UL) /*!< TIM_PWM_FREQ (Bit 0) */ + #define TIMER8_TIMER8_PWM_CTRL_REG_TIM_PWM_FREQ_Msk (0xffffUL) /*!< TIM_PWM_FREQ (Bitfield-Mask: 0xffff) */ +/* ================================================== TIMER8_SETTINGS_REG ================================================== */ + #define TIMER8_TIMER8_SETTINGS_REG_TIM_RELOAD2_Pos (0UL) /*!< TIM_RELOAD2 (Bit 0) */ + #define TIMER8_TIMER8_SETTINGS_REG_TIM_RELOAD2_Msk (0xffffffffUL) /*!< TIM_RELOAD2 (Bitfield-Mask: 0xffffffff) */ +/* ================================================= TIMER8_SHOTWIDTH_REG ================================================== */ + #define TIMER8_TIMER8_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Pos (0UL) /*!< TIM_SHOTWIDTH2 (Bit 0) */ + #define TIMER8_TIMER8_SHOTWIDTH_REG_TIM_SHOTWIDTH2_Msk (0xffffffffUL) /*!< TIM_SHOTWIDTH2 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TIMER8_STATUS_REG =================================================== */ + #define TIMER8_TIMER8_STATUS_REG_TIM_IRQ_PULSE_STATUS_Pos (14UL) /*!< TIM_IRQ_PULSE_STATUS (Bit 14) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_IRQ_PULSE_STATUS_Msk (0x4000UL) /*!< TIM_IRQ_PULSE_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Pos (11UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bit 11) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_SWITCHED_TO_DIVN_CLK_Msk (0x800UL) /*!< TIM_SWITCHED_TO_DIVN_CLK (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_PWM_BUSY_Pos (10UL) /*!< TIM_PWM_BUSY (Bit 10) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_PWM_BUSY_Msk (0x400UL) /*!< TIM_PWM_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_TIMER_BUSY_Pos (9UL) /*!< TIM_TIMER_BUSY (Bit 9) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_TIMER_BUSY_Msk (0x200UL) /*!< TIM_TIMER_BUSY (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_IRQ_STATUS_Pos (8UL) /*!< TIM_IRQ_STATUS (Bit 8) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_IRQ_STATUS_Msk (0x100UL) /*!< TIM_IRQ_STATUS (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_ONESHOT_PHASE_Pos (2UL) /*!< TIM_ONESHOT_PHASE (Bit 2) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_ONESHOT_PHASE_Msk (0xcUL) /*!< TIM_ONESHOT_PHASE (Bitfield-Mask: 0x03) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_IN2_STATE_Pos (1UL) /*!< TIM_IN2_STATE (Bit 1) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_IN2_STATE_Msk (0x2UL) /*!< TIM_IN2_STATE (Bitfield-Mask: 0x01) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_IN1_STATE_Pos (0UL) /*!< TIM_IN1_STATE (Bit 0) */ + #define TIMER8_TIMER8_STATUS_REG_TIM_IN1_STATE_Msk (0x1UL) /*!< TIM_IN1_STATE (Bitfield-Mask: 0x01) */ +/* ================================================= TIMER8_TIMER_VAL_REG ================================================== */ + #define TIMER8_TIMER8_TIMER_VAL_REG_TIM_TIMER_VALUE2_Pos (0UL) /*!< TIM_TIMER_VALUE2 (Bit 0) */ + #define TIMER8_TIMER8_TIMER_VAL_REG_TIM_TIMER_VALUE2_Msk (0xffffffffUL) /*!< TIM_TIMER_VALUE2 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ UART ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== UART_CR_REG ====================================================== */ + #define UART_UART_CR_REG_CTSEn_Pos (15UL) /*!< CTSEn (Bit 15) */ + #define UART_UART_CR_REG_CTSEn_Msk (0x8000UL) /*!< CTSEn (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_RTSEn_Pos (14UL) /*!< RTSEn (Bit 14) */ + #define UART_UART_CR_REG_RTSEn_Msk (0x4000UL) /*!< RTSEn (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_Out2_Pos (13UL) /*!< Out2 (Bit 13) */ + #define UART_UART_CR_REG_Out2_Msk (0x2000UL) /*!< Out2 (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_Out1_Pos (12UL) /*!< Out1 (Bit 12) */ + #define UART_UART_CR_REG_Out1_Msk (0x1000UL) /*!< Out1 (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_RTS_Pos (11UL) /*!< RTS (Bit 11) */ + #define UART_UART_CR_REG_RTS_Msk (0x800UL) /*!< RTS (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_DTR_Pos (10UL) /*!< DTR (Bit 10) */ + #define UART_UART_CR_REG_DTR_Msk (0x400UL) /*!< DTR (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_RXE_Pos (9UL) /*!< RXE (Bit 9) */ + #define UART_UART_CR_REG_RXE_Msk (0x200UL) /*!< RXE (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_TXE_Pos (8UL) /*!< TXE (Bit 8) */ + #define UART_UART_CR_REG_TXE_Msk (0x100UL) /*!< TXE (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_LBE_Pos (7UL) /*!< LBE (Bit 7) */ + #define UART_UART_CR_REG_LBE_Msk (0x80UL) /*!< LBE (Bitfield-Mask: 0x01) */ + #define UART_UART_CR_REG_UARTEN_Pos (0UL) /*!< UARTEN (Bit 0) */ + #define UART_UART_CR_REG_UARTEN_Msk (0x1UL) /*!< UARTEN (Bitfield-Mask: 0x01) */ +/* ==================================================== UART_DMACR_REG ===================================================== */ + #define UART_UART_DMACR_REG_DMAONERR_Pos (2UL) /*!< DMAONERR (Bit 2) */ + #define UART_UART_DMACR_REG_DMAONERR_Msk (0x4UL) /*!< DMAONERR (Bitfield-Mask: 0x01) */ + #define UART_UART_DMACR_REG_TXDMAE_Pos (1UL) /*!< TXDMAE (Bit 1) */ + #define UART_UART_DMACR_REG_TXDMAE_Msk (0x2UL) /*!< TXDMAE (Bitfield-Mask: 0x01) */ + #define UART_UART_DMACR_REG_RXDMAE_Pos (0UL) /*!< RXDMAE (Bit 0) */ + #define UART_UART_DMACR_REG_RXDMAE_Msk (0x1UL) /*!< RXDMAE (Bitfield-Mask: 0x01) */ +/* ====================================================== UART_DR_REG ====================================================== */ + #define UART_UART_DR_REG_DR_OE_Pos (11UL) /*!< DR_OE (Bit 11) */ + #define UART_UART_DR_REG_DR_OE_Msk (0x800UL) /*!< DR_OE (Bitfield-Mask: 0x01) */ + #define UART_UART_DR_REG_DR_BE_Pos (10UL) /*!< DR_BE (Bit 10) */ + #define UART_UART_DR_REG_DR_BE_Msk (0x400UL) /*!< DR_BE (Bitfield-Mask: 0x01) */ + #define UART_UART_DR_REG_DR_PE_Pos (9UL) /*!< DR_PE (Bit 9) */ + #define UART_UART_DR_REG_DR_PE_Msk (0x200UL) /*!< DR_PE (Bitfield-Mask: 0x01) */ + #define UART_UART_DR_REG_DR_FE_Pos (8UL) /*!< DR_FE (Bit 8) */ + #define UART_UART_DR_REG_DR_FE_Msk (0x100UL) /*!< DR_FE (Bitfield-Mask: 0x01) */ + #define UART_UART_DR_REG_DR_DATA_Pos (0UL) /*!< DR_DATA (Bit 0) */ + #define UART_UART_DR_REG_DR_DATA_Msk (0xffUL) /*!< DR_DATA (Bitfield-Mask: 0xff) */ +/* ===================================================== UART_FBRD_REG ===================================================== */ + #define UART_UART_FBRD_REG_BAUD_DIVFRAC_Pos (0UL) /*!< BAUD_DIVFRAC (Bit 0) */ + #define UART_UART_FBRD_REG_BAUD_DIVFRAC_Msk (0x3fUL) /*!< BAUD_DIVFRAC (Bitfield-Mask: 0x3f) */ +/* ====================================================== UART_FR_REG ====================================================== */ + #define UART_UART_FR_REG_RI_Pos (8UL) /*!< RI (Bit 8) */ + #define UART_UART_FR_REG_RI_Msk (0x100UL) /*!< RI (Bitfield-Mask: 0x01) */ + #define UART_UART_FR_REG_TXFE_Pos (7UL) /*!< TXFE (Bit 7) */ + #define UART_UART_FR_REG_TXFE_Msk (0x80UL) /*!< TXFE (Bitfield-Mask: 0x01) */ + #define UART_UART_FR_REG_RXFF_Pos (6UL) /*!< RXFF (Bit 6) */ + #define UART_UART_FR_REG_RXFF_Msk (0x40UL) /*!< RXFF (Bitfield-Mask: 0x01) */ + #define UART_UART_FR_REG_TXFF_Pos (5UL) /*!< TXFF (Bit 5) */ + #define UART_UART_FR_REG_TXFF_Msk (0x20UL) /*!< TXFF (Bitfield-Mask: 0x01) */ + #define UART_UART_FR_REG_RXFE_Pos (4UL) /*!< RXFE (Bit 4) */ + #define UART_UART_FR_REG_RXFE_Msk (0x10UL) /*!< RXFE (Bitfield-Mask: 0x01) */ + #define UART_UART_FR_REG_BUSY_Pos (3UL) /*!< BUSY (Bit 3) */ + #define UART_UART_FR_REG_BUSY_Msk (0x8UL) /*!< BUSY (Bitfield-Mask: 0x01) */ + #define UART_UART_FR_REG_DCD_Pos (2UL) /*!< DCD (Bit 2) */ + #define UART_UART_FR_REG_DCD_Msk (0x4UL) /*!< DCD (Bitfield-Mask: 0x01) */ + #define UART_UART_FR_REG_DSR_Pos (1UL) /*!< DSR (Bit 1) */ + #define UART_UART_FR_REG_DSR_Msk (0x2UL) /*!< DSR (Bitfield-Mask: 0x01) */ + #define UART_UART_FR_REG_CTS_Pos (0UL) /*!< CTS (Bit 0) */ + #define UART_UART_FR_REG_CTS_Msk (0x1UL) /*!< CTS (Bitfield-Mask: 0x01) */ +/* ===================================================== UART_IBRD_REG ===================================================== */ + #define UART_UART_IBRD_REG_BAUD_DIVINT_Pos (0UL) /*!< BAUD_DIVINT (Bit 0) */ + #define UART_UART_IBRD_REG_BAUD_DIVINT_Msk (0xffffUL) /*!< BAUD_DIVINT (Bitfield-Mask: 0xffff) */ +/* ===================================================== UART_ICR_REG ====================================================== */ + #define UART_UART_ICR_REG_OEIC_Pos (10UL) /*!< OEIC (Bit 10) */ + #define UART_UART_ICR_REG_OEIC_Msk (0x400UL) /*!< OEIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_BEIC_Pos (9UL) /*!< BEIC (Bit 9) */ + #define UART_UART_ICR_REG_BEIC_Msk (0x200UL) /*!< BEIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_PEIC_Pos (8UL) /*!< PEIC (Bit 8) */ + #define UART_UART_ICR_REG_PEIC_Msk (0x100UL) /*!< PEIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_FEIC_Pos (7UL) /*!< FEIC (Bit 7) */ + #define UART_UART_ICR_REG_FEIC_Msk (0x80UL) /*!< FEIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_RTIC_Pos (6UL) /*!< RTIC (Bit 6) */ + #define UART_UART_ICR_REG_RTIC_Msk (0x40UL) /*!< RTIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_TXIC_Pos (5UL) /*!< TXIC (Bit 5) */ + #define UART_UART_ICR_REG_TXIC_Msk (0x20UL) /*!< TXIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_RXIC_Pos (4UL) /*!< RXIC (Bit 4) */ + #define UART_UART_ICR_REG_RXIC_Msk (0x10UL) /*!< RXIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_DSRMIC_Pos (3UL) /*!< DSRMIC (Bit 3) */ + #define UART_UART_ICR_REG_DSRMIC_Msk (0x8UL) /*!< DSRMIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_DCDMIC_Pos (2UL) /*!< DCDMIC (Bit 2) */ + #define UART_UART_ICR_REG_DCDMIC_Msk (0x4UL) /*!< DCDMIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_CTSMIC_Pos (1UL) /*!< CTSMIC (Bit 1) */ + #define UART_UART_ICR_REG_CTSMIC_Msk (0x2UL) /*!< CTSMIC (Bitfield-Mask: 0x01) */ + #define UART_UART_ICR_REG_RIMIC_Pos (0UL) /*!< RIMIC (Bit 0) */ + #define UART_UART_ICR_REG_RIMIC_Msk (0x1UL) /*!< RIMIC (Bitfield-Mask: 0x01) */ +/* ===================================================== UART_IFLS_REG ===================================================== */ + #define UART_UART_IFLS_REG_RXIFLSEL_Pos (3UL) /*!< RXIFLSEL (Bit 3) */ + #define UART_UART_IFLS_REG_RXIFLSEL_Msk (0x38UL) /*!< RXIFLSEL (Bitfield-Mask: 0x07) */ + #define UART_UART_IFLS_REG_TXIFLSEL_Pos (0UL) /*!< TXIFLSEL (Bit 0) */ + #define UART_UART_IFLS_REG_TXIFLSEL_Msk (0x7UL) /*!< TXIFLSEL (Bitfield-Mask: 0x07) */ +/* ===================================================== UART_IMSC_REG ===================================================== */ + #define UART_UART_IMSC_REG_OEIM_Pos (10UL) /*!< OEIM (Bit 10) */ + #define UART_UART_IMSC_REG_OEIM_Msk (0x400UL) /*!< OEIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_BEIM_Pos (9UL) /*!< BEIM (Bit 9) */ + #define UART_UART_IMSC_REG_BEIM_Msk (0x200UL) /*!< BEIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_PEIM_Pos (8UL) /*!< PEIM (Bit 8) */ + #define UART_UART_IMSC_REG_PEIM_Msk (0x100UL) /*!< PEIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_FEIM_Pos (7UL) /*!< FEIM (Bit 7) */ + #define UART_UART_IMSC_REG_FEIM_Msk (0x80UL) /*!< FEIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_RTIM_Pos (6UL) /*!< RTIM (Bit 6) */ + #define UART_UART_IMSC_REG_RTIM_Msk (0x40UL) /*!< RTIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_TXIM_Pos (5UL) /*!< TXIM (Bit 5) */ + #define UART_UART_IMSC_REG_TXIM_Msk (0x20UL) /*!< TXIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_RXIM_Pos (4UL) /*!< RXIM (Bit 4) */ + #define UART_UART_IMSC_REG_RXIM_Msk (0x10UL) /*!< RXIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_DSRMIM_Pos (3UL) /*!< DSRMIM (Bit 3) */ + #define UART_UART_IMSC_REG_DSRMIM_Msk (0x8UL) /*!< DSRMIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_DCDMIM_Pos (2UL) /*!< DCDMIM (Bit 2) */ + #define UART_UART_IMSC_REG_DCDMIM_Msk (0x4UL) /*!< DCDMIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_CTSMIM_Pos (1UL) /*!< CTSMIM (Bit 1) */ + #define UART_UART_IMSC_REG_CTSMIM_Msk (0x2UL) /*!< CTSMIM (Bitfield-Mask: 0x01) */ + #define UART_UART_IMSC_REG_RIMIM_Pos (0UL) /*!< RIMIM (Bit 0) */ + #define UART_UART_IMSC_REG_RIMIM_Msk (0x1UL) /*!< RIMIM (Bitfield-Mask: 0x01) */ +/* ==================================================== UART_LCR_H_REG ===================================================== */ + #define UART_UART_LCR_H_REG_SPS_Pos (7UL) /*!< SPS (Bit 7) */ + #define UART_UART_LCR_H_REG_SPS_Msk (0x80UL) /*!< SPS (Bitfield-Mask: 0x01) */ + #define UART_UART_LCR_H_REG_WLEN_Pos (5UL) /*!< WLEN (Bit 5) */ + #define UART_UART_LCR_H_REG_WLEN_Msk (0x60UL) /*!< WLEN (Bitfield-Mask: 0x03) */ + #define UART_UART_LCR_H_REG_FEN_Pos (4UL) /*!< FEN (Bit 4) */ + #define UART_UART_LCR_H_REG_FEN_Msk (0x10UL) /*!< FEN (Bitfield-Mask: 0x01) */ + #define UART_UART_LCR_H_REG_STP2_Pos (3UL) /*!< STP2 (Bit 3) */ + #define UART_UART_LCR_H_REG_STP2_Msk (0x8UL) /*!< STP2 (Bitfield-Mask: 0x01) */ + #define UART_UART_LCR_H_REG_EPS_Pos (2UL) /*!< EPS (Bit 2) */ + #define UART_UART_LCR_H_REG_EPS_Msk (0x4UL) /*!< EPS (Bitfield-Mask: 0x01) */ + #define UART_UART_LCR_H_REG_PEN_Pos (1UL) /*!< PEN (Bit 1) */ + #define UART_UART_LCR_H_REG_PEN_Msk (0x2UL) /*!< PEN (Bitfield-Mask: 0x01) */ + #define UART_UART_LCR_H_REG_BRK_Pos (0UL) /*!< BRK (Bit 0) */ + #define UART_UART_LCR_H_REG_BRK_Msk (0x1UL) /*!< BRK (Bitfield-Mask: 0x01) */ +/* ===================================================== UART_MIS_REG ====================================================== */ + #define UART_UART_MIS_REG_OEMIS_Pos (10UL) /*!< OEMIS (Bit 10) */ + #define UART_UART_MIS_REG_OEMIS_Msk (0x400UL) /*!< OEMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_BEMIS_Pos (9UL) /*!< BEMIS (Bit 9) */ + #define UART_UART_MIS_REG_BEMIS_Msk (0x200UL) /*!< BEMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_PEMIS_Pos (8UL) /*!< PEMIS (Bit 8) */ + #define UART_UART_MIS_REG_PEMIS_Msk (0x100UL) /*!< PEMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_FEMIS_Pos (7UL) /*!< FEMIS (Bit 7) */ + #define UART_UART_MIS_REG_FEMIS_Msk (0x80UL) /*!< FEMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_RTMIS_Pos (6UL) /*!< RTMIS (Bit 6) */ + #define UART_UART_MIS_REG_RTMIS_Msk (0x40UL) /*!< RTMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_TXMIS_Pos (5UL) /*!< TXMIS (Bit 5) */ + #define UART_UART_MIS_REG_TXMIS_Msk (0x20UL) /*!< TXMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_RXMIS_Pos (4UL) /*!< RXMIS (Bit 4) */ + #define UART_UART_MIS_REG_RXMIS_Msk (0x10UL) /*!< RXMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_DSRMMIS_Pos (3UL) /*!< DSRMMIS (Bit 3) */ + #define UART_UART_MIS_REG_DSRMMIS_Msk (0x8UL) /*!< DSRMMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_DCDMMIS_Pos (2UL) /*!< DCDMMIS (Bit 2) */ + #define UART_UART_MIS_REG_DCDMMIS_Msk (0x4UL) /*!< DCDMMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_CTSMMIS_Pos (1UL) /*!< CTSMMIS (Bit 1) */ + #define UART_UART_MIS_REG_CTSMMIS_Msk (0x2UL) /*!< CTSMMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_MIS_REG_RIMMIS_Pos (0UL) /*!< RIMMIS (Bit 0) */ + #define UART_UART_MIS_REG_RIMMIS_Msk (0x1UL) /*!< RIMMIS (Bitfield-Mask: 0x01) */ +/* ===================================================== UART_RIS_REG ====================================================== */ + #define UART_UART_RIS_REG_OERIS_Pos (10UL) /*!< OERIS (Bit 10) */ + #define UART_UART_RIS_REG_OERIS_Msk (0x400UL) /*!< OERIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_BERIS_Pos (9UL) /*!< BERIS (Bit 9) */ + #define UART_UART_RIS_REG_BERIS_Msk (0x200UL) /*!< BERIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_PERIS_Pos (8UL) /*!< PERIS (Bit 8) */ + #define UART_UART_RIS_REG_PERIS_Msk (0x100UL) /*!< PERIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_FERIS_Pos (7UL) /*!< FERIS (Bit 7) */ + #define UART_UART_RIS_REG_FERIS_Msk (0x80UL) /*!< FERIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_RTRIS_Pos (6UL) /*!< RTRIS (Bit 6) */ + #define UART_UART_RIS_REG_RTRIS_Msk (0x40UL) /*!< RTRIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_TXRIS_Pos (5UL) /*!< TXRIS (Bit 5) */ + #define UART_UART_RIS_REG_TXRIS_Msk (0x20UL) /*!< TXRIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_RXRIS_Pos (4UL) /*!< RXRIS (Bit 4) */ + #define UART_UART_RIS_REG_RXRIS_Msk (0x10UL) /*!< RXRIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_DSRRMIS_Pos (3UL) /*!< DSRRMIS (Bit 3) */ + #define UART_UART_RIS_REG_DSRRMIS_Msk (0x8UL) /*!< DSRRMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_DCDRMIS_Pos (2UL) /*!< DCDRMIS (Bit 2) */ + #define UART_UART_RIS_REG_DCDRMIS_Msk (0x4UL) /*!< DCDRMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_CTSRMIS_Pos (1UL) /*!< CTSRMIS (Bit 1) */ + #define UART_UART_RIS_REG_CTSRMIS_Msk (0x2UL) /*!< CTSRMIS (Bitfield-Mask: 0x01) */ + #define UART_UART_RIS_REG_RIRMIS_Pos (0UL) /*!< RIRMIS (Bit 0) */ + #define UART_UART_RIS_REG_RIRMIS_Msk (0x1UL) /*!< RIRMIS (Bitfield-Mask: 0x01) */ +/* =================================================== UART_RS485EN_REG ==================================================== */ + #define UART_UART_RS485EN_REG_RS485E_Pos (0UL) /*!< RS485E (Bit 0) */ + #define UART_UART_RS485EN_REG_RS485E_Msk (0x1UL) /*!< RS485E (Bitfield-Mask: 0x01) */ +/* ===================================================== UART_RSR_REG ====================================================== */ + #define UART_UART_RSR_REG_RSR_OE_Pos (3UL) /*!< RSR_OE (Bit 3) */ + #define UART_UART_RSR_REG_RSR_OE_Msk (0x8UL) /*!< RSR_OE (Bitfield-Mask: 0x01) */ + #define UART_UART_RSR_REG_RSR_BE_Pos (2UL) /*!< RSR_BE (Bit 2) */ + #define UART_UART_RSR_REG_RSR_BE_Msk (0x4UL) /*!< RSR_BE (Bitfield-Mask: 0x01) */ + #define UART_UART_RSR_REG_RSR_PE_Pos (1UL) /*!< RSR_PE (Bit 1) */ + #define UART_UART_RSR_REG_RSR_PE_Msk (0x2UL) /*!< RSR_PE (Bitfield-Mask: 0x01) */ + #define UART_UART_RSR_REG_RSR_FE_Pos (0UL) /*!< RSR_FE (Bit 0) */ + #define UART_UART_RSR_REG_RSR_FE_Msk (0x1UL) /*!< RSR_FE (Bitfield-Mask: 0x01) */ +/* ===================================================== UART_SWFC_REG ===================================================== */ + #define UART_UART_SWFC_REG_SWFCE_Pos (0UL) /*!< SWFCE (Bit 0) */ + #define UART_UART_SWFC_REG_SWFCE_Msk (0x1UL) /*!< SWFCE (Bitfield-Mask: 0x01) */ +/* ====================================================== UART_WA_REG ====================================================== */ + #define UART_UART_WA_REG_WAE_Pos (0UL) /*!< WAE (Bit 0) */ + #define UART_UART_WA_REG_WAE_Msk (0x1UL) /*!< WAE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ UART2 ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== UART2_CR_REG ====================================================== */ + #define UART2_UART2_CR_REG_CTSEn_Pos (15UL) /*!< CTSEn (Bit 15) */ + #define UART2_UART2_CR_REG_CTSEn_Msk (0x8000UL) /*!< CTSEn (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_RTSEn_Pos (14UL) /*!< RTSEn (Bit 14) */ + #define UART2_UART2_CR_REG_RTSEn_Msk (0x4000UL) /*!< RTSEn (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_Out2_Pos (13UL) /*!< Out2 (Bit 13) */ + #define UART2_UART2_CR_REG_Out2_Msk (0x2000UL) /*!< Out2 (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_Out1_Pos (12UL) /*!< Out1 (Bit 12) */ + #define UART2_UART2_CR_REG_Out1_Msk (0x1000UL) /*!< Out1 (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_RTS_Pos (11UL) /*!< RTS (Bit 11) */ + #define UART2_UART2_CR_REG_RTS_Msk (0x800UL) /*!< RTS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_DTR_Pos (10UL) /*!< DTR (Bit 10) */ + #define UART2_UART2_CR_REG_DTR_Msk (0x400UL) /*!< DTR (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_RXE_Pos (9UL) /*!< RXE (Bit 9) */ + #define UART2_UART2_CR_REG_RXE_Msk (0x200UL) /*!< RXE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_TXE_Pos (8UL) /*!< TXE (Bit 8) */ + #define UART2_UART2_CR_REG_TXE_Msk (0x100UL) /*!< TXE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_LBE_Pos (7UL) /*!< LBE (Bit 7) */ + #define UART2_UART2_CR_REG_LBE_Msk (0x80UL) /*!< LBE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_CR_REG_UARTEN_Pos (0UL) /*!< UARTEN (Bit 0) */ + #define UART2_UART2_CR_REG_UARTEN_Msk (0x1UL) /*!< UARTEN (Bitfield-Mask: 0x01) */ +/* ==================================================== UART2_DMACR_REG ==================================================== */ + #define UART2_UART2_DMACR_REG_DMAONERR_Pos (2UL) /*!< DMAONERR (Bit 2) */ + #define UART2_UART2_DMACR_REG_DMAONERR_Msk (0x4UL) /*!< DMAONERR (Bitfield-Mask: 0x01) */ + #define UART2_UART2_DMACR_REG_TXDMAE_Pos (1UL) /*!< TXDMAE (Bit 1) */ + #define UART2_UART2_DMACR_REG_TXDMAE_Msk (0x2UL) /*!< TXDMAE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_DMACR_REG_RXDMAE_Pos (0UL) /*!< RXDMAE (Bit 0) */ + #define UART2_UART2_DMACR_REG_RXDMAE_Msk (0x1UL) /*!< RXDMAE (Bitfield-Mask: 0x01) */ +/* ===================================================== UART2_DR_REG ====================================================== */ + #define UART2_UART2_DR_REG_DR_OE_Pos (11UL) /*!< DR_OE (Bit 11) */ + #define UART2_UART2_DR_REG_DR_OE_Msk (0x800UL) /*!< DR_OE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_DR_REG_DR_BE_Pos (10UL) /*!< DR_BE (Bit 10) */ + #define UART2_UART2_DR_REG_DR_BE_Msk (0x400UL) /*!< DR_BE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_DR_REG_DR_PE_Pos (9UL) /*!< DR_PE (Bit 9) */ + #define UART2_UART2_DR_REG_DR_PE_Msk (0x200UL) /*!< DR_PE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_DR_REG_DR_FE_Pos (8UL) /*!< DR_FE (Bit 8) */ + #define UART2_UART2_DR_REG_DR_FE_Msk (0x100UL) /*!< DR_FE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_DR_REG_DR_DATA_Pos (0UL) /*!< DR_DATA (Bit 0) */ + #define UART2_UART2_DR_REG_DR_DATA_Msk (0xffUL) /*!< DR_DATA (Bitfield-Mask: 0xff) */ +/* ==================================================== UART2_FBRD_REG ===================================================== */ + #define UART2_UART2_FBRD_REG_BAUD_DIVFRAC_Pos (0UL) /*!< BAUD_DIVFRAC (Bit 0) */ + #define UART2_UART2_FBRD_REG_BAUD_DIVFRAC_Msk (0x3fUL) /*!< BAUD_DIVFRAC (Bitfield-Mask: 0x3f) */ +/* ===================================================== UART2_FR_REG ====================================================== */ + #define UART2_UART2_FR_REG_RI_Pos (8UL) /*!< RI (Bit 8) */ + #define UART2_UART2_FR_REG_RI_Msk (0x100UL) /*!< RI (Bitfield-Mask: 0x01) */ + #define UART2_UART2_FR_REG_TXFE_Pos (7UL) /*!< TXFE (Bit 7) */ + #define UART2_UART2_FR_REG_TXFE_Msk (0x80UL) /*!< TXFE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_FR_REG_RXFF_Pos (6UL) /*!< RXFF (Bit 6) */ + #define UART2_UART2_FR_REG_RXFF_Msk (0x40UL) /*!< RXFF (Bitfield-Mask: 0x01) */ + #define UART2_UART2_FR_REG_TXFF_Pos (5UL) /*!< TXFF (Bit 5) */ + #define UART2_UART2_FR_REG_TXFF_Msk (0x20UL) /*!< TXFF (Bitfield-Mask: 0x01) */ + #define UART2_UART2_FR_REG_RXFE_Pos (4UL) /*!< RXFE (Bit 4) */ + #define UART2_UART2_FR_REG_RXFE_Msk (0x10UL) /*!< RXFE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_FR_REG_BUSY_Pos (3UL) /*!< BUSY (Bit 3) */ + #define UART2_UART2_FR_REG_BUSY_Msk (0x8UL) /*!< BUSY (Bitfield-Mask: 0x01) */ + #define UART2_UART2_FR_REG_DCD_Pos (2UL) /*!< DCD (Bit 2) */ + #define UART2_UART2_FR_REG_DCD_Msk (0x4UL) /*!< DCD (Bitfield-Mask: 0x01) */ + #define UART2_UART2_FR_REG_DSR_Pos (1UL) /*!< DSR (Bit 1) */ + #define UART2_UART2_FR_REG_DSR_Msk (0x2UL) /*!< DSR (Bitfield-Mask: 0x01) */ + #define UART2_UART2_FR_REG_CTS_Pos (0UL) /*!< CTS (Bit 0) */ + #define UART2_UART2_FR_REG_CTS_Msk (0x1UL) /*!< CTS (Bitfield-Mask: 0x01) */ +/* ==================================================== UART2_IBRD_REG ===================================================== */ + #define UART2_UART2_IBRD_REG_BAUD_DIVINT_Pos (0UL) /*!< BAUD_DIVINT (Bit 0) */ + #define UART2_UART2_IBRD_REG_BAUD_DIVINT_Msk (0xffffUL) /*!< BAUD_DIVINT (Bitfield-Mask: 0xffff) */ +/* ===================================================== UART2_ICR_REG ===================================================== */ + #define UART2_UART2_ICR_REG_OEIC_Pos (10UL) /*!< OEIC (Bit 10) */ + #define UART2_UART2_ICR_REG_OEIC_Msk (0x400UL) /*!< OEIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_BEIC_Pos (9UL) /*!< BEIC (Bit 9) */ + #define UART2_UART2_ICR_REG_BEIC_Msk (0x200UL) /*!< BEIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_PEIC_Pos (8UL) /*!< PEIC (Bit 8) */ + #define UART2_UART2_ICR_REG_PEIC_Msk (0x100UL) /*!< PEIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_FEIC_Pos (7UL) /*!< FEIC (Bit 7) */ + #define UART2_UART2_ICR_REG_FEIC_Msk (0x80UL) /*!< FEIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_RTIC_Pos (6UL) /*!< RTIC (Bit 6) */ + #define UART2_UART2_ICR_REG_RTIC_Msk (0x40UL) /*!< RTIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_TXIC_Pos (5UL) /*!< TXIC (Bit 5) */ + #define UART2_UART2_ICR_REG_TXIC_Msk (0x20UL) /*!< TXIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_RXIC_Pos (4UL) /*!< RXIC (Bit 4) */ + #define UART2_UART2_ICR_REG_RXIC_Msk (0x10UL) /*!< RXIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_DSRMIC_Pos (3UL) /*!< DSRMIC (Bit 3) */ + #define UART2_UART2_ICR_REG_DSRMIC_Msk (0x8UL) /*!< DSRMIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_DCDMIC_Pos (2UL) /*!< DCDMIC (Bit 2) */ + #define UART2_UART2_ICR_REG_DCDMIC_Msk (0x4UL) /*!< DCDMIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_CTSMIC_Pos (1UL) /*!< CTSMIC (Bit 1) */ + #define UART2_UART2_ICR_REG_CTSMIC_Msk (0x2UL) /*!< CTSMIC (Bitfield-Mask: 0x01) */ + #define UART2_UART2_ICR_REG_RIMIC_Pos (0UL) /*!< RIMIC (Bit 0) */ + #define UART2_UART2_ICR_REG_RIMIC_Msk (0x1UL) /*!< RIMIC (Bitfield-Mask: 0x01) */ +/* ==================================================== UART2_IFLS_REG ===================================================== */ + #define UART2_UART2_IFLS_REG_RXIFLSEL_Pos (3UL) /*!< RXIFLSEL (Bit 3) */ + #define UART2_UART2_IFLS_REG_RXIFLSEL_Msk (0x38UL) /*!< RXIFLSEL (Bitfield-Mask: 0x07) */ + #define UART2_UART2_IFLS_REG_TXIFLSEL_Pos (0UL) /*!< TXIFLSEL (Bit 0) */ + #define UART2_UART2_IFLS_REG_TXIFLSEL_Msk (0x7UL) /*!< TXIFLSEL (Bitfield-Mask: 0x07) */ +/* ==================================================== UART2_IMSC_REG ===================================================== */ + #define UART2_UART2_IMSC_REG_OEIM_Pos (10UL) /*!< OEIM (Bit 10) */ + #define UART2_UART2_IMSC_REG_OEIM_Msk (0x400UL) /*!< OEIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_BEIM_Pos (9UL) /*!< BEIM (Bit 9) */ + #define UART2_UART2_IMSC_REG_BEIM_Msk (0x200UL) /*!< BEIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_PEIM_Pos (8UL) /*!< PEIM (Bit 8) */ + #define UART2_UART2_IMSC_REG_PEIM_Msk (0x100UL) /*!< PEIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_FEIM_Pos (7UL) /*!< FEIM (Bit 7) */ + #define UART2_UART2_IMSC_REG_FEIM_Msk (0x80UL) /*!< FEIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_RTIM_Pos (6UL) /*!< RTIM (Bit 6) */ + #define UART2_UART2_IMSC_REG_RTIM_Msk (0x40UL) /*!< RTIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_TXIM_Pos (5UL) /*!< TXIM (Bit 5) */ + #define UART2_UART2_IMSC_REG_TXIM_Msk (0x20UL) /*!< TXIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_RXIM_Pos (4UL) /*!< RXIM (Bit 4) */ + #define UART2_UART2_IMSC_REG_RXIM_Msk (0x10UL) /*!< RXIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_DSRMIM_Pos (3UL) /*!< DSRMIM (Bit 3) */ + #define UART2_UART2_IMSC_REG_DSRMIM_Msk (0x8UL) /*!< DSRMIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_DCDMIM_Pos (2UL) /*!< DCDMIM (Bit 2) */ + #define UART2_UART2_IMSC_REG_DCDMIM_Msk (0x4UL) /*!< DCDMIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_CTSMIM_Pos (1UL) /*!< CTSMIM (Bit 1) */ + #define UART2_UART2_IMSC_REG_CTSMIM_Msk (0x2UL) /*!< CTSMIM (Bitfield-Mask: 0x01) */ + #define UART2_UART2_IMSC_REG_RIMIM_Pos (0UL) /*!< RIMIM (Bit 0) */ + #define UART2_UART2_IMSC_REG_RIMIM_Msk (0x1UL) /*!< RIMIM (Bitfield-Mask: 0x01) */ +/* ==================================================== UART2_LCR_H_REG ==================================================== */ + #define UART2_UART2_LCR_H_REG_SPS_Pos (7UL) /*!< SPS (Bit 7) */ + #define UART2_UART2_LCR_H_REG_SPS_Msk (0x80UL) /*!< SPS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_LCR_H_REG_WLEN_Pos (5UL) /*!< WLEN (Bit 5) */ + #define UART2_UART2_LCR_H_REG_WLEN_Msk (0x60UL) /*!< WLEN (Bitfield-Mask: 0x03) */ + #define UART2_UART2_LCR_H_REG_FEN_Pos (4UL) /*!< FEN (Bit 4) */ + #define UART2_UART2_LCR_H_REG_FEN_Msk (0x10UL) /*!< FEN (Bitfield-Mask: 0x01) */ + #define UART2_UART2_LCR_H_REG_STP2_Pos (3UL) /*!< STP2 (Bit 3) */ + #define UART2_UART2_LCR_H_REG_STP2_Msk (0x8UL) /*!< STP2 (Bitfield-Mask: 0x01) */ + #define UART2_UART2_LCR_H_REG_EPS_Pos (2UL) /*!< EPS (Bit 2) */ + #define UART2_UART2_LCR_H_REG_EPS_Msk (0x4UL) /*!< EPS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_LCR_H_REG_PEN_Pos (1UL) /*!< PEN (Bit 1) */ + #define UART2_UART2_LCR_H_REG_PEN_Msk (0x2UL) /*!< PEN (Bitfield-Mask: 0x01) */ + #define UART2_UART2_LCR_H_REG_BRK_Pos (0UL) /*!< BRK (Bit 0) */ + #define UART2_UART2_LCR_H_REG_BRK_Msk (0x1UL) /*!< BRK (Bitfield-Mask: 0x01) */ +/* ===================================================== UART2_MIS_REG ===================================================== */ + #define UART2_UART2_MIS_REG_OEMIS_Pos (10UL) /*!< OEMIS (Bit 10) */ + #define UART2_UART2_MIS_REG_OEMIS_Msk (0x400UL) /*!< OEMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_BEMIS_Pos (9UL) /*!< BEMIS (Bit 9) */ + #define UART2_UART2_MIS_REG_BEMIS_Msk (0x200UL) /*!< BEMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_PEMIS_Pos (8UL) /*!< PEMIS (Bit 8) */ + #define UART2_UART2_MIS_REG_PEMIS_Msk (0x100UL) /*!< PEMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_FEMIS_Pos (7UL) /*!< FEMIS (Bit 7) */ + #define UART2_UART2_MIS_REG_FEMIS_Msk (0x80UL) /*!< FEMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_RTMIS_Pos (6UL) /*!< RTMIS (Bit 6) */ + #define UART2_UART2_MIS_REG_RTMIS_Msk (0x40UL) /*!< RTMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_TXMIS_Pos (5UL) /*!< TXMIS (Bit 5) */ + #define UART2_UART2_MIS_REG_TXMIS_Msk (0x20UL) /*!< TXMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_RXMIS_Pos (4UL) /*!< RXMIS (Bit 4) */ + #define UART2_UART2_MIS_REG_RXMIS_Msk (0x10UL) /*!< RXMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_DSRMMIS_Pos (3UL) /*!< DSRMMIS (Bit 3) */ + #define UART2_UART2_MIS_REG_DSRMMIS_Msk (0x8UL) /*!< DSRMMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_DCDMMIS_Pos (2UL) /*!< DCDMMIS (Bit 2) */ + #define UART2_UART2_MIS_REG_DCDMMIS_Msk (0x4UL) /*!< DCDMMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_CTSMMIS_Pos (1UL) /*!< CTSMMIS (Bit 1) */ + #define UART2_UART2_MIS_REG_CTSMMIS_Msk (0x2UL) /*!< CTSMMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_MIS_REG_RIMMIS_Pos (0UL) /*!< RIMMIS (Bit 0) */ + #define UART2_UART2_MIS_REG_RIMMIS_Msk (0x1UL) /*!< RIMMIS (Bitfield-Mask: 0x01) */ +/* ===================================================== UART2_RIS_REG ===================================================== */ + #define UART2_UART2_RIS_REG_OERIS_Pos (10UL) /*!< OERIS (Bit 10) */ + #define UART2_UART2_RIS_REG_OERIS_Msk (0x400UL) /*!< OERIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_BERIS_Pos (9UL) /*!< BERIS (Bit 9) */ + #define UART2_UART2_RIS_REG_BERIS_Msk (0x200UL) /*!< BERIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_PERIS_Pos (8UL) /*!< PERIS (Bit 8) */ + #define UART2_UART2_RIS_REG_PERIS_Msk (0x100UL) /*!< PERIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_FERIS_Pos (7UL) /*!< FERIS (Bit 7) */ + #define UART2_UART2_RIS_REG_FERIS_Msk (0x80UL) /*!< FERIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_RTRIS_Pos (6UL) /*!< RTRIS (Bit 6) */ + #define UART2_UART2_RIS_REG_RTRIS_Msk (0x40UL) /*!< RTRIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_TXRIS_Pos (5UL) /*!< TXRIS (Bit 5) */ + #define UART2_UART2_RIS_REG_TXRIS_Msk (0x20UL) /*!< TXRIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_RXRIS_Pos (4UL) /*!< RXRIS (Bit 4) */ + #define UART2_UART2_RIS_REG_RXRIS_Msk (0x10UL) /*!< RXRIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_DSRRMIS_Pos (3UL) /*!< DSRRMIS (Bit 3) */ + #define UART2_UART2_RIS_REG_DSRRMIS_Msk (0x8UL) /*!< DSRRMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_DCDRMIS_Pos (2UL) /*!< DCDRMIS (Bit 2) */ + #define UART2_UART2_RIS_REG_DCDRMIS_Msk (0x4UL) /*!< DCDRMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_CTSRMIS_Pos (1UL) /*!< CTSRMIS (Bit 1) */ + #define UART2_UART2_RIS_REG_CTSRMIS_Msk (0x2UL) /*!< CTSRMIS (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RIS_REG_RIRMIS_Pos (0UL) /*!< RIRMIS (Bit 0) */ + #define UART2_UART2_RIS_REG_RIRMIS_Msk (0x1UL) /*!< RIRMIS (Bitfield-Mask: 0x01) */ +/* =================================================== UART2_RS485EN_REG =================================================== */ + #define UART2_UART2_RS485EN_REG_RS485E_Pos (0UL) /*!< RS485E (Bit 0) */ + #define UART2_UART2_RS485EN_REG_RS485E_Msk (0x1UL) /*!< RS485E (Bitfield-Mask: 0x01) */ +/* ===================================================== UART2_RSR_REG ===================================================== */ + #define UART2_UART2_RSR_REG_RSR_OE_Pos (3UL) /*!< RSR_OE (Bit 3) */ + #define UART2_UART2_RSR_REG_RSR_OE_Msk (0x8UL) /*!< RSR_OE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RSR_REG_RSR_BE_Pos (2UL) /*!< RSR_BE (Bit 2) */ + #define UART2_UART2_RSR_REG_RSR_BE_Msk (0x4UL) /*!< RSR_BE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RSR_REG_RSR_PE_Pos (1UL) /*!< RSR_PE (Bit 1) */ + #define UART2_UART2_RSR_REG_RSR_PE_Msk (0x2UL) /*!< RSR_PE (Bitfield-Mask: 0x01) */ + #define UART2_UART2_RSR_REG_RSR_FE_Pos (0UL) /*!< RSR_FE (Bit 0) */ + #define UART2_UART2_RSR_REG_RSR_FE_Msk (0x1UL) /*!< RSR_FE (Bitfield-Mask: 0x01) */ +/* ==================================================== UART2_SWFC_REG ===================================================== */ + #define UART2_UART2_SWFC_REG_SWFCE_Pos (0UL) /*!< SWFCE (Bit 0) */ + #define UART2_UART2_SWFC_REG_SWFCE_Msk (0x1UL) /*!< SWFCE (Bitfield-Mask: 0x01) */ +/* ===================================================== UART2_WA_REG ====================================================== */ + #define UART2_UART2_WA_REG_WAE_Pos (0UL) /*!< WAE (Bit 0) */ + #define UART2_UART2_WA_REG_WAE_Msk (0x1UL) /*!< WAE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ UART3 ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== UART3_CR_REG ====================================================== */ + #define UART3_UART3_CR_REG_CTSEn_Pos (15UL) /*!< CTSEn (Bit 15) */ + #define UART3_UART3_CR_REG_CTSEn_Msk (0x8000UL) /*!< CTSEn (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_RTSEn_Pos (14UL) /*!< RTSEn (Bit 14) */ + #define UART3_UART3_CR_REG_RTSEn_Msk (0x4000UL) /*!< RTSEn (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_Out2_Pos (13UL) /*!< Out2 (Bit 13) */ + #define UART3_UART3_CR_REG_Out2_Msk (0x2000UL) /*!< Out2 (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_Out1_Pos (12UL) /*!< Out1 (Bit 12) */ + #define UART3_UART3_CR_REG_Out1_Msk (0x1000UL) /*!< Out1 (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_RTS_Pos (11UL) /*!< RTS (Bit 11) */ + #define UART3_UART3_CR_REG_RTS_Msk (0x800UL) /*!< RTS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_DTR_Pos (10UL) /*!< DTR (Bit 10) */ + #define UART3_UART3_CR_REG_DTR_Msk (0x400UL) /*!< DTR (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_RXE_Pos (9UL) /*!< RXE (Bit 9) */ + #define UART3_UART3_CR_REG_RXE_Msk (0x200UL) /*!< RXE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_TXE_Pos (8UL) /*!< TXE (Bit 8) */ + #define UART3_UART3_CR_REG_TXE_Msk (0x100UL) /*!< TXE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_LBE_Pos (7UL) /*!< LBE (Bit 7) */ + #define UART3_UART3_CR_REG_LBE_Msk (0x80UL) /*!< LBE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_CR_REG_UARTEN_Pos (0UL) /*!< UARTEN (Bit 0) */ + #define UART3_UART3_CR_REG_UARTEN_Msk (0x1UL) /*!< UARTEN (Bitfield-Mask: 0x01) */ +/* ==================================================== UART3_DMACR_REG ==================================================== */ + #define UART3_UART3_DMACR_REG_DMAONERR_Pos (2UL) /*!< DMAONERR (Bit 2) */ + #define UART3_UART3_DMACR_REG_DMAONERR_Msk (0x4UL) /*!< DMAONERR (Bitfield-Mask: 0x01) */ + #define UART3_UART3_DMACR_REG_TXDMAE_Pos (1UL) /*!< TXDMAE (Bit 1) */ + #define UART3_UART3_DMACR_REG_TXDMAE_Msk (0x2UL) /*!< TXDMAE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_DMACR_REG_RXDMAE_Pos (0UL) /*!< RXDMAE (Bit 0) */ + #define UART3_UART3_DMACR_REG_RXDMAE_Msk (0x1UL) /*!< RXDMAE (Bitfield-Mask: 0x01) */ +/* ===================================================== UART3_DR_REG ====================================================== */ + #define UART3_UART3_DR_REG_DR_OE_Pos (11UL) /*!< DR_OE (Bit 11) */ + #define UART3_UART3_DR_REG_DR_OE_Msk (0x800UL) /*!< DR_OE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_DR_REG_DR_BE_Pos (10UL) /*!< DR_BE (Bit 10) */ + #define UART3_UART3_DR_REG_DR_BE_Msk (0x400UL) /*!< DR_BE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_DR_REG_DR_PE_Pos (9UL) /*!< DR_PE (Bit 9) */ + #define UART3_UART3_DR_REG_DR_PE_Msk (0x200UL) /*!< DR_PE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_DR_REG_DR_FE_Pos (8UL) /*!< DR_FE (Bit 8) */ + #define UART3_UART3_DR_REG_DR_FE_Msk (0x100UL) /*!< DR_FE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_DR_REG_DR_DATA_Pos (0UL) /*!< DR_DATA (Bit 0) */ + #define UART3_UART3_DR_REG_DR_DATA_Msk (0xffUL) /*!< DR_DATA (Bitfield-Mask: 0xff) */ +/* ==================================================== UART3_FBRD_REG ===================================================== */ + #define UART3_UART3_FBRD_REG_BAUD_DIVFRAC_Pos (0UL) /*!< BAUD_DIVFRAC (Bit 0) */ + #define UART3_UART3_FBRD_REG_BAUD_DIVFRAC_Msk (0x3fUL) /*!< BAUD_DIVFRAC (Bitfield-Mask: 0x3f) */ +/* ===================================================== UART3_FR_REG ====================================================== */ + #define UART3_UART3_FR_REG_RI_Pos (8UL) /*!< RI (Bit 8) */ + #define UART3_UART3_FR_REG_RI_Msk (0x100UL) /*!< RI (Bitfield-Mask: 0x01) */ + #define UART3_UART3_FR_REG_TXFE_Pos (7UL) /*!< TXFE (Bit 7) */ + #define UART3_UART3_FR_REG_TXFE_Msk (0x80UL) /*!< TXFE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_FR_REG_RXFF_Pos (6UL) /*!< RXFF (Bit 6) */ + #define UART3_UART3_FR_REG_RXFF_Msk (0x40UL) /*!< RXFF (Bitfield-Mask: 0x01) */ + #define UART3_UART3_FR_REG_TXFF_Pos (5UL) /*!< TXFF (Bit 5) */ + #define UART3_UART3_FR_REG_TXFF_Msk (0x20UL) /*!< TXFF (Bitfield-Mask: 0x01) */ + #define UART3_UART3_FR_REG_RXFE_Pos (4UL) /*!< RXFE (Bit 4) */ + #define UART3_UART3_FR_REG_RXFE_Msk (0x10UL) /*!< RXFE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_FR_REG_BUSY_Pos (3UL) /*!< BUSY (Bit 3) */ + #define UART3_UART3_FR_REG_BUSY_Msk (0x8UL) /*!< BUSY (Bitfield-Mask: 0x01) */ + #define UART3_UART3_FR_REG_DCD_Pos (2UL) /*!< DCD (Bit 2) */ + #define UART3_UART3_FR_REG_DCD_Msk (0x4UL) /*!< DCD (Bitfield-Mask: 0x01) */ + #define UART3_UART3_FR_REG_DSR_Pos (1UL) /*!< DSR (Bit 1) */ + #define UART3_UART3_FR_REG_DSR_Msk (0x2UL) /*!< DSR (Bitfield-Mask: 0x01) */ + #define UART3_UART3_FR_REG_CTS_Pos (0UL) /*!< CTS (Bit 0) */ + #define UART3_UART3_FR_REG_CTS_Msk (0x1UL) /*!< CTS (Bitfield-Mask: 0x01) */ +/* ==================================================== UART3_IBRD_REG ===================================================== */ + #define UART3_UART3_IBRD_REG_BAUD_DIVINT_Pos (0UL) /*!< BAUD_DIVINT (Bit 0) */ + #define UART3_UART3_IBRD_REG_BAUD_DIVINT_Msk (0xffffUL) /*!< BAUD_DIVINT (Bitfield-Mask: 0xffff) */ +/* ===================================================== UART3_ICR_REG ===================================================== */ + #define UART3_UART3_ICR_REG_OEIC_Pos (10UL) /*!< OEIC (Bit 10) */ + #define UART3_UART3_ICR_REG_OEIC_Msk (0x400UL) /*!< OEIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_BEIC_Pos (9UL) /*!< BEIC (Bit 9) */ + #define UART3_UART3_ICR_REG_BEIC_Msk (0x200UL) /*!< BEIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_PEIC_Pos (8UL) /*!< PEIC (Bit 8) */ + #define UART3_UART3_ICR_REG_PEIC_Msk (0x100UL) /*!< PEIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_FEIC_Pos (7UL) /*!< FEIC (Bit 7) */ + #define UART3_UART3_ICR_REG_FEIC_Msk (0x80UL) /*!< FEIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_RTIC_Pos (6UL) /*!< RTIC (Bit 6) */ + #define UART3_UART3_ICR_REG_RTIC_Msk (0x40UL) /*!< RTIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_TXIC_Pos (5UL) /*!< TXIC (Bit 5) */ + #define UART3_UART3_ICR_REG_TXIC_Msk (0x20UL) /*!< TXIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_RXIC_Pos (4UL) /*!< RXIC (Bit 4) */ + #define UART3_UART3_ICR_REG_RXIC_Msk (0x10UL) /*!< RXIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_DSRMIC_Pos (3UL) /*!< DSRMIC (Bit 3) */ + #define UART3_UART3_ICR_REG_DSRMIC_Msk (0x8UL) /*!< DSRMIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_DCDMIC_Pos (2UL) /*!< DCDMIC (Bit 2) */ + #define UART3_UART3_ICR_REG_DCDMIC_Msk (0x4UL) /*!< DCDMIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_CTSMIC_Pos (1UL) /*!< CTSMIC (Bit 1) */ + #define UART3_UART3_ICR_REG_CTSMIC_Msk (0x2UL) /*!< CTSMIC (Bitfield-Mask: 0x01) */ + #define UART3_UART3_ICR_REG_RIMIC_Pos (0UL) /*!< RIMIC (Bit 0) */ + #define UART3_UART3_ICR_REG_RIMIC_Msk (0x1UL) /*!< RIMIC (Bitfield-Mask: 0x01) */ +/* ==================================================== UART3_IFLS_REG ===================================================== */ + #define UART3_UART3_IFLS_REG_RXIFLSEL_Pos (3UL) /*!< RXIFLSEL (Bit 3) */ + #define UART3_UART3_IFLS_REG_RXIFLSEL_Msk (0x38UL) /*!< RXIFLSEL (Bitfield-Mask: 0x07) */ + #define UART3_UART3_IFLS_REG_TXIFLSEL_Pos (0UL) /*!< TXIFLSEL (Bit 0) */ + #define UART3_UART3_IFLS_REG_TXIFLSEL_Msk (0x7UL) /*!< TXIFLSEL (Bitfield-Mask: 0x07) */ +/* ==================================================== UART3_IMSC_REG ===================================================== */ + #define UART3_UART3_IMSC_REG_OEIM_Pos (10UL) /*!< OEIM (Bit 10) */ + #define UART3_UART3_IMSC_REG_OEIM_Msk (0x400UL) /*!< OEIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_BEIM_Pos (9UL) /*!< BEIM (Bit 9) */ + #define UART3_UART3_IMSC_REG_BEIM_Msk (0x200UL) /*!< BEIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_PEIM_Pos (8UL) /*!< PEIM (Bit 8) */ + #define UART3_UART3_IMSC_REG_PEIM_Msk (0x100UL) /*!< PEIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_FEIM_Pos (7UL) /*!< FEIM (Bit 7) */ + #define UART3_UART3_IMSC_REG_FEIM_Msk (0x80UL) /*!< FEIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_RTIM_Pos (6UL) /*!< RTIM (Bit 6) */ + #define UART3_UART3_IMSC_REG_RTIM_Msk (0x40UL) /*!< RTIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_TXIM_Pos (5UL) /*!< TXIM (Bit 5) */ + #define UART3_UART3_IMSC_REG_TXIM_Msk (0x20UL) /*!< TXIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_RXIM_Pos (4UL) /*!< RXIM (Bit 4) */ + #define UART3_UART3_IMSC_REG_RXIM_Msk (0x10UL) /*!< RXIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_DSRMIM_Pos (3UL) /*!< DSRMIM (Bit 3) */ + #define UART3_UART3_IMSC_REG_DSRMIM_Msk (0x8UL) /*!< DSRMIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_DCDMIM_Pos (2UL) /*!< DCDMIM (Bit 2) */ + #define UART3_UART3_IMSC_REG_DCDMIM_Msk (0x4UL) /*!< DCDMIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_CTSMIM_Pos (1UL) /*!< CTSMIM (Bit 1) */ + #define UART3_UART3_IMSC_REG_CTSMIM_Msk (0x2UL) /*!< CTSMIM (Bitfield-Mask: 0x01) */ + #define UART3_UART3_IMSC_REG_RIMIM_Pos (0UL) /*!< RIMIM (Bit 0) */ + #define UART3_UART3_IMSC_REG_RIMIM_Msk (0x1UL) /*!< RIMIM (Bitfield-Mask: 0x01) */ +/* ==================================================== UART3_LCR_H_REG ==================================================== */ + #define UART3_UART3_LCR_H_REG_SPS_Pos (7UL) /*!< SPS (Bit 7) */ + #define UART3_UART3_LCR_H_REG_SPS_Msk (0x80UL) /*!< SPS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_LCR_H_REG_WLEN_Pos (5UL) /*!< WLEN (Bit 5) */ + #define UART3_UART3_LCR_H_REG_WLEN_Msk (0x60UL) /*!< WLEN (Bitfield-Mask: 0x03) */ + #define UART3_UART3_LCR_H_REG_FEN_Pos (4UL) /*!< FEN (Bit 4) */ + #define UART3_UART3_LCR_H_REG_FEN_Msk (0x10UL) /*!< FEN (Bitfield-Mask: 0x01) */ + #define UART3_UART3_LCR_H_REG_STP2_Pos (3UL) /*!< STP2 (Bit 3) */ + #define UART3_UART3_LCR_H_REG_STP2_Msk (0x8UL) /*!< STP2 (Bitfield-Mask: 0x01) */ + #define UART3_UART3_LCR_H_REG_EPS_Pos (2UL) /*!< EPS (Bit 2) */ + #define UART3_UART3_LCR_H_REG_EPS_Msk (0x4UL) /*!< EPS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_LCR_H_REG_PEN_Pos (1UL) /*!< PEN (Bit 1) */ + #define UART3_UART3_LCR_H_REG_PEN_Msk (0x2UL) /*!< PEN (Bitfield-Mask: 0x01) */ + #define UART3_UART3_LCR_H_REG_BRK_Pos (0UL) /*!< BRK (Bit 0) */ + #define UART3_UART3_LCR_H_REG_BRK_Msk (0x1UL) /*!< BRK (Bitfield-Mask: 0x01) */ +/* ===================================================== UART3_MIS_REG ===================================================== */ + #define UART3_UART3_MIS_REG_OEMIS_Pos (10UL) /*!< OEMIS (Bit 10) */ + #define UART3_UART3_MIS_REG_OEMIS_Msk (0x400UL) /*!< OEMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_BEMIS_Pos (9UL) /*!< BEMIS (Bit 9) */ + #define UART3_UART3_MIS_REG_BEMIS_Msk (0x200UL) /*!< BEMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_PEMIS_Pos (8UL) /*!< PEMIS (Bit 8) */ + #define UART3_UART3_MIS_REG_PEMIS_Msk (0x100UL) /*!< PEMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_FEMIS_Pos (7UL) /*!< FEMIS (Bit 7) */ + #define UART3_UART3_MIS_REG_FEMIS_Msk (0x80UL) /*!< FEMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_RTMIS_Pos (6UL) /*!< RTMIS (Bit 6) */ + #define UART3_UART3_MIS_REG_RTMIS_Msk (0x40UL) /*!< RTMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_TXMIS_Pos (5UL) /*!< TXMIS (Bit 5) */ + #define UART3_UART3_MIS_REG_TXMIS_Msk (0x20UL) /*!< TXMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_RXMIS_Pos (4UL) /*!< RXMIS (Bit 4) */ + #define UART3_UART3_MIS_REG_RXMIS_Msk (0x10UL) /*!< RXMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_DSRMMIS_Pos (3UL) /*!< DSRMMIS (Bit 3) */ + #define UART3_UART3_MIS_REG_DSRMMIS_Msk (0x8UL) /*!< DSRMMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_DCDMMIS_Pos (2UL) /*!< DCDMMIS (Bit 2) */ + #define UART3_UART3_MIS_REG_DCDMMIS_Msk (0x4UL) /*!< DCDMMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_CTSMMIS_Pos (1UL) /*!< CTSMMIS (Bit 1) */ + #define UART3_UART3_MIS_REG_CTSMMIS_Msk (0x2UL) /*!< CTSMMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_MIS_REG_RIMMIS_Pos (0UL) /*!< RIMMIS (Bit 0) */ + #define UART3_UART3_MIS_REG_RIMMIS_Msk (0x1UL) /*!< RIMMIS (Bitfield-Mask: 0x01) */ +/* ===================================================== UART3_RIS_REG ===================================================== */ + #define UART3_UART3_RIS_REG_OERIS_Pos (10UL) /*!< OERIS (Bit 10) */ + #define UART3_UART3_RIS_REG_OERIS_Msk (0x400UL) /*!< OERIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_BERIS_Pos (9UL) /*!< BERIS (Bit 9) */ + #define UART3_UART3_RIS_REG_BERIS_Msk (0x200UL) /*!< BERIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_PERIS_Pos (8UL) /*!< PERIS (Bit 8) */ + #define UART3_UART3_RIS_REG_PERIS_Msk (0x100UL) /*!< PERIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_FERIS_Pos (7UL) /*!< FERIS (Bit 7) */ + #define UART3_UART3_RIS_REG_FERIS_Msk (0x80UL) /*!< FERIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_RTRIS_Pos (6UL) /*!< RTRIS (Bit 6) */ + #define UART3_UART3_RIS_REG_RTRIS_Msk (0x40UL) /*!< RTRIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_TXRIS_Pos (5UL) /*!< TXRIS (Bit 5) */ + #define UART3_UART3_RIS_REG_TXRIS_Msk (0x20UL) /*!< TXRIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_RXRIS_Pos (4UL) /*!< RXRIS (Bit 4) */ + #define UART3_UART3_RIS_REG_RXRIS_Msk (0x10UL) /*!< RXRIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_DSRRMIS_Pos (3UL) /*!< DSRRMIS (Bit 3) */ + #define UART3_UART3_RIS_REG_DSRRMIS_Msk (0x8UL) /*!< DSRRMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_DCDRMIS_Pos (2UL) /*!< DCDRMIS (Bit 2) */ + #define UART3_UART3_RIS_REG_DCDRMIS_Msk (0x4UL) /*!< DCDRMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_CTSRMIS_Pos (1UL) /*!< CTSRMIS (Bit 1) */ + #define UART3_UART3_RIS_REG_CTSRMIS_Msk (0x2UL) /*!< CTSRMIS (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RIS_REG_RIRMIS_Pos (0UL) /*!< RIRMIS (Bit 0) */ + #define UART3_UART3_RIS_REG_RIRMIS_Msk (0x1UL) /*!< RIRMIS (Bitfield-Mask: 0x01) */ +/* =================================================== UART3_RS485EN_REG =================================================== */ + #define UART3_UART3_RS485EN_REG_RS485E_Pos (0UL) /*!< RS485E (Bit 0) */ + #define UART3_UART3_RS485EN_REG_RS485E_Msk (0x1UL) /*!< RS485E (Bitfield-Mask: 0x01) */ +/* ===================================================== UART3_RSR_REG ===================================================== */ + #define UART3_UART3_RSR_REG_RSR_OE_Pos (3UL) /*!< RSR_OE (Bit 3) */ + #define UART3_UART3_RSR_REG_RSR_OE_Msk (0x8UL) /*!< RSR_OE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RSR_REG_RSR_BE_Pos (2UL) /*!< RSR_BE (Bit 2) */ + #define UART3_UART3_RSR_REG_RSR_BE_Msk (0x4UL) /*!< RSR_BE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RSR_REG_RSR_PE_Pos (1UL) /*!< RSR_PE (Bit 1) */ + #define UART3_UART3_RSR_REG_RSR_PE_Msk (0x2UL) /*!< RSR_PE (Bitfield-Mask: 0x01) */ + #define UART3_UART3_RSR_REG_RSR_FE_Pos (0UL) /*!< RSR_FE (Bit 0) */ + #define UART3_UART3_RSR_REG_RSR_FE_Msk (0x1UL) /*!< RSR_FE (Bitfield-Mask: 0x01) */ +/* ==================================================== UART3_SWFC_REG ===================================================== */ + #define UART3_UART3_SWFC_REG_SWFCE_Pos (0UL) /*!< SWFCE (Bit 0) */ + #define UART3_UART3_SWFC_REG_SWFCE_Msk (0x1UL) /*!< SWFCE (Bitfield-Mask: 0x01) */ +/* ===================================================== UART3_WA_REG ====================================================== */ + #define UART3_UART3_WA_REG_WAE_Pos (0UL) /*!< WAE (Bit 0) */ + #define UART3_UART3_WA_REG_WAE_Msk (0x1UL) /*!< WAE (Bitfield-Mask: 0x01) */ + +/** @} */ /* End of group PosMask_peripherals */ + +/* =========================================================================================================================== */ +/* ================ Enumerated Values Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup EnumValue_peripherals + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ APU_AUD ================ */ +/* =========================================================================================================================== */ + +/* =================================================== APU_DMIC_CTRL_REG =================================================== */ +/* =================================================== APU_DMIC_DIV_REG ==================================================== */ +/* =================================================== APU_MAIN_DIV_REG ==================================================== */ +/* =================================================== APU_SYNC_DIV_REG ==================================================== */ +/* ================================================= APU_SYNC_DIV_SEL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ APU_DSP ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== APU_CTRL_REG ====================================================== */ +/* =================================================== APU_MUX_CTRL_REG ==================================================== */ +/* =================================================== APU_PCM1_DIV_REG ==================================================== */ +/* ================================================ APU_PCM1_FDIV_HIGH_REG ================================================= */ +/* =================================================== APU_PCM1_FDIV_REG =================================================== */ +/* ==================================================== APU_PCM_CLK_REG ==================================================== */ +/* ================================================ APU_SYNC_SRC1IN_SEL_REG ================================================ */ +/* =============================================== APU_SYNC_SRC1OUT_SEL_REG ================================================ */ + +/* =========================================================================================================================== */ +/* ================ AUXADC ================ */ +/* =========================================================================================================================== */ + +/* ================================================== FIFO0_DATA_CURR_REG ================================================== */ +/* ================================================== FIFO0_DMA_DATA_REG =================================================== */ +/* ================================================== FIFO1_DATA_CURR_REG ================================================== */ +/* ================================================== FIFO1_DMA_DATA_REG =================================================== */ +/* ================================================== FIFO2_DATA_CURR_REG ================================================== */ +/* ================================================== FIFO2_DMA_DATA_REG =================================================== */ +/* ================================================== FIFO3_DATA_CURR_REG ================================================== */ +/* ================================================== FIFO3_DMA_DATA_REG =================================================== */ +/* ================================================== FXADC_CLK_CTRL_REG =================================================== */ +/* ================================================== SWITCHING_MODE_REG =================================================== */ +/* ================================================== TIMESTAMP_CTRL_REG =================================================== */ +/* =================================================== XADC12B_CTRL_REG ==================================================== */ +/* ================================================== XADC12B_DMA_EN_REG =================================================== */ +/* ============================================== XADC12B_FIFO_INTR_MASK_REG =============================================== */ +/* ================================================ XADC12B_INTR_STATUS_REG ================================================ */ +/* =============================================== XADC12B_INT_THR_DIFF_REG ================================================ */ +/* =============================================== XADC12B_INT_THR_OVER_REG ================================================ */ +/* =============================================== XADC12B_INT_THR_UNDER_REG =============================================== */ +/* ================================================= XADC12B_RM_SAMPLE_REG ================================================= */ +/* ================================================= XADC12B_ST_SAMPLE_REG ================================================= */ +/* =============================================== XADC12B_THR_INTR_CLR_REG ================================================ */ +/* =============================================== XADC12B_THR_INTR_MASK_REG =============================================== */ + +/* =========================================================================================================================== */ +/* ================ CACHE ================ */ +/* =========================================================================================================================== */ + +/* ================================================== CACHE_ASSOCCFG_REG =================================================== */ +/* ================================================= CACHE_CPU_M_HADDR_REG ================================================= */ +/* ==================================================== CACHE_CTRL1_REG ==================================================== */ +/* ==================================================== CACHE_CTRL2_REG ==================================================== */ +/* ==================================================== CACHE_CTRL3_REG ==================================================== */ +/* ================================================ CACHE_CTRLR_M_HADDR_REG ================================================ */ +/* ==================================================== CACHE_FLASH_REG ==================================================== */ +/* ================================================== CACHE_LNSIZECFG_REG ================================================== */ +/* ================================================== CACHE_MRM_CTRL_REG =================================================== */ +/* ================================================= CACHE_MRM_HITS1WS_REG ================================================= */ +/* ================================================== CACHE_MRM_HITS_REG =================================================== */ +/* =============================================== CACHE_MRM_HITS_THRES_REG ================================================ */ +/* ================================================= CACHE_MRM_MISSES_REG ================================================== */ +/* ============================================== CACHE_MRM_MISSES_THRES_REG =============================================== */ +/* ================================================== CACHE_MRM_TINT_REG =================================================== */ +/* ================================================ CACHE_M_HADDR_MAP0_REG ================================================= */ +/* ===================================================== SWD_RESET_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ CC312 ================ */ +/* =========================================================================================================================== */ + +/* ================================================== CC312_AES_BUSY_REG =================================================== */ +/* =============================================== CC312_AES_CLK_ENABLE_REG ================================================ */ +/* ================================================ CC312_AES_CMAC_INIT_REG ================================================ */ +/* ============================================= CC312_AES_CMAC_SIZE0_KICK_REG ============================================= */ +/* ================================================= CC312_AES_CONTROL_REG ================================================= */ +/* ================================================= CC312_AES_CTR_0_0_REG ================================================= */ +/* ================================================= CC312_AES_CTR_0_1_REG ================================================= */ +/* ================================================= CC312_AES_CTR_0_2_REG ================================================= */ +/* ================================================= CC312_AES_CTR_0_3_REG ================================================= */ +/* ============================================ CC312_AES_CTR_NO_INCREMENT_REG ============================================= */ +/* ============================================= CC312_AES_DFA_ERR_STATUS_REG ============================================== */ +/* ================================================ CC312_AES_DFA_IS_ON_REG ================================================ */ +/* ================================================ CC312_AES_HW_FLAGS_REG ================================================= */ +/* ================================================= CC312_AES_IV_0_0_REG ================================================== */ +/* ================================================= CC312_AES_IV_0_1_REG ================================================== */ +/* ================================================= CC312_AES_IV_0_2_REG ================================================== */ +/* ================================================= CC312_AES_IV_0_3_REG ================================================== */ +/* ================================================= CC312_AES_IV_1_0_REG ================================================== */ +/* ================================================= CC312_AES_IV_1_1_REG ================================================== */ +/* ================================================= CC312_AES_IV_1_2_REG ================================================== */ +/* ================================================= CC312_AES_IV_1_3_REG ================================================== */ +/* ================================================= CC312_AES_KEY_0_0_REG ================================================= */ +/* ================================================= CC312_AES_KEY_0_1_REG ================================================= */ +/* ================================================= CC312_AES_KEY_0_2_REG ================================================= */ +/* ================================================= CC312_AES_KEY_0_3_REG ================================================= */ +/* ================================================= CC312_AES_KEY_0_4_REG ================================================= */ +/* ================================================= CC312_AES_KEY_0_5_REG ================================================= */ +/* ================================================= CC312_AES_KEY_0_6_REG ================================================= */ +/* ================================================= CC312_AES_KEY_0_7_REG ================================================= */ +/* ================================================= CC312_AES_KEY_1_0_REG ================================================= */ +/* ================================================= CC312_AES_KEY_1_1_REG ================================================= */ +/* ================================================= CC312_AES_KEY_1_2_REG ================================================= */ +/* ================================================= CC312_AES_KEY_1_3_REG ================================================= */ +/* ================================================= CC312_AES_KEY_1_4_REG ================================================= */ +/* ================================================= CC312_AES_KEY_1_5_REG ================================================= */ +/* ================================================= CC312_AES_KEY_1_6_REG ================================================= */ +/* ================================================= CC312_AES_KEY_1_7_REG ================================================= */ +/* ============================================= CC312_AES_REMAINING_BYTES_REG ============================================= */ +/* =================================================== CC312_AES_SK1_REG =================================================== */ +/* =================================================== CC312_AES_SK_REG ==================================================== */ +/* =============================================== CC312_AHBM_HMASTLOCK_REG ================================================ */ +/* ================================================ CC312_AHBM_HNONSEC_REG ================================================= */ +/* ================================================= CC312_AHBM_HPROT_REG ================================================== */ +/* ================================================ CC312_AHBM_SINGLES_REG ================================================= */ +/* =========================================== CC312_AIB_FUSE_PROG_COMPLETED_REG =========================================== */ +/* ============================================== CC312_AO_APB_FILTERING_REG =============================================== */ +/* ================================================= CC312_AO_CC_GPPC_REG ================================================== */ +/* ============================================ CC312_AO_CC_SEC_DEBUG_RESET_REG ============================================ */ +/* ======================================== CC312_AO_ICV_DCU_RESTRICTION_MASK0_REG ========================================= */ +/* ======================================== CC312_AO_ICV_DCU_RESTRICTION_MASK1_REG ========================================= */ +/* ======================================== CC312_AO_ICV_DCU_RESTRICTION_MASK2_REG ========================================= */ +/* ======================================== CC312_AO_ICV_DCU_RESTRICTION_MASK3_REG ========================================= */ +/* ============================================= CC312_AUTOCORR_STATISTIC_REG ============================================== */ +/* =============================================== CC312_AUTO_HW_PADDING_REG =============================================== */ +/* ============================================ CC312_CHACHA_BLOCK_CNT_LSB_REG ============================================= */ +/* ============================================ CC312_CHACHA_BLOCK_CNT_MSB_REG ============================================= */ +/* ================================================= CC312_CHACHA_BUSY_REG ================================================= */ +/* ======================================= CC312_CHACHA_BYTE_WORD_ORDER_CNTL_REG_REG ======================================= */ +/* ============================================== CC312_CHACHA_CLK_ENABLE_REG ============================================== */ +/* ============================================= CC312_CHACHA_CONTROL_REG_REG ============================================== */ +/* ============================================== CC312_CHACHA_DEBUG_REG_REG =============================================== */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY0_REG ============================================= */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY1_REG ============================================= */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY2_REG ============================================= */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY3_REG ============================================= */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY4_REG ============================================= */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY5_REG ============================================= */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY6_REG ============================================= */ +/* ============================================ CC312_CHACHA_FOR_POLY_KEY7_REG ============================================= */ +/* =============================================== CC312_CHACHA_HW_FLAGS_REG =============================================== */ +/* ================================================= CC312_CHACHA_IV_0_REG ================================================= */ +/* ================================================= CC312_CHACHA_IV_1_REG ================================================= */ +/* ================================================= CC312_CHACHA_KEY0_REG ================================================= */ +/* ================================================= CC312_CHACHA_KEY1_REG ================================================= */ +/* ================================================= CC312_CHACHA_KEY2_REG ================================================= */ +/* ================================================= CC312_CHACHA_KEY3_REG ================================================= */ +/* ================================================= CC312_CHACHA_KEY4_REG ================================================= */ +/* ================================================= CC312_CHACHA_KEY5_REG ================================================= */ +/* ================================================= CC312_CHACHA_KEY6_REG ================================================= */ +/* ================================================= CC312_CHACHA_KEY7_REG ================================================= */ +/* =============================================== CC312_CHACHA_SW_RESET_REG =============================================== */ +/* =============================================== CC312_CHACHA_VERSION_REG ================================================ */ +/* ================================================= CC312_CLK_STATUS_REG ================================================== */ +/* =============================================== CC312_COMPONENT_ID_0_REG ================================================ */ +/* =============================================== CC312_COMPONENT_ID_1_REG ================================================ */ +/* =============================================== CC312_COMPONENT_ID_2_REG ================================================ */ +/* =============================================== CC312_COMPONENT_ID_3_REG ================================================ */ +/* ================================================= CC312_CONTEXT_ID_REG ================================================== */ +/* ================================================= CC312_CRYPTO_BUSY_REG ================================================= */ +/* ================================================= CC312_CRYPTO_CTL_REG ================================================== */ +/* ================================================= CC312_DIN_BUFFER_REG ================================================== */ +/* ============================================== CC312_DIN_CPU_DATA_SIZE_REG ============================================== */ +/* ============================================== CC312_DIN_FIFO_RST_PNTR_REG ============================================== */ +/* ============================================== CC312_DIN_MEM_DMA_BUSY_REG =============================================== */ +/* ============================================= CC312_DIN_SRAM_BYTES_LEN_REG ============================================== */ +/* ============================================== CC312_DIN_SRAM_DMA_BUSY_REG ============================================== */ +/* ============================================= CC312_DIN_SRAM_ENDIANNESS_REG ============================================= */ +/* =============================================== CC312_DMA_CLK_ENABLE_REG ================================================ */ +/* ================================================= CC312_DOUT_BUFFER_REG ================================================= */ +/* =============================================== CC312_DOUT_FIFO_EMPTY_REG =============================================== */ +/* ============================================== CC312_DOUT_MEM_DMA_BUSY_REG ============================================== */ +/* ============================================= CC312_DOUT_SRAM_BYTES_LEN_REG ============================================= */ +/* ============================================= CC312_DOUT_SRAM_DMA_BUSY_REG ============================================== */ +/* ============================================ CC312_DOUT_SRAM_ENDIANNESS_REG ============================================= */ +/* ================================================ CC312_DST_LLI_WORD0_REG ================================================ */ +/* ================================================ CC312_DST_LLI_WORD1_REG ================================================ */ +/* ================================================= CC312_EHR_DATA_0_REG ================================================== */ +/* ================================================= CC312_EHR_DATA_1_REG ================================================== */ +/* ================================================= CC312_EHR_DATA_2_REG ================================================== */ +/* ================================================= CC312_EHR_DATA_3_REG ================================================== */ +/* ================================================= CC312_EHR_DATA_4_REG ================================================== */ +/* ================================================= CC312_EHR_DATA_5_REG ================================================== */ +/* ================================================ CC312_FIFO_IN_EMPTY_REG ================================================ */ +/* ================================================= CC312_GHASH_BUSY_REG ================================================== */ +/* ================================================= CC312_GHASH_INIT_REG ================================================== */ +/* ================================================ CC312_GHASH_IV_0_0_REG ================================================= */ +/* ================================================ CC312_GHASH_IV_0_1_REG ================================================= */ +/* ================================================ CC312_GHASH_IV_0_2_REG ================================================= */ +/* ================================================ CC312_GHASH_IV_0_3_REG ================================================= */ +/* ============================================== CC312_GHASH_SUBKEY_0_0_REG =============================================== */ +/* ============================================== CC312_GHASH_SUBKEY_0_1_REG =============================================== */ +/* ============================================== CC312_GHASH_SUBKEY_0_2_REG =============================================== */ +/* ============================================== CC312_GHASH_SUBKEY_0_3_REG =============================================== */ +/* ============================================== CC312_HASH_AES_SW_RESET_REG ============================================== */ +/* ================================================== CC312_HASH_BUSY_REG ================================================== */ +/* =============================================== CC312_HASH_CLK_ENABLE_REG =============================================== */ +/* ================================================ CC312_HASH_CONTROL_REG ================================================= */ +/* =============================================== CC312_HASH_CUR_LEN_0_REG ================================================ */ +/* =============================================== CC312_HASH_CUR_LEN_1_REG ================================================ */ +/* =============================================== CC312_HASH_ENDIANESS_REG ================================================ */ +/* =================================================== CC312_HASH_H0_REG =================================================== */ +/* =================================================== CC312_HASH_H1_REG =================================================== */ +/* =================================================== CC312_HASH_H2_REG =================================================== */ +/* =================================================== CC312_HASH_H3_REG =================================================== */ +/* =================================================== CC312_HASH_H4_REG =================================================== */ +/* =================================================== CC312_HASH_H5_REG =================================================== */ +/* =================================================== CC312_HASH_H6_REG =================================================== */ +/* =================================================== CC312_HASH_H7_REG =================================================== */ +/* =================================================== CC312_HASH_H8_REG =================================================== */ +/* ================================================ CC312_HASH_PAD_CFG_REG ================================================= */ +/* ================================================= CC312_HASH_PAD_EN_REG ================================================= */ +/* ================================================= CC312_HASH_PARAM_REG ================================================== */ +/* ============================================== CC312_HASH_SEL_AES_MAC_REG =============================================== */ +/* ================================================ CC312_HASH_VERSION_REG ================================================= */ +/* ================================================ CC312_HASH_XOR_DIN_REG ================================================= */ +/* ============================================== CC312_HOST_AO_LOCK_BITS_REG ============================================== */ +/* ================================================== CC312_HOST_BOOT_REG ================================================== */ +/* =============================================== CC312_HOST_CC_IS_IDLE_REG =============================================== */ +/* ========================================= CC312_HOST_CORE_CLK_GATING_ENABLE_REG ========================================= */ +/* ============================================= CC312_HOST_CRYPTOKEY_SEL_REG ============================================== */ +/* ================================================ CC312_HOST_DCU_EN0_REG ================================================= */ +/* ================================================ CC312_HOST_DCU_EN1_REG ================================================= */ +/* ================================================ CC312_HOST_DCU_EN2_REG ================================================= */ +/* ================================================ CC312_HOST_DCU_EN3_REG ================================================= */ +/* =============================================== CC312_HOST_DCU_LOCK0_REG ================================================ */ +/* =============================================== CC312_HOST_DCU_LOCK1_REG ================================================ */ +/* =============================================== CC312_HOST_DCU_LOCK2_REG ================================================ */ +/* =============================================== CC312_HOST_DCU_LOCK3_REG ================================================ */ +/* =============================================== CC312_HOST_POWERDOWN_REG ================================================ */ +/* ========================================== CC312_HOST_REMOVE_CHACHA_ENGINE_REG ========================================== */ +/* ========================================== CC312_HOST_REMOVE_GHASH_ENGINE_REG =========================================== */ +/* ============================================= CC312_HOST_RGF_CC_SW_RST_REG ============================================== */ +/* =============================================== CC312_HOST_RGF_ENDIAN_REG =============================================== */ +/* ================================================ CC312_HOST_RGF_ICR_REG ================================================= */ +/* ================================================ CC312_HOST_RGF_IMR_REG ================================================= */ +/* ================================================ CC312_HOST_RGF_IRR_REG ================================================= */ +/* ============================================= CC312_HOST_RGF_SIGNATURE_REG ============================================== */ +/* =========================================== CC312_HOST_SHADOW_KCEICV_REG_REG ============================================ */ +/* ============================================= CC312_HOST_SHADOW_KCE_REG_REG ============================================= */ +/* ============================================= CC312_HOST_SHADOW_KCP_REG_REG ============================================= */ +/* ============================================= CC312_HOST_SHADOW_KDR_REG_REG ============================================= */ +/* ============================================ CC312_HOST_SHADOW_KPICV_REG_REG ============================================ */ +/* ================================================ CC312_LCS_IS_VALID_REG ================================================= */ +/* =================================================== CC312_LCS_REG_REG =================================================== */ +/* =============================================== CC312_LOAD_INIT_STATE_REG =============================================== */ +/* ================================================= CC312_MEMORY_MAP0_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP10_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP11_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP12_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP13_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP14_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP15_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP16_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP17_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP18_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP19_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP1_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP20_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP21_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP22_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP23_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP24_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP25_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP26_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP27_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP28_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP29_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP2_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP30_REG ================================================= */ +/* ================================================ CC312_MEMORY_MAP31_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP3_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP4_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP5_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP6_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP7_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP8_REG ================================================= */ +/* ================================================= CC312_MEMORY_MAP9_REG ================================================= */ +/* ============================================== CC312_NVM_DEBUG_STATUS_REG =============================================== */ +/* ================================================= CC312_NVM_IS_IDLE_REG ================================================= */ +/* =============================================== CC312_N_NP_T0_T1_ADDR_REG =============================================== */ +/* =================================================== CC312_OPCODE_REG ==================================================== */ +/* ============================================= CC312_OTP_ADDR_WIDTH_DEF_REG ============================================== */ +/* =============================================== CC312_PERIPHERAL_ID_0_REG =============================================== */ +/* =============================================== CC312_PERIPHERAL_ID_1_REG =============================================== */ +/* =============================================== CC312_PERIPHERAL_ID_2_REG =============================================== */ +/* =============================================== CC312_PERIPHERAL_ID_3_REG =============================================== */ +/* =============================================== CC312_PERIPHERAL_ID_4_REG =============================================== */ +/* ================================================ CC312_PIDRESERVED0_REG ================================================= */ +/* ================================================ CC312_PIDRESERVED1_REG ================================================= */ +/* ================================================ CC312_PIDRESERVED2_REG ================================================= */ +/* ================================================ CC312_PKA_BUFF_ADDR_REG ================================================ */ +/* =============================================== CC312_PKA_CLK_ENABLE_REG ================================================ */ +/* ================================================== CC312_PKA_DONE_REG =================================================== */ +/* =================================================== CC312_PKA_L0_REG ==================================================== */ +/* =================================================== CC312_PKA_L1_REG ==================================================== */ +/* =================================================== CC312_PKA_L2_REG ==================================================== */ +/* =================================================== CC312_PKA_L3_REG ==================================================== */ +/* =================================================== CC312_PKA_L4_REG ==================================================== */ +/* =================================================== CC312_PKA_L5_REG ==================================================== */ +/* =================================================== CC312_PKA_L6_REG ==================================================== */ +/* =================================================== CC312_PKA_L7_REG ==================================================== */ +/* ================================================ CC312_PKA_MON_READ_REG ================================================= */ +/* =============================================== CC312_PKA_MON_SELECT_REG ================================================ */ +/* ================================================ CC312_PKA_PIPE_RDY_REG ================================================= */ +/* ================================================ CC312_PKA_SRAM_ADDR_REG ================================================ */ +/* =============================================== CC312_PKA_SRAM_RADDR_REG ================================================ */ +/* =============================================== CC312_PKA_SRAM_RDATA_REG ================================================ */ +/* =============================================== CC312_PKA_SRAM_WDATA_REG ================================================ */ +/* =============================================== CC312_PKA_SRAM_WR_CLR_REG =============================================== */ +/* ================================================= CC312_PKA_STATUS_REG ================================================== */ +/* ================================================ CC312_PKA_SW_RESET_REG ================================================= */ +/* ================================================= CC312_PKA_VERSION_REG ================================================= */ +/* =============================================== CC312_PKA_WORD_ACCESS_REG =============================================== */ +/* =============================================== CC312_READ_ALIGN_LAST_REG =============================================== */ +/* ============================================== CC312_RND_SOURCE_ENABLE_REG ============================================== */ +/* ================================================== CC312_RNG_BUSY_REG =================================================== */ +/* =============================================== CC312_RNG_CLK_ENABLE_REG ================================================ */ +/* ============================================= CC312_RNG_DEBUG_EN_INPUT_REG ============================================== */ +/* =============================================== CC312_RNG_DMA_ENABLE_REG ================================================ */ +/* ============================================= CC312_RNG_DMA_SAMPLES_NUM_REG ============================================= */ +/* ============================================== CC312_RNG_DMA_SRAM_ADDR_REG ============================================== */ +/* ============================================== CC312_RNG_DMA_SRC_MASK_REG =============================================== */ +/* =============================================== CC312_RNG_DMA_STATUS_REG ================================================ */ +/* =================================================== CC312_RNG_ICR_REG =================================================== */ +/* =================================================== CC312_RNG_IMR_REG =================================================== */ +/* =================================================== CC312_RNG_ISR_REG =================================================== */ +/* ================================================ CC312_RNG_SW_RESET_REG ================================================= */ +/* ================================================= CC312_RNG_VERSION_REG ================================================= */ +/* ============================================== CC312_RNG_WATCHDOG_VAL_REG =============================================== */ +/* ============================================== CC312_RST_BITS_COUNTER_REG =============================================== */ +/* ================================================= CC312_SAMPLE_CNT1_REG ================================================= */ +/* ================================================== CC312_SRAM_ADDR_REG ================================================== */ +/* =============================================== CC312_SRAM_DATA_READY_REG =============================================== */ +/* ================================================== CC312_SRAM_DATA_REG ================================================== */ +/* =============================================== CC312_SRAM_DEST_ADDR_REG ================================================ */ +/* ================================================ CC312_SRAM_SRC_ADDR_REG ================================================ */ +/* ================================================ CC312_SRC_LLI_WORD0_REG ================================================ */ +/* ================================================ CC312_SRC_LLI_WORD1_REG ================================================ */ +/* ================================================= CC312_TRNG_CONFIG_REG ================================================= */ +/* ============================================= CC312_TRNG_DEBUG_CONTROL_REG ============================================== */ +/* ================================================= CC312_TRNG_VALID_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ CHIP_VERSION ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== CHIP_ID1_REG ====================================================== */ +/* ===================================================== CHIP_ID2_REG ====================================================== */ +/* ===================================================== CHIP_ID3_REG ====================================================== */ +/* ===================================================== CHIP_ID4_REG ====================================================== */ +/* =================================================== CHIP_REVISION_REG =================================================== */ +/* ===================================================== CHIP_SWC_REG ====================================================== */ +/* ==================================================== CHIP_TEST1_REG ===================================================== */ +/* ==================================================== CHIP_TEST2_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ CLKCAL_BIF ================ */ +/* =========================================================================================================================== */ + +/* ============================================== ADC_DIG_CAL_WEIGHT_I_0_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_1_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_2_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_3_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_4_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_5_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_6_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_7_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_8_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_I_9_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_0_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_1_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_2_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_3_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_4_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_5_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_6_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_7_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_8_REG =============================================== */ +/* ============================================== ADC_DIG_CAL_WEIGHT_Q_9_REG =============================================== */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_0_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_1_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_2_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_3_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_4_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_5_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_6_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_7_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_8_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_I_9_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_0_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_1_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_2_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_3_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_4_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_5_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_6_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_7_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_8_REG ============================================= */ +/* ============================================ ADC_DIG_O_CALED_WEIGHT_Q_9_REG ============================================= */ +/* ==================================================== CLK_CAL_IRQ_REG ==================================================== */ +/* ==================================================== CLK_REF_CNT_REG ==================================================== */ +/* ==================================================== CLK_REF_SEL_REG ==================================================== */ +/* ==================================================== CLK_REF_VAL_REG ==================================================== */ + +/* =========================================================================================================================== */ +/* ================ CRG_APU ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== APU_AUD_CLK_REG ==================================================== */ +/* =================================================== APU_MCLK_CTRL_REG =================================================== */ +/* ==================================================== APU_SRC_CLK_REG ==================================================== */ +/* ================================================== APU_START_CTRL_REG =================================================== */ +/* =================================================== AUD_CLK_GATE_REG ==================================================== */ + +/* =========================================================================================================================== */ +/* ================ CRG_COM ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== DAC_10B_CFG_REG ==================================================== */ +/* ===================================================== DAC_CTRL_REG ====================================================== */ +/* ==================================================== DAC_FREQ_I_REG ===================================================== */ +/* ==================================================== DAC_FREQ_Q_REG ===================================================== */ +/* ===================================================== DAC_GAIN_REG ====================================================== */ +/* =================================================== EXT_INTB_CTRL_REG =================================================== */ +/* =================================================== EXT_INTB_SET_REG ==================================================== */ +/* ===================================================== FADC_CAL1_REG ===================================================== */ +/* ===================================================== FADC_CAL2_REG ===================================================== */ +/* ================================================== FADC_CAL_DONE_I_REG ================================================== */ +/* ================================================== FADC_CAL_DONE_Q_REG ================================================== */ +/* ===================================================== FADC_CFG0_REG ===================================================== */ +/* ===================================================== FADC_CFG1_REG ===================================================== */ +/* ================================================== FADC_DOUT_DELTA_REG ================================================== */ +/* ================================================== FADC_DOUT_ERROR_REG ================================================== */ +/* =================================================== IP1_BAND_GAP_REG ==================================================== */ +/* =================================================== IP2_BAND_GAP_REG ==================================================== */ +/* =================================================== IP4_DCDC_DIG_REG ==================================================== */ +/* =================================================== IP4_DCDC_FEM_REG ==================================================== */ +/* ================================================= IP4_POR_LDO_CTRL_REG ================================================== */ +/* ===================================================== LDO_CTRL_REG ====================================================== */ +/* ==================================================== MEMORY_CTRL_REG ==================================================== */ +/* ==================================================== MON_RF_TEST_REG ==================================================== */ +/* ================================================= NORMAL_TEST_CTRL_REG ================================================== */ +/* =================================================== PAD_LATCH_EN_REG ==================================================== */ +/* =================================================== PLL1_ARM_CTRL_REG =================================================== */ +/* =================================================== POWER_MANAGE_REG ==================================================== */ +/* ==================================================== PSRAM_DEBUG_REG ==================================================== */ +/* ===================================================== TEST_CFG_REG ====================================================== */ +/* =================================================== XTAL32K_CTRL_REG ==================================================== */ +/* =================================================== XTAL40M_CTRL_REG ==================================================== */ + +/* =========================================================================================================================== */ +/* ================ CRG_PER ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== CLK_COM_REG ====================================================== */ +/* =================================================== RESET_CLK_COM_REG =================================================== */ +/* ==================================================== SET_CLK_COM_REG ==================================================== */ + +/* =========================================================================================================================== */ +/* ================ CRG_SYS ================ */ +/* =========================================================================================================================== */ + +/* ================================================== CACHE_RAM_CTRL_REG =================================================== */ +/* ================================================== CRYPTO_RAM_CTRL_REG ================================================== */ +/* ================================================== DCACHE_RAM_CTRL_REG ================================================== */ +/* =================================================== HPI_CLK_CTRL_REG ==================================================== */ +/* =================================================== MEM_CLK_CTRL_REG ==================================================== */ + +/* =========================================================================================================================== */ +/* ================ CRG_TOP ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== AUX_CLK_DIV_REG ==================================================== */ +/* ===================================================== CLK_AMBA_REG ====================================================== */ +/* ===================================================== CLK_CTRL_REG ====================================================== */ +/* ===================================================== PMU_CTRL_REG ====================================================== */ +/* ==================================================== RADIO_RESET_REG ==================================================== */ +/* =================================================== RESET_FREEZE_REG ==================================================== */ +/* ==================================================== RESET_STAT_REG ===================================================== */ +/* ================================================== RETAIN_MEM_CTRL_REG ================================================== */ +/* ===================================================== RFMON_INT_REG ===================================================== */ +/* ===================================================== RST_CTRL_REG ====================================================== */ +/* ==================================================== SET_FREEZE_REG ===================================================== */ +/* ===================================================== SYS_CTRL_REG ====================================================== */ +/* ==================================================== SYS_STATUS_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ DAI ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== DAI_CONFIG_REG ===================================================== */ +/* ================================================= DAI_DATA_OUT_CTRL_REG ================================================= */ +/* ================================================= DAI_DATA_OUT_TEST_REG ================================================= */ +/* ==================================================== DAI_ENABLE_REG ===================================================== */ +/* ===================================================== DAI_MODE_REG ====================================================== */ +/* ================================================== DAI_OFFSET_LSB_REG =================================================== */ +/* ================================================== DAI_OFFSET_MSB_REG =================================================== */ +/* ==================================================== DAI_RX1_CH_REG ===================================================== */ +/* ====================================================== DAI_RX1_REG ====================================================== */ +/* ==================================================== DAI_RX2_CH_REG ===================================================== */ +/* ====================================================== DAI_RX2_REG ====================================================== */ +/* =================================================== DAI_SLOT_CNT_REG ==================================================== */ +/* =================================================== DAI_SR_CONFIG_REG =================================================== */ +/* =================================================== DAI_SYNC_WIN_REG ==================================================== */ +/* ==================================================== DAI_TX1_CH_REG ===================================================== */ +/* ====================================================== DAI_TX1_REG ====================================================== */ +/* ==================================================== DAI_TX2_CH_REG ===================================================== */ +/* ====================================================== DAI_TX2_REG ====================================================== */ +/* ==================================================== DAI_TX_MUX_REG ===================================================== */ +/* ===================================================== DAI_W_LEN_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ DCACHE ================ */ +/* =========================================================================================================================== */ + +/* ================================================= DCACHE_BASE_ADDR_REG ================================================== */ +/* ==================================================== DCACHE_CTRL_REG ==================================================== */ +/* ================================================== DCACHE_MRM_CTRL_REG ================================================== */ +/* ================================================= DCACHE_MRM_EVICTS_REG ================================================= */ +/* ============================================== DCACHE_MRM_EVICTS_THRES_REG ============================================== */ +/* ================================================== DCACHE_MRM_HITS_REG ================================================== */ +/* =============================================== DCACHE_MRM_HITS_THRES_REG =============================================== */ +/* ================================================= DCACHE_MRM_MISSES_REG ================================================= */ +/* ============================================== DCACHE_MRM_MISSES_THRES_REG ============================================== */ +/* ================================================== DCACHE_MRM_TINT_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ DMA ================ */ +/* =========================================================================================================================== */ + +/* =================================================== DMA0_A_START_REG ==================================================== */ +/* =================================================== DMA0_B_START_REG ==================================================== */ +/* ===================================================== DMA0_CTRL_REG ===================================================== */ +/* ===================================================== DMA0_IDX_REG ====================================================== */ +/* ===================================================== DMA0_INT_REG ====================================================== */ +/* ===================================================== DMA0_LEN_REG ====================================================== */ +/* =================================================== DMA10_A_START_REG =================================================== */ +/* =================================================== DMA10_B_START_REG =================================================== */ +/* ==================================================== DMA10_CTRL_REG ===================================================== */ +/* ===================================================== DMA10_IDX_REG ===================================================== */ +/* ===================================================== DMA10_INT_REG ===================================================== */ +/* ===================================================== DMA10_LEN_REG ===================================================== */ +/* =================================================== DMA11_A_START_REG =================================================== */ +/* =================================================== DMA11_B_START_REG =================================================== */ +/* ==================================================== DMA11_CTRL_REG ===================================================== */ +/* ===================================================== DMA11_IDX_REG ===================================================== */ +/* ===================================================== DMA11_INT_REG ===================================================== */ +/* ===================================================== DMA11_LEN_REG ===================================================== */ +/* =================================================== DMA12_A_START_REG =================================================== */ +/* =================================================== DMA12_B_START_REG =================================================== */ +/* ==================================================== DMA12_CTRL_REG ===================================================== */ +/* ===================================================== DMA12_IDX_REG ===================================================== */ +/* ===================================================== DMA12_INT_REG ===================================================== */ +/* ===================================================== DMA12_LEN_REG ===================================================== */ +/* =================================================== DMA13_A_START_REG =================================================== */ +/* =================================================== DMA13_B_START_REG =================================================== */ +/* ==================================================== DMA13_CTRL_REG ===================================================== */ +/* ===================================================== DMA13_IDX_REG ===================================================== */ +/* ===================================================== DMA13_INT_REG ===================================================== */ +/* ===================================================== DMA13_LEN_REG ===================================================== */ +/* =================================================== DMA14_A_START_REG =================================================== */ +/* =================================================== DMA14_B_START_REG =================================================== */ +/* ==================================================== DMA14_CTRL_REG ===================================================== */ +/* ===================================================== DMA14_IDX_REG ===================================================== */ +/* ===================================================== DMA14_INT_REG ===================================================== */ +/* ===================================================== DMA14_LEN_REG ===================================================== */ +/* =================================================== DMA15_A_START_REG =================================================== */ +/* =================================================== DMA15_B_START_REG =================================================== */ +/* ==================================================== DMA15_CTRL_REG ===================================================== */ +/* ===================================================== DMA15_IDX_REG ===================================================== */ +/* ===================================================== DMA15_INT_REG ===================================================== */ +/* ===================================================== DMA15_LEN_REG ===================================================== */ +/* =================================================== DMA1_A_START_REG ==================================================== */ +/* =================================================== DMA1_B_START_REG ==================================================== */ +/* ===================================================== DMA1_CTRL_REG ===================================================== */ +/* ===================================================== DMA1_IDX_REG ====================================================== */ +/* ===================================================== DMA1_INT_REG ====================================================== */ +/* ===================================================== DMA1_LEN_REG ====================================================== */ +/* =================================================== DMA2_A_START_REG ==================================================== */ +/* =================================================== DMA2_B_START_REG ==================================================== */ +/* ===================================================== DMA2_CTRL_REG ===================================================== */ +/* ===================================================== DMA2_IDX_REG ====================================================== */ +/* ===================================================== DMA2_INT_REG ====================================================== */ +/* ===================================================== DMA2_LEN_REG ====================================================== */ +/* =================================================== DMA3_A_START_REG ==================================================== */ +/* =================================================== DMA3_B_START_REG ==================================================== */ +/* ===================================================== DMA3_CTRL_REG ===================================================== */ +/* ===================================================== DMA3_IDX_REG ====================================================== */ +/* ===================================================== DMA3_INT_REG ====================================================== */ +/* ===================================================== DMA3_LEN_REG ====================================================== */ +/* =================================================== DMA4_A_START_REG ==================================================== */ +/* =================================================== DMA4_B_START_REG ==================================================== */ +/* ===================================================== DMA4_CTRL_REG ===================================================== */ +/* ===================================================== DMA4_IDX_REG ====================================================== */ +/* ===================================================== DMA4_INT_REG ====================================================== */ +/* ===================================================== DMA4_LEN_REG ====================================================== */ +/* =================================================== DMA5_A_START_REG ==================================================== */ +/* =================================================== DMA5_B_START_REG ==================================================== */ +/* ===================================================== DMA5_CTRL_REG ===================================================== */ +/* ===================================================== DMA5_IDX_REG ====================================================== */ +/* ===================================================== DMA5_INT_REG ====================================================== */ +/* ===================================================== DMA5_LEN_REG ====================================================== */ +/* =================================================== DMA6_A_START_REG ==================================================== */ +/* =================================================== DMA6_B_START_REG ==================================================== */ +/* ===================================================== DMA6_CTRL_REG ===================================================== */ +/* ===================================================== DMA6_IDX_REG ====================================================== */ +/* ===================================================== DMA6_INT_REG ====================================================== */ +/* ===================================================== DMA6_LEN_REG ====================================================== */ +/* =================================================== DMA7_A_START_REG ==================================================== */ +/* =================================================== DMA7_B_START_REG ==================================================== */ +/* ===================================================== DMA7_CTRL_REG ===================================================== */ +/* ===================================================== DMA7_IDX_REG ====================================================== */ +/* ===================================================== DMA7_INT_REG ====================================================== */ +/* ===================================================== DMA7_LEN_REG ====================================================== */ +/* =================================================== DMA8_A_START_REG ==================================================== */ +/* =================================================== DMA8_B_START_REG ==================================================== */ +/* ===================================================== DMA8_CTRL_REG ===================================================== */ +/* ===================================================== DMA8_IDX_REG ====================================================== */ +/* ===================================================== DMA8_INT_REG ====================================================== */ +/* ===================================================== DMA8_LEN_REG ====================================================== */ +/* =================================================== DMA9_A_START_REG ==================================================== */ +/* =================================================== DMA9_B_START_REG ==================================================== */ +/* ===================================================== DMA9_CTRL_REG ===================================================== */ +/* ===================================================== DMA9_IDX_REG ====================================================== */ +/* ===================================================== DMA9_INT_REG ====================================================== */ +/* ===================================================== DMA9_LEN_REG ====================================================== */ +/* =================================================== DMA_CLEAR_INT_REG =================================================== */ +/* =================================================== DMA_INT_MASK_REG ==================================================== */ +/* ================================================== DMA_INT_STATUS_REG =================================================== */ +/* =================================================== DMA_REQ_MUX2_REG ==================================================== */ +/* =================================================== DMA_REQ_MUX3_REG ==================================================== */ +/* =================================================== DMA_REQ_MUX4_REG ==================================================== */ +/* ==================================================== DMA_REQ_MUX_REG ==================================================== */ + +/* =========================================================================================================================== */ +/* ================ FPLL ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== PLLD_CONFIG_REG ==================================================== */ +/* ===================================================== PLLD_CTRL_REG ===================================================== */ +/* ==================================================== PLLD_FBDIV_REG ===================================================== */ +/* =================================================== PLLD_IRQ_CLR_REG ==================================================== */ +/* =================================================== PLLD_IRQ_MASK_REG =================================================== */ +/* ===================================================== PLLD_IRQ_REG ====================================================== */ +/* ==================================================== PLLD_STATUS_REG ==================================================== */ +/* ===================================================== PLLD_TEST_REG ===================================================== */ +/* =================================================== PLLD_VCO_TRIM_REG =================================================== */ + +/* =========================================================================================================================== */ +/* ================ GPIO ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== BIST_CTRL_REG ===================================================== */ +/* ===================================================== EMMC_MODE_REG ===================================================== */ +/* =================================================== GPIO_CLK_SEL_REG ==================================================== */ +/* ================================================== GPIO_INT_CLR_P0_REG ================================================== */ +/* ================================================== GPIO_INT_CLR_P1_REG ================================================== */ +/* ================================================== GPIO_INT_POL_P0_REG ================================================== */ +/* ================================================== GPIO_INT_POL_P1_REG ================================================== */ +/* ================================================== GPIO_INT_SEL_P0_REG ================================================== */ +/* ================================================== GPIO_INT_SEL_P1_REG ================================================== */ +/* ================================================== GPIO_INT_STS_P0_REG ================================================== */ +/* ================================================== GPIO_INT_STS_P1_REG ================================================== */ +/* =================================================== GPIO_SEL1_P0_REG ==================================================== */ +/* =================================================== GPIO_SEL1_P1_REG ==================================================== */ +/* ==================================================== GPIO_SEL_P0_REG ==================================================== */ +/* ==================================================== GPIO_SEL_P1_REG ==================================================== */ +/* ==================================================== P0_00_MODE_REG ===================================================== */ +/* ==================================================== P0_01_MODE_REG ===================================================== */ +/* ==================================================== P0_02_MODE_REG ===================================================== */ +/* ==================================================== P0_03_MODE_REG ===================================================== */ +/* ==================================================== P0_04_MODE_REG ===================================================== */ +/* ==================================================== P0_05_MODE_REG ===================================================== */ +/* ==================================================== P0_06_MODE_REG ===================================================== */ +/* ==================================================== P0_07_MODE_REG ===================================================== */ +/* ==================================================== P0_08_MODE_REG ===================================================== */ +/* ==================================================== P0_09_MODE_REG ===================================================== */ +/* ==================================================== P0_10_MODE_REG ===================================================== */ +/* ==================================================== P0_11_MODE_REG ===================================================== */ +/* ==================================================== P0_12_MODE_REG ===================================================== */ +/* ==================================================== P0_13_MODE_REG ===================================================== */ +/* ====================================================== P0_DATA_REG ====================================================== */ +/* =================================================== P0_RESET_DATA_REG =================================================== */ +/* ==================================================== P0_SET_DATA_REG ==================================================== */ +/* ==================================================== P1_00_MODE_REG ===================================================== */ +/* ==================================================== P1_01_MODE_REG ===================================================== */ +/* ==================================================== P1_02_MODE_REG ===================================================== */ +/* ==================================================== P1_03_MODE_REG ===================================================== */ +/* ==================================================== P1_04_MODE_REG ===================================================== */ +/* ==================================================== P1_05_MODE_REG ===================================================== */ +/* ==================================================== P1_06_MODE_REG ===================================================== */ +/* ==================================================== P1_07_MODE_REG ===================================================== */ +/* ==================================================== P1_08_MODE_REG ===================================================== */ +/* ==================================================== P1_09_MODE_REG ===================================================== */ +/* ==================================================== P1_10_MODE_REG ===================================================== */ +/* ==================================================== P1_11_MODE_REG ===================================================== */ +/* ==================================================== P1_12_MODE_REG ===================================================== */ +/* ==================================================== P1_13_MODE_REG ===================================================== */ +/* ==================================================== P1_14_MODE_REG ===================================================== */ +/* ==================================================== P1_15_MODE_REG ===================================================== */ +/* ====================================================== P1_DATA_REG ====================================================== */ +/* =================================================== P1_RESET_DATA_REG =================================================== */ +/* ==================================================== P1_SET_DATA_REG ==================================================== */ +/* ================================================== RAMBIST_ENABLE1_REG ================================================== */ +/* ================================================== RAMBIST_ENABLE2_REG ================================================== */ +/* ================================================== RAMBIST_RESULT1_REG ================================================== */ +/* ================================================== RAMBIST_RESULT2_REG ================================================== */ +/* ================================================== RAMBIST_RESULT3_REG ================================================== */ +/* ================================================== RAMBIST_STATUS1_REG ================================================== */ +/* ================================================== RAMBIST_STATUS2_REG ================================================== */ +/* ================================================== RAMBIST_STATUS3_REG ================================================== */ +/* ================================================== ROMBIST_RESULT_REG =================================================== */ +/* ===================================================== SDIO_MODE_REG ===================================================== */ +/* ===================================================== SW0_MODE_REG ====================================================== */ +/* ===================================================== SW1_MODE_REG ====================================================== */ +/* ====================================================== SW_DATA_REG ====================================================== */ +/* =================================================== SW_RESET_DATA_REG =================================================== */ +/* ==================================================== SW_SET_DATA_REG ==================================================== */ +/* ==================================================== TEST_CTRL2_REG ===================================================== */ +/* ===================================================== TEST_CTRL_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ GPREG ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= DEBUG_REG ======================================================= */ +/* ===================================================== GP_STATUS_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ HW_ACC ================ */ +/* =========================================================================================================================== */ + +/* ================================================== CRC_1_ADDR_MAX_REG =================================================== */ +/* ================================================== CRC_1_ADDR_MIN_REG =================================================== */ +/* =================================================== CRC_1_CAL_VAL_REG =================================================== */ +/* ================================================= CRC_1_CAL_VAL_REV_REG ================================================= */ +/* =================================================== CRC_1_CONFIG_REG ==================================================== */ +/* ==================================================== CRC_1_OP_EN_REG ==================================================== */ +/* ================================================= CRC_1_PSEUDO_VAL_REG ================================================== */ +/* ================================================== CRC_1_REQ_CTRL_REG =================================================== */ +/* ================================================== CRC_1_SEED_VAL_REG =================================================== */ +/* ===================================================== CRC_1_STA_REG ===================================================== */ +/* =================================================== CRC_ADDR_MAX_REG ==================================================== */ +/* =================================================== CRC_ADDR_MIN_REG ==================================================== */ +/* ==================================================== CRC_CAL_VAL_REG ==================================================== */ +/* ================================================== CRC_CAL_VAL_REV_REG ================================================== */ +/* ==================================================== CRC_CONFIG_REG ===================================================== */ +/* ===================================================== CRC_OP_EN_REG ===================================================== */ +/* ================================================== CRC_PSEUDO_VAL_REG =================================================== */ +/* =================================================== CRC_REQ_CTRL_REG ==================================================== */ +/* =================================================== CRC_SEED_VAL_REG ==================================================== */ +/* ====================================================== CRC_STA_REG ====================================================== */ +/* ================================================== HW_CHS_ADDR_MAX_REG ================================================== */ +/* ================================================== HW_CHS_ADDR_MIN_REG ================================================== */ +/* ================================================== HW_CHS_CAL_STA_REG =================================================== */ +/* ================================================== HW_CHS_CAL_VAL_REG =================================================== */ +/* =================================================== HW_CHS_CONFIG_REG =================================================== */ +/* =================================================== HW_CHS_OP_EN_REG ==================================================== */ +/* ================================================= HW_CHS_PSEUDO_VAL_REG ================================================= */ +/* ================================================== HW_CHS_REQ_CTRL_REG ================================================== */ +/* ==================================================== PRNG_OP_EN_REG ===================================================== */ +/* =================================================== PRNG_PAR_TYPE_REG =================================================== */ +/* =================================================== PRNG_REG_CAL_VAL ==================================================== */ +/* =================================================== PRNG_REQ_CLR_REG ==================================================== */ +/* ===================================================== PRNG_SEED_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ I2C ================ */ +/* =========================================================================================================================== */ + +/* =============================================== I2C_ACK_GENERAL_CALL_REG ================================================ */ +/* ================================================= I2C_CLR_ACTIVITY_REG ================================================== */ +/* ================================================= I2C_CLR_GEN_CALL_REG ================================================== */ +/* =================================================== I2C_CLR_INTR_REG ==================================================== */ +/* ================================================== I2C_CLR_RD_REQ_REG =================================================== */ +/* ================================================== I2C_CLR_RX_DONE_REG ================================================== */ +/* ================================================== I2C_CLR_RX_OVER_REG ================================================== */ +/* ================================================= I2C_CLR_RX_UNDER_REG ================================================== */ +/* ================================================= I2C_CLR_START_DET_REG ================================================= */ +/* ================================================= I2C_CLR_STOP_DET_REG ================================================== */ +/* ================================================== I2C_CLR_TX_ABRT_REG ================================================== */ +/* ================================================== I2C_CLR_TX_OVER_REG ================================================== */ +/* ================================================== I2C_COMP_PARAM1_REG ================================================== */ +/* =================================================== I2C_COMP_TYPE_REG =================================================== */ +/* ================================================= I2C_COMP_VERSION_REG ================================================== */ +/* ====================================================== I2C_CON_REG ====================================================== */ +/* =================================================== I2C_DATA_CMD_REG ==================================================== */ +/* ==================================================== I2C_DMA_CR_REG ===================================================== */ +/* =================================================== I2C_DMA_RDLR_REG ==================================================== */ +/* =================================================== I2C_DMA_TDLR_REG ==================================================== */ +/* ==================================================== I2C_ENABLE_REG ===================================================== */ +/* ================================================= I2C_ENABLE_STATUS_REG ================================================= */ +/* ================================================== I2C_FS_SCL_HCNT_REG ================================================== */ +/* ================================================== I2C_FS_SCL_LCNT_REG ================================================== */ +/* =================================================== I2C_HS_MADDR_REG ==================================================== */ +/* ================================================== I2C_HS_SCL_HCNT_REG ================================================== */ +/* ================================================== I2C_HS_SCL_LCNT_REG ================================================== */ +/* ================================================= I2C_IC_FS_SPKLEN_REG ================================================== */ +/* ================================================= I2C_IC_HS_SPKLEN_REG ================================================== */ +/* =================================================== I2C_INTR_MASK_REG =================================================== */ +/* =================================================== I2C_INTR_STAT_REG =================================================== */ +/* ================================================= I2C_RAW_INTR_STAT_REG ================================================= */ +/* ===================================================== I2C_RXFLR_REG ===================================================== */ +/* ===================================================== I2C_RX_TL_REG ===================================================== */ +/* ====================================================== I2C_SAR_REG ====================================================== */ +/* =================================================== I2C_SDA_HOLD_REG ==================================================== */ +/* =================================================== I2C_SDA_SETUP_REG =================================================== */ +/* ================================================== I2C_SS_SCL_HCNT_REG ================================================== */ +/* ================================================== I2C_SS_SCL_LCNT_REG ================================================== */ +/* ==================================================== I2C_STATUS_REG ===================================================== */ +/* ====================================================== I2C_TAR_REG ====================================================== */ +/* ===================================================== I2C_TXFLR_REG ===================================================== */ +/* ================================================ I2C_TX_ABRT_SOURCE_REG ================================================= */ +/* ===================================================== I2C_TX_TL_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ I2C2 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== I2C2_ACK_GENERAL_CALL_REG =============================================== */ +/* ================================================= I2C2_CLR_ACTIVITY_REG ================================================= */ +/* ================================================= I2C2_CLR_GEN_CALL_REG ================================================= */ +/* =================================================== I2C2_CLR_INTR_REG =================================================== */ +/* ================================================== I2C2_CLR_RD_REQ_REG ================================================== */ +/* ================================================= I2C2_CLR_RX_DONE_REG ================================================== */ +/* ================================================= I2C2_CLR_RX_OVER_REG ================================================== */ +/* ================================================= I2C2_CLR_RX_UNDER_REG ================================================= */ +/* ================================================ I2C2_CLR_START_DET_REG ================================================= */ +/* ================================================= I2C2_CLR_STOP_DET_REG ================================================= */ +/* ================================================= I2C2_CLR_TX_ABRT_REG ================================================== */ +/* ================================================= I2C2_CLR_TX_OVER_REG ================================================== */ +/* ================================================= I2C2_COMP_PARAM1_REG ================================================== */ +/* ================================================== I2C2_COMP_TYPE_REG =================================================== */ +/* ================================================= I2C2_COMP_VERSION_REG ================================================= */ +/* ===================================================== I2C2_CON_REG ====================================================== */ +/* =================================================== I2C2_DATA_CMD_REG =================================================== */ +/* ==================================================== I2C2_DMA_CR_REG ==================================================== */ +/* =================================================== I2C2_DMA_RDLR_REG =================================================== */ +/* =================================================== I2C2_DMA_TDLR_REG =================================================== */ +/* ==================================================== I2C2_ENABLE_REG ==================================================== */ +/* ================================================ I2C2_ENABLE_STATUS_REG ================================================= */ +/* ================================================= I2C2_FS_SCL_HCNT_REG ================================================== */ +/* ================================================= I2C2_FS_SCL_LCNT_REG ================================================== */ +/* =================================================== I2C2_HS_MADDR_REG =================================================== */ +/* ================================================= I2C2_HS_SCL_HCNT_REG ================================================== */ +/* ================================================= I2C2_HS_SCL_LCNT_REG ================================================== */ +/* ================================================= I2C2_IC_FS_SPKLEN_REG ================================================= */ +/* ================================================= I2C2_IC_HS_SPKLEN_REG ================================================= */ +/* ================================================== I2C2_INTR_MASK_REG =================================================== */ +/* ================================================== I2C2_INTR_STAT_REG =================================================== */ +/* ================================================ I2C2_RAW_INTR_STAT_REG ================================================= */ +/* ==================================================== I2C2_RXFLR_REG ===================================================== */ +/* ==================================================== I2C2_RX_TL_REG ===================================================== */ +/* ===================================================== I2C2_SAR_REG ====================================================== */ +/* =================================================== I2C2_SDA_HOLD_REG =================================================== */ +/* ================================================== I2C2_SDA_SETUP_REG =================================================== */ +/* ================================================= I2C2_SS_SCL_HCNT_REG ================================================== */ +/* ================================================= I2C2_SS_SCL_LCNT_REG ================================================== */ +/* ==================================================== I2C2_STATUS_REG ==================================================== */ +/* ===================================================== I2C2_TAR_REG ====================================================== */ +/* ==================================================== I2C2_TXFLR_REG ===================================================== */ +/* ================================================ I2C2_TX_ABRT_SOURCE_REG ================================================ */ +/* ==================================================== I2C2_TX_TL_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ KDMA ================ */ +/* =========================================================================================================================== */ + +/* ============================================== KDMA_AHB_HPROT_11_TO_8_REG =============================================== */ +/* =============================================== KDMA_AHB_HPROT_3_TO_0_REG =============================================== */ +/* =============================================== KDMA_AHB_HPROT_7_TO_4_REG =============================================== */ +/* ============================================= KDMA_CFG_DESCRIPTOR_ADDR_REG ============================================== */ +/* ================================================ KDMA_CHANNEL_ENABLE_REG ================================================ */ +/* ==================================================== KDMA_ENABLE_REG ==================================================== */ +/* ================================================= KDMA_IRQ_DONE_CLR_REG ================================================= */ +/* =================================================== KDMA_IRQ_DONE_REG =================================================== */ +/* ================================================ KDMA_IRQ_DONE_TYPE_REG ================================================= */ +/* ================================================= KDMA_IRQ_ERR_CLR_REG ================================================== */ +/* =================================================== KDMA_IRQ_ERR_REG ==================================================== */ +/* ================================================= KDMA_LLI_COUNTER_REG ================================================== */ +/* ==================================================== KDMA_RESET_REG ===================================================== */ +/* ================================================ KDMA_STATUS_COUNTER_REG ================================================ */ +/* ============================================= KDMA_STATUS_DESC_ADDR_PRE_REG ============================================= */ +/* =============================================== KDMA_STATUS_DESC_ADDR_REG =============================================== */ +/* ================================================= KDMA_STATUS_DESC_REG ================================================== */ +/* ==================================================== KDMA_STATUS_REG ==================================================== */ +/* ================================================== KDMA_SW_REQUEST_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ MEMCTRL ================ */ +/* =========================================================================================================================== */ + +/* ================================================== MEMCTRL_AUD_ARB_REG ================================================== */ +/* ================================================= MEMCTRL_CC312_ARB_REG ================================================= */ +/* =============================================== MEMCTRL_CIS_BASE_ADDR_REG =============================================== */ +/* ============================================== MEMCTRL_DYNAMIC_CLK_ON_REG =============================================== */ +/* ================================================ MEMCTRL_MST_CLK_EN_REG ================================================= */ +/* ================================================= MEMCTRL_PRIO_ARB_REG ================================================== */ +/* =================================================== MEMCTRL_STALL_REG =================================================== */ +/* ============================================== MEMCTRL_STATIC_CLK_OFF_REG =============================================== */ +/* ================================================== MEMCTRL_STATUS_REG =================================================== */ +/* ================================================== MEMCTRL_SYS_ARB_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ OQSPIF ================ */ +/* =========================================================================================================================== */ + +/* ================================================== OQSPIF_BURSTBRK_REG ================================================== */ +/* ================================================= OQSPIF_BURSTCMDA_REG ================================================== */ +/* ================================================= OQSPIF_BURSTCMDB_REG ================================================== */ +/* ================================================= OQSPIF_CHCKERASE_REG ================================================== */ +/* ================================================== OQSPIF_CTRLBUS_REG =================================================== */ +/* ================================================== OQSPIF_CTRLMODE_REG ================================================== */ +/* ================================================== OQSPIF_CTR_CTRL_REG ================================================== */ +/* ================================================= OQSPIF_CTR_EADDR_REG ================================================== */ +/* ================================================ OQSPIF_CTR_KEY_0_3_REG ================================================= */ +/* =============================================== OQSPIF_CTR_KEY_12_15_REG ================================================ */ +/* =============================================== OQSPIF_CTR_KEY_16_19_REG ================================================ */ +/* =============================================== OQSPIF_CTR_KEY_20_23_REG ================================================ */ +/* =============================================== OQSPIF_CTR_KEY_24_27_REG ================================================ */ +/* =============================================== OQSPIF_CTR_KEY_28_31_REG ================================================ */ +/* ================================================ OQSPIF_CTR_KEY_4_7_REG ================================================= */ +/* ================================================ OQSPIF_CTR_KEY_8_11_REG ================================================ */ +/* =============================================== OQSPIF_CTR_NONCE_0_3_REG ================================================ */ +/* =============================================== OQSPIF_CTR_NONCE_4_7_REG ================================================ */ +/* ================================================= OQSPIF_CTR_SADDR_REG ================================================== */ +/* ================================================= OQSPIF_DUMMYDATA_REG ================================================== */ +/* ================================================= OQSPIF_ERASECMDA_REG ================================================== */ +/* ================================================= OQSPIF_ERASECMDB_REG ================================================== */ +/* ================================================= OQSPIF_ERASECMDC_REG ================================================== */ +/* ================================================= OQSPIF_ERASECTRL_REG ================================================== */ +/* ===================================================== OQSPIF_GP_REG ===================================================== */ +/* ================================================== OQSPIF_READDATA_REG ================================================== */ +/* ================================================== OQSPIF_RECVDATA_REG ================================================== */ +/* ================================================= OQSPIF_STATUSCMD_REG ================================================== */ +/* =================================================== OQSPIF_STATUS_REG =================================================== */ +/* ================================================= OQSPIF_WRITEDATA_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ OTPC ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== OTPC_MODE_REG ===================================================== */ +/* ===================================================== OTPC_STAT_REG ===================================================== */ +/* ================================================== OTPC_TEST_PWORD_REG ================================================== */ +/* ===================================================== OTPC_TEST_REG ===================================================== */ +/* ===================================================== OTPC_TIM1_REG ===================================================== */ +/* ===================================================== OTPC_TIM2_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ PSK ================ */ +/* =========================================================================================================================== */ + +/* =================================================== PSK_SHA1_CTRL_REG =================================================== */ +/* ================================================== PSK_SHA1_DATA_0_REG ================================================== */ +/* ================================================== PSK_SHA1_DATA_1_REG ================================================== */ +/* ================================================== PSK_SHA1_DATA_2_REG ================================================== */ +/* ================================================== PSK_SHA1_DATA_3_REG ================================================== */ +/* ================================================== PSK_SHA1_DATA_4_REG ================================================== */ +/* ================================================= PSK_SHA1_DIGEST_0_REG ================================================= */ +/* ================================================= PSK_SHA1_DIGEST_1_REG ================================================= */ +/* ================================================= PSK_SHA1_DIGEST_2_REG ================================================= */ +/* ================================================= PSK_SHA1_DIGEST_3_REG ================================================= */ +/* ================================================= PSK_SHA1_DIGEST_4_REG ================================================= */ +/* ================================================== PSK_SHA1_IHV1_0_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV1_1_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV1_2_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV1_3_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV1_4_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV2_0_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV2_1_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV2_2_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV2_3_REG ================================================== */ +/* ================================================== PSK_SHA1_IHV2_4_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ QSPIC ================ */ +/* =========================================================================================================================== */ + +/* ================================================== QSPIC_AWRITECMD_REG ================================================== */ +/* ================================================== QSPIC_BURSTBRK_REG =================================================== */ +/* ================================================== QSPIC_BURSTCMDA_REG ================================================== */ +/* ================================================== QSPIC_BURSTCMDB_REG ================================================== */ +/* ================================================== QSPIC_CHCKERASE_REG ================================================== */ +/* =================================================== QSPIC_CTRLBUS_REG =================================================== */ +/* ================================================== QSPIC_CTRLMODE_REG =================================================== */ +/* ================================================== QSPIC_DUMMYDATA_REG ================================================== */ +/* ================================================== QSPIC_ERASECMDA_REG ================================================== */ +/* ================================================== QSPIC_ERASECMDB_REG ================================================== */ +/* ================================================== QSPIC_ERASECTRL_REG ================================================== */ +/* ===================================================== QSPIC_GP_REG ====================================================== */ +/* =================================================== QSPIC_MEMBLEN_REG =================================================== */ +/* ================================================== QSPIC_READDATA_REG =================================================== */ +/* ================================================== QSPIC_RECVDATA_REG =================================================== */ +/* ================================================== QSPIC_STATUSCMD_REG ================================================== */ +/* =================================================== QSPIC_STATUS_REG ==================================================== */ +/* ================================================== QSPIC_WRITEDATA_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ RETMEMCTRL ================ */ +/* =========================================================================================================================== */ + +/* ============================================= RETMEMCTRL_DYNAMIC_CLK_ON_REG ============================================= */ +/* =============================================== RETMEMCTRL_MST_CLK_EN_REG =============================================== */ +/* ================================================ RETMEMCTRL_PRIO_ARB_REG ================================================ */ +/* ================================================= RETMEMCTRL_STALL_REG ================================================== */ +/* ============================================= RETMEMCTRL_STATIC_CLK_OFF_REG ============================================= */ +/* ================================================= RETMEMCTRL_STATUS_REG ================================================= */ + +/* =========================================================================================================================== */ +/* ================ RFMON ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== RFMON_ADDR_REG ===================================================== */ +/* ================================================== RFMON_CRV_ADDR_REG =================================================== */ +/* =================================================== RFMON_CRV_LEN_REG =================================================== */ +/* ==================================================== RFMON_CTRL_REG ===================================================== */ +/* ===================================================== RFMON_LEN_REG ===================================================== */ +/* ==================================================== RFMON_STAT_REG ===================================================== */ + +/* =========================================================================================================================== */ +/* ================ RTC ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== BCFM_IRQ_EN_REG ==================================================== */ +/* ================================================== BCFM_IRQ_STATUS_REG ================================================== */ +/* ==================================================== BCFM_OP_EN_REG ===================================================== */ +/* ================================================== BCFM_OP_STATUS_REG =================================================== */ +/* ================================================= BCFM_REQ_CLR_IRQ_REG ================================================== */ +/* =================================================== BCFM_TOT_CYC_REG ==================================================== */ +/* ==================================================== BOR_CIRCUIT_REG ==================================================== */ +/* ==================================================== CLK_XTAL32K_REG ==================================================== */ +/* ================================================== CNT_BASE_TESTI_REG =================================================== */ +/* ===================================================== CNT_TESTI_REG ===================================================== */ +/* ===================================================== COMP_INT_REG ====================================================== */ +/* =================================================== DCDC_CNTL_OFF_REG =================================================== */ +/* ==================================================== ENABLE_CTRL_REG ==================================================== */ +/* ===================================================== FRC_CNT_0_REG ===================================================== */ +/* ===================================================== FRC_CNT_1_REG ===================================================== */ +/* =================================================== GPIO_WAKEUP0_REG ==================================================== */ +/* =================================================== GPIO_WAKEUP1_REG ==================================================== */ +/* ====================================================== INT_THR_REG ====================================================== */ +/* ================================================= IP4_FLDO_BG_CONT_REG ================================================== */ +/* ==================================================== LDO_ENABLE2_REG ==================================================== */ +/* ==================================================== LDO_ENABLE_REG ===================================================== */ +/* ===================================================== PULSE_CNT_REG ===================================================== */ +/* ====================================================== RCX32K_REG ======================================================= */ +/* ==================================================== READ_STATUS_REG ==================================================== */ +/* =================================================== RTC_ACC_ADDR_REG ==================================================== */ +/* ================================================== RTC_ACC_AUTO_EN_REG ================================================== */ +/* =================================================== RTC_ACC_BUSY_REG ==================================================== */ +/* ================================================== RTC_ACC_OP_TYPE_REG ================================================== */ +/* ==================================================== RTC_ACC_REQ_REG ==================================================== */ +/* =================================================== RTC_ACC_WDATA_REG =================================================== */ +/* ================================================== RTC_CLK_GR_CYC_REG =================================================== */ +/* ==================================================== RTC_CLK_INV_REG ==================================================== */ +/* ===================================================== RTC_EDGE_REG ====================================================== */ +/* ================================================== RTC_EXP_CLR_IRQ_REG ================================================== */ +/* ================================================== RTC_EXP_IRQ_EN_REG =================================================== */ +/* ================================================== RTC_EXP_OP_STS_REG =================================================== */ +/* ==================================================== RTC_EXP_TH0_REG ==================================================== */ +/* ==================================================== RTC_EXP_TH1_REG ==================================================== */ +/* ================================================== RTC_FRC_STATUS_REG =================================================== */ +/* ====================================================== RTC_IF_REG ======================================================= */ +/* ==================================================== RTC_IRQ_EN_REG ===================================================== */ +/* ================================================== RTC_IRQ_STATUS_REG =================================================== */ +/* ==================================================== RTC_MIRROR_REG ===================================================== */ +/* ==================================================== RTC_MR_FRC0_REG ==================================================== */ +/* ==================================================== RTC_MR_FRC1_REG ==================================================== */ +/* ================================================== RTC_MR_SEL_8040_REG ================================================== */ +/* ====================================================== RTC_REQ_REG ====================================================== */ +/* ==================================================== RTM_CONTROL_REG ==================================================== */ +/* ================================================ TEST_ULDO_SLP_CTRL_REG ================================================= */ +/* ===================================================== ULDO_CONT_REG ===================================================== */ +/* =================================================== WAKEUP_CNT_0_REG ==================================================== */ +/* =================================================== WAKEUP_CNT_1_REG ==================================================== */ +/* ================================================== WAKEUP_SRC_CLR_REG =================================================== */ +/* ================================================ WAKEUP_SRC_CLR_SIG_REG ================================================= */ +/* ================================================= WDOG_CNT_BIT_POS_REG ================================================== */ +/* ==================================================== XADC12_CNTL_REG ==================================================== */ +/* =================================================== XADC12_SP_NUM_REG =================================================== */ +/* =================================================== XADC12_THR01_REG ==================================================== */ +/* =================================================== XADC12_THR23_REG ==================================================== */ +/* ================================================= XADC12_TIMER_SET_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ SDEMMC ================ */ +/* =========================================================================================================================== */ + +/* ============================================== SDEMMC_ADMAERRORSTATUS_REG =============================================== */ +/* ============================================= SDEMMC_ADMA_SYS_ADDR_LOW_REG ============================================== */ +/* ============================================ SDEMMC_ADMA_SYS_ADDR_UPPER_REG ============================================= */ +/* ============================================= SDEMMC_AUTOCMDERRORSTATUS_REG ============================================= */ +/* =================================================== SDEMMC_BLOCK_REG ==================================================== */ +/* ============================================= SDEMMC_BOOTTIMEOUT_CTRL__REG ============================================== */ +/* =============================================== SDEMMC_BUFFERDATAPORT_REG =============================================== */ +/* =============================================== SDEMMC_CAPABILITIES0_REG ================================================ */ +/* =============================================== SDEMMC_CAPABILITIES1_REG ================================================ */ +/* =============================================== SDEMMC_DEBUGSELECTION_REG =============================================== */ +/* ============================================ SDEMMC_FORCE_EVENET_ERRSTAT_REG ============================================ */ +/* ============================================= SDEMMC_GLB_ITNR_SIGNAL_EN_REG ============================================= */ +/* ============================================= SDEMMC_GLB_ITNR_STATUS_EN_REG ============================================= */ +/* ============================================== SDEMMC_GLB_ITNR_STATUS_REG =============================================== */ +/* ================================================ SDEMMC_HOST_CTRL_1_REG ================================================= */ +/* ============================================ SDEMMC_MAX_CUR_CAPABILITIES_REG ============================================ */ +/* =========================================== SDEMMC_NORMAL_ITNR_SIGNAL_EN_REG ============================================ */ +/* =========================================== SDEMMC_NORMAL_ITNR_STATUS_EN_REG ============================================ */ +/* ============================================= SDEMMC_NORMAL_ITNR_STATUS_REG ============================================= */ +/* ================================================ SDEMMC_PRESENTSTATE_REG ================================================ */ +/* ================================================ SDEMMC_PRESETVALUE0_REG ================================================ */ +/* ================================================ SDEMMC_PRESETVALUE1_REG ================================================ */ +/* ================================================ SDEMMC_PRESETVALUE2_REG ================================================ */ +/* ================================================ SDEMMC_PRESETVALUE3_REG ================================================ */ +/* ================================================= SDEMMC_RESPONSE0_REG ================================================== */ +/* ================================================= SDEMMC_RESPONSE1_REG ================================================== */ +/* ================================================= SDEMMC_RESPONSE2_REG ================================================== */ +/* ================================================= SDEMMC_RESPONSE3_REG ================================================== */ +/* =========================================== SDEMMC_SDMA_SYS_ADDR__ARGU_2_REG ============================================ */ +/* ============================================== SDEMMC_SHAREDBUS_CTRL__REG =============================================== */ +/* ============================================== SDEMMC_SLOT_ITNR_STATUS_REG ============================================== */ +/* ============================================ SDEMMC_TRANSFERMODE_COMMAND_REG ============================================ */ +/* =================================================== SDEMMC_VENDOR_REG =================================================== */ +/* ================================================== SDEMMC__ARGU_1_REG =================================================== */ +/* ================================================ SDEMMC__CLK__CTRL__REG ================================================= */ + +/* =========================================================================================================================== */ +/* ================ SDIO ================ */ +/* =========================================================================================================================== */ + +/* ============================================= SDIO_ADMA_SYSTEM_ADDRESS_REG ============================================== */ +/* ============================================== SDIO_AHB_FN0_INT_ENABLE_REG ============================================== */ +/* ================================================= SDIO_AHB_FN0_INT_REG ================================================== */ +/* ============================================== SDIO_AHB_FN1_INT_ENABLE_REG ============================================== */ +/* ================================================= SDIO_AHB_FN1_INT_REG ================================================== */ +/* ============================================== SDIO_AHB_SDIOTRANSCOUNT_REG ============================================== */ +/* ================================================ SDIO_AHB_TRANSCOUNT_REG ================================================ */ +/* =================================================== SDIO_ARGUMENT_REG =================================================== */ +/* ==================================================== SDIO_ARM_GP_REG ==================================================== */ +/* =================================================== SDIO_BLKSIZE_REG ==================================================== */ +/* =================================================== SDIO_CARDRDY_REG ==================================================== */ +/* ===================================================== SDIO_CCCR_REG ===================================================== */ +/* =============================================== SDIO_CLK_DELAY_TIMER_REG ================================================ */ +/* ================================================= SDIO_CLOCK_WAKEUP_REG ================================================= */ +/* ================================================= SDIO_CSA_POINTER_REG ================================================== */ +/* ===================================================== SDIO_FBR_REG ====================================================== */ +/* ==================================================== SDIO_FUNRDY_REG ==================================================== */ +/* ================================================= SDIO_GLB_INT_ENA_REG ================================================== */ +/* ================================================= SDIO_GLB_INT_STS_REG ================================================== */ +/* ================================================== SDIO_INTERRUPT_REG =================================================== */ +/* ===================================================== SDIO_IOR_REG ====================================================== */ +/* ================================================= SDIO_IO_ACC_MODE_REG ================================================== */ +/* =============================================== SDIO_LAST_FETCH_ADDR_REG ================================================ */ +/* ===================================================== SDIO_OCR_REG ====================================================== */ +/* ================================================ SDIO_POWER_CONTROL_REG ================================================= */ +/* ================================================= SDIO_POWER_STATE_REG ================================================== */ +/* =================================================== SDIO_RDBLKCNT_REG =================================================== */ +/* =================================================== SDIO_RDDATRDY_REG =================================================== */ +/* ================================================== SDIO_SD_HOST_GP_REG ================================================== */ +/* ================================================= SDIO_SOFT_RST_AHB_REG ================================================= */ +/* ================================================= SDIO_UHS_SUPPORT_REG ================================================== */ +/* =================================================== SDIO_WRBLKCNT_REG =================================================== */ + +/* =========================================================================================================================== */ +/* ================ SPI ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== SPI_CLOCK_REG ===================================================== */ +/* ==================================================== SPI_CONFIG_REG ===================================================== */ +/* =================================================== SPI_CS_CONFIG_REG =================================================== */ +/* ===================================================== SPI_CTRL_REG ====================================================== */ +/* ================================================== SPI_FIFO_CONFIG_REG ================================================== */ +/* =================================================== SPI_FIFO_READ_REG =================================================== */ +/* ================================================== SPI_FIFO_STATUS_REG ================================================== */ +/* ================================================== SPI_FIFO_WRITE_REG =================================================== */ +/* =================================================== SPI_IRQ_MASK_REG ==================================================== */ +/* ==================================================== SPI_STATUS_REG ===================================================== */ +/* ================================================ SPI_TXBUFFER_FORCE_REG ================================================= */ + +/* =========================================================================================================================== */ +/* ================ SPI2 ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== SPI2_CLOCK_REG ===================================================== */ +/* ==================================================== SPI2_CONFIG_REG ==================================================== */ +/* ================================================== SPI2_CS_CONFIG_REG =================================================== */ +/* ===================================================== SPI2_CTRL_REG ===================================================== */ +/* ================================================= SPI2_FIFO_CONFIG_REG ================================================== */ +/* ================================================== SPI2_FIFO_READ_REG =================================================== */ +/* ================================================= SPI2_FIFO_STATUS_REG ================================================== */ +/* ================================================== SPI2_FIFO_WRITE_REG ================================================== */ +/* =================================================== SPI2_IRQ_MASK_REG =================================================== */ +/* ==================================================== SPI2_STATUS_REG ==================================================== */ +/* ================================================ SPI2_TXBUFFER_FORCE_REG ================================================ */ + +/* =========================================================================================================================== */ +/* ================ SRC_FIFO_IF ================ */ +/* =========================================================================================================================== */ + +/* ================================================= APU_DAI_FIFO_IN1_REG ================================================== */ +/* ================================================= APU_DAI_FIFO_IN2_REG ================================================== */ +/* ================================================= APU_DAI_FIFO_OUT1_REG ================================================= */ +/* ================================================= APU_DAI_FIFO_OUT2_REG ================================================= */ +/* ================================================== APU_FIFO_STATUS_REG ================================================== */ +/* ================================================= APU_SRC_FIFO_IN1_REG ================================================== */ +/* ================================================= APU_SRC_FIFO_IN2_REG ================================================== */ +/* ================================================= APU_SRC_FIFO_OUT1_REG ================================================= */ +/* ================================================= APU_SRC_FIFO_OUT2_REG ================================================= */ + +/* =========================================================================================================================== */ +/* ================ SRC_IF ================ */ +/* =========================================================================================================================== */ + +/* ================================================= APU_DAI_FIFO_CTRL_REG ================================================= */ +/* ================================================ APU_SRC_COEF0A_SET1_REG ================================================ */ +/* ================================================ APU_SRC_COEF0A_SET2_REG ================================================ */ +/* ================================================ APU_SRC_COEF10_SET1_REG ================================================ */ +/* ================================================ APU_SRC_COEF10_SET2_REG ================================================ */ +/* ================================================ APU_SRC_COEF32_SET1_REG ================================================ */ +/* ================================================ APU_SRC_COEF32_SET2_REG ================================================ */ +/* ================================================ APU_SRC_COEF54_SET1_REG ================================================ */ +/* ================================================ APU_SRC_COEF54_SET2_REG ================================================ */ +/* ================================================ APU_SRC_COEF76_SET1_REG ================================================ */ +/* ================================================ APU_SRC_COEF76_SET2_REG ================================================ */ +/* ================================================ APU_SRC_COEF98_SET1_REG ================================================ */ +/* ================================================ APU_SRC_COEF98_SET2_REG ================================================ */ +/* =================================================== APU_SRC_CTRL_REG ==================================================== */ +/* ================================================= APU_SRC_FIFO_CTRL_REG ================================================= */ +/* ==================================================== APU_SRC_IN1_REG ==================================================== */ +/* ==================================================== APU_SRC_IN2_REG ==================================================== */ +/* =================================================== APU_SRC_IN_FS_REG =================================================== */ +/* =================================================== APU_SRC_OUT1_REG ==================================================== */ +/* =================================================== APU_SRC_OUT2_REG ==================================================== */ +/* ================================================== APU_SRC_OUT_FS_REG =================================================== */ + +/* =========================================================================================================================== */ +/* ================ SYS_WDOG ================ */ +/* =========================================================================================================================== */ + +/* =================================================== WATCHDOG_CTRL_REG =================================================== */ +/* ===================================================== WATCHDOG_REG ====================================================== */ + +/* =========================================================================================================================== */ +/* ================ SYSBUS ================ */ +/* =========================================================================================================================== */ + +/* =================================================== AHB_DMA_CCLM1_REG =================================================== */ +/* =================================================== AHB_DMA_CCLM2_REG =================================================== */ +/* =================================================== AHB_DMA_CCLM3_REG =================================================== */ +/* =================================================== AHB_DMA_CCLM4_REG =================================================== */ +/* =================================================== AHB_DMA_CCLM5_REG =================================================== */ +/* =================================================== AHB_DMA_CCLM6_REG =================================================== */ +/* =================================================== AHB_DMA_CCLM7_REG =================================================== */ +/* ================================================ AHB_DMA_DFLT_MASTER_REG ================================================ */ +/* ==================================================== AHB_DMA_PL1_REG ==================================================== */ +/* ==================================================== AHB_DMA_PL2_REG ==================================================== */ +/* ==================================================== AHB_DMA_PL3_REG ==================================================== */ +/* ==================================================== AHB_DMA_PL4_REG ==================================================== */ +/* ==================================================== AHB_DMA_PL5_REG ==================================================== */ +/* ==================================================== AHB_DMA_PL6_REG ==================================================== */ +/* ==================================================== AHB_DMA_PL7_REG ==================================================== */ +/* ==================================================== AHB_DMA_TCL_REG ==================================================== */ +/* ================================================== AHB_DMA_VERSION_REG ================================================== */ +/* =================================================== AHB_DMA_WTEN_REG ==================================================== */ + +/* =========================================================================================================================== */ +/* ================ SYSBUS_ICM ================ */ +/* =========================================================================================================================== */ + +/* ==================================================== AHBSYS_ARB_REG ===================================================== */ +/* ====================================================== OTP_ARB_REG ====================================================== */ +/* ==================================================== QSPIRAM_ARB_REG ==================================================== */ + +/* =========================================================================================================================== */ +/* ================ TDES ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== CBC_IV_0_REG ====================================================== */ +/* ===================================================== CBC_IV_1_REG ====================================================== */ +/* =================================================== TDES_CBC_CTRL_REG =================================================== */ +/* =================================================== TDES_INPUT_0_REG ==================================================== */ +/* =================================================== TDES_INPUT_1_REG ==================================================== */ +/* ==================================================== TDES_KEY1_0_REG ==================================================== */ +/* ==================================================== TDES_KEY1_1_REG ==================================================== */ +/* ==================================================== TDES_KEY2_0_REG ==================================================== */ +/* ==================================================== TDES_KEY2_1_REG ==================================================== */ +/* ==================================================== TDES_KEY3_0_REG ==================================================== */ +/* ==================================================== TDES_KEY3_1_REG ==================================================== */ +/* =================================================== TDES_OUTPUT_0_REG =================================================== */ +/* =================================================== TDES_OUTPUT_1_REG =================================================== */ + +/* =========================================================================================================================== */ +/* ================ TIMER ================ */ +/* =========================================================================================================================== */ + +/* ================================================ TIMER_CAPTURE_GPIO1_REG ================================================ */ +/* ================================================ TIMER_CAPTURE_GPIO2_REG ================================================ */ +/* ================================================ TIMER_CAPTURE_GPIO3_REG ================================================ */ +/* ================================================ TIMER_CAPTURE_GPIO4_REG ================================================ */ +/* ============================================== TIMER_CLEAR_GPIO_EVENT_REG =============================================== */ +/* =============================================== TIMER_CLEAR_IRQ_PULSE_REG =============================================== */ +/* ================================================== TIMER_CLEAR_IRQ_REG ================================================== */ +/* ==================================================== TIMER_CTRL_REG ===================================================== */ +/* ================================================= TIMER_GPIO1_CONF_REG ================================================== */ +/* ================================================= TIMER_GPIO2_CONF_REG ================================================== */ +/* ================================================= TIMER_GPIO3_CONF_REG ================================================== */ +/* ================================================= TIMER_GPIO4_CONF_REG ================================================== */ +/* =============================================== TIMER_ONESHOT_TRIGGER_REG =============================================== */ +/* ================================================ TIMER_PRESCALER_VAL_REG ================================================ */ +/* ================================================ TIMER_PRE_SETTINGS_REG ================================================= */ +/* =============================================== TIMER_PULSE_CNT_CTRL_REG ================================================ */ +/* =============================================== TIMER_PULSE_GPIO_SEL_REG ================================================ */ +/* ================================================== TIMER_PWM_CTRL_REG =================================================== */ +/* ================================================== TIMER_PWM_SYNC_REG =================================================== */ +/* ================================================== TIMER_SETTINGS_REG =================================================== */ +/* ================================================== TIMER_SHOTWIDTH_REG ================================================== */ +/* =================================================== TIMER_STATUS_REG ==================================================== */ +/* ================================================== TIMER_TIMER_VAL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ TIMER2 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER2_CAPTURE_GPIO1_REG ================================================ */ +/* =============================================== TIMER2_CAPTURE_GPIO2_REG ================================================ */ +/* ============================================== TIMER2_CLEAR_IRQ_PULSE_REG =============================================== */ +/* ================================================= TIMER2_CLEAR_IRQ_REG ================================================== */ +/* ==================================================== TIMER2_CTRL_REG ==================================================== */ +/* ================================================= TIMER2_GPIO1_CONF_REG ================================================= */ +/* ================================================= TIMER2_GPIO2_CONF_REG ================================================= */ +/* =============================================== TIMER2_PRESCALER_VAL_REG ================================================ */ +/* ================================================ TIMER2_PRE_SETTINGS_REG ================================================ */ +/* =============================================== TIMER2_PULSE_CNT_CTRL_REG =============================================== */ +/* =============================================== TIMER2_PULSE_GPIO_SEL_REG =============================================== */ +/* ================================================== TIMER2_PWM_CTRL_REG ================================================== */ +/* ================================================== TIMER2_SETTINGS_REG ================================================== */ +/* ================================================= TIMER2_SHOTWIDTH_REG ================================================== */ +/* =================================================== TIMER2_STATUS_REG =================================================== */ +/* ================================================= TIMER2_TIMER_VAL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ TIMER3 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER3_CAPTURE_GPIO1_REG ================================================ */ +/* =============================================== TIMER3_CAPTURE_GPIO2_REG ================================================ */ +/* ============================================== TIMER3_CLEAR_IRQ_PULSE_REG =============================================== */ +/* ================================================= TIMER3_CLEAR_IRQ_REG ================================================== */ +/* ==================================================== TIMER3_CTRL_REG ==================================================== */ +/* ================================================= TIMER3_GPIO1_CONF_REG ================================================= */ +/* ================================================= TIMER3_GPIO2_CONF_REG ================================================= */ +/* =============================================== TIMER3_PRESCALER_VAL_REG ================================================ */ +/* ================================================ TIMER3_PRE_SETTINGS_REG ================================================ */ +/* =============================================== TIMER3_PULSE_CNT_CTRL_REG =============================================== */ +/* =============================================== TIMER3_PULSE_GPIO_SEL_REG =============================================== */ +/* ================================================== TIMER3_PWM_CTRL_REG ================================================== */ +/* ================================================== TIMER3_SETTINGS_REG ================================================== */ +/* ================================================= TIMER3_SHOTWIDTH_REG ================================================== */ +/* =================================================== TIMER3_STATUS_REG =================================================== */ +/* ================================================= TIMER3_TIMER_VAL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ TIMER4 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER4_CAPTURE_GPIO1_REG ================================================ */ +/* =============================================== TIMER4_CAPTURE_GPIO2_REG ================================================ */ +/* ============================================== TIMER4_CLEAR_IRQ_PULSE_REG =============================================== */ +/* ================================================= TIMER4_CLEAR_IRQ_REG ================================================== */ +/* ==================================================== TIMER4_CTRL_REG ==================================================== */ +/* ================================================= TIMER4_GPIO1_CONF_REG ================================================= */ +/* ================================================= TIMER4_GPIO2_CONF_REG ================================================= */ +/* =============================================== TIMER4_PRESCALER_VAL_REG ================================================ */ +/* ================================================ TIMER4_PRE_SETTINGS_REG ================================================ */ +/* =============================================== TIMER4_PULSE_CNT_CTRL_REG =============================================== */ +/* =============================================== TIMER4_PULSE_GPIO_SEL_REG =============================================== */ +/* ================================================== TIMER4_PWM_CTRL_REG ================================================== */ +/* ================================================== TIMER4_SETTINGS_REG ================================================== */ +/* ================================================= TIMER4_SHOTWIDTH_REG ================================================== */ +/* =================================================== TIMER4_STATUS_REG =================================================== */ +/* ================================================= TIMER4_TIMER_VAL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ TIMER5 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER5_CAPTURE_GPIO1_REG ================================================ */ +/* =============================================== TIMER5_CAPTURE_GPIO2_REG ================================================ */ +/* =============================================== TIMER5_CAPTURE_GPIO3_REG ================================================ */ +/* =============================================== TIMER5_CAPTURE_GPIO4_REG ================================================ */ +/* ============================================== TIMER5_CLEAR_GPIO_EVENT_REG ============================================== */ +/* ============================================== TIMER5_CLEAR_IRQ_PULSE_REG =============================================== */ +/* ================================================= TIMER5_CLEAR_IRQ_REG ================================================== */ +/* ==================================================== TIMER5_CTRL_REG ==================================================== */ +/* ================================================= TIMER5_GPIO1_CONF_REG ================================================= */ +/* ================================================= TIMER5_GPIO2_CONF_REG ================================================= */ +/* ================================================= TIMER5_GPIO3_CONF_REG ================================================= */ +/* ================================================= TIMER5_GPIO4_CONF_REG ================================================= */ +/* ============================================== TIMER5_ONESHOT_TRIGGER_REG =============================================== */ +/* =============================================== TIMER5_PRESCALER_VAL_REG ================================================ */ +/* ================================================ TIMER5_PRE_SETTINGS_REG ================================================ */ +/* =============================================== TIMER5_PULSE_CNT_CTRL_REG =============================================== */ +/* =============================================== TIMER5_PULSE_GPIO_SEL_REG =============================================== */ +/* ================================================== TIMER5_PWM_CTRL_REG ================================================== */ +/* ================================================== TIMER5_PWM_SYNC_REG ================================================== */ +/* ================================================== TIMER5_SETTINGS_REG ================================================== */ +/* ================================================= TIMER5_SHOTWIDTH_REG ================================================== */ +/* =================================================== TIMER5_STATUS_REG =================================================== */ +/* ================================================= TIMER5_TIMER_VAL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ TIMER6 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER6_CAPTURE_GPIO1_REG ================================================ */ +/* =============================================== TIMER6_CAPTURE_GPIO2_REG ================================================ */ +/* ============================================== TIMER6_CLEAR_IRQ_PULSE_REG =============================================== */ +/* ================================================= TIMER6_CLEAR_IRQ_REG ================================================== */ +/* ==================================================== TIMER6_CTRL_REG ==================================================== */ +/* ================================================= TIMER6_GPIO1_CONF_REG ================================================= */ +/* ================================================= TIMER6_GPIO2_CONF_REG ================================================= */ +/* =============================================== TIMER6_PRESCALER_VAL_REG ================================================ */ +/* ================================================ TIMER6_PRE_SETTINGS_REG ================================================ */ +/* =============================================== TIMER6_PULSE_CNT_CTRL_REG =============================================== */ +/* =============================================== TIMER6_PULSE_GPIO_SEL_REG =============================================== */ +/* ================================================== TIMER6_PWM_CTRL_REG ================================================== */ +/* ================================================== TIMER6_SETTINGS_REG ================================================== */ +/* ================================================= TIMER6_SHOTWIDTH_REG ================================================== */ +/* =================================================== TIMER6_STATUS_REG =================================================== */ +/* ================================================= TIMER6_TIMER_VAL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ TIMER7 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER7_CAPTURE_GPIO1_REG ================================================ */ +/* =============================================== TIMER7_CAPTURE_GPIO2_REG ================================================ */ +/* ============================================== TIMER7_CLEAR_IRQ_PULSE_REG =============================================== */ +/* ================================================= TIMER7_CLEAR_IRQ_REG ================================================== */ +/* ==================================================== TIMER7_CTRL_REG ==================================================== */ +/* ================================================= TIMER7_GPIO1_CONF_REG ================================================= */ +/* ================================================= TIMER7_GPIO2_CONF_REG ================================================= */ +/* =============================================== TIMER7_PRESCALER_VAL_REG ================================================ */ +/* ================================================ TIMER7_PRE_SETTINGS_REG ================================================ */ +/* =============================================== TIMER7_PULSE_CNT_CTRL_REG =============================================== */ +/* =============================================== TIMER7_PULSE_GPIO_SEL_REG =============================================== */ +/* ================================================== TIMER7_PWM_CTRL_REG ================================================== */ +/* ================================================== TIMER7_SETTINGS_REG ================================================== */ +/* ================================================= TIMER7_SHOTWIDTH_REG ================================================== */ +/* =================================================== TIMER7_STATUS_REG =================================================== */ +/* ================================================= TIMER7_TIMER_VAL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ TIMER8 ================ */ +/* =========================================================================================================================== */ + +/* =============================================== TIMER8_CAPTURE_GPIO1_REG ================================================ */ +/* =============================================== TIMER8_CAPTURE_GPIO2_REG ================================================ */ +/* ============================================== TIMER8_CLEAR_IRQ_PULSE_REG =============================================== */ +/* ================================================= TIMER8_CLEAR_IRQ_REG ================================================== */ +/* ==================================================== TIMER8_CTRL_REG ==================================================== */ +/* ================================================= TIMER8_GPIO1_CONF_REG ================================================= */ +/* ================================================= TIMER8_GPIO2_CONF_REG ================================================= */ +/* =============================================== TIMER8_PRESCALER_VAL_REG ================================================ */ +/* ================================================ TIMER8_PRE_SETTINGS_REG ================================================ */ +/* =============================================== TIMER8_PULSE_CNT_CTRL_REG =============================================== */ +/* =============================================== TIMER8_PULSE_GPIO_SEL_REG =============================================== */ +/* ================================================== TIMER8_PWM_CTRL_REG ================================================== */ +/* ================================================== TIMER8_SETTINGS_REG ================================================== */ +/* ================================================= TIMER8_SHOTWIDTH_REG ================================================== */ +/* =================================================== TIMER8_STATUS_REG =================================================== */ +/* ================================================= TIMER8_TIMER_VAL_REG ================================================== */ + +/* =========================================================================================================================== */ +/* ================ UART ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== UART_CR_REG ====================================================== */ +/* ==================================================== UART_DMACR_REG ===================================================== */ +/* ====================================================== UART_DR_REG ====================================================== */ +/* ===================================================== UART_FBRD_REG ===================================================== */ +/* ====================================================== UART_FR_REG ====================================================== */ +/* ===================================================== UART_IBRD_REG ===================================================== */ +/* ===================================================== UART_ICR_REG ====================================================== */ +/* ===================================================== UART_IFLS_REG ===================================================== */ +/* ===================================================== UART_IMSC_REG ===================================================== */ +/* ==================================================== UART_LCR_H_REG ===================================================== */ +/* ===================================================== UART_MIS_REG ====================================================== */ +/* ===================================================== UART_RIS_REG ====================================================== */ +/* =================================================== UART_RS485EN_REG ==================================================== */ +/* ===================================================== UART_RSR_REG ====================================================== */ +/* ===================================================== UART_SWFC_REG ===================================================== */ +/* ====================================================== UART_WA_REG ====================================================== */ + +/* =========================================================================================================================== */ +/* ================ UART2 ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== UART2_CR_REG ====================================================== */ +/* ==================================================== UART2_DMACR_REG ==================================================== */ +/* ===================================================== UART2_DR_REG ====================================================== */ +/* ==================================================== UART2_FBRD_REG ===================================================== */ +/* ===================================================== UART2_FR_REG ====================================================== */ +/* ==================================================== UART2_IBRD_REG ===================================================== */ +/* ===================================================== UART2_ICR_REG ===================================================== */ +/* ==================================================== UART2_IFLS_REG ===================================================== */ +/* ==================================================== UART2_IMSC_REG ===================================================== */ +/* ==================================================== UART2_LCR_H_REG ==================================================== */ +/* ===================================================== UART2_MIS_REG ===================================================== */ +/* ===================================================== UART2_RIS_REG ===================================================== */ +/* =================================================== UART2_RS485EN_REG =================================================== */ +/* ===================================================== UART2_RSR_REG ===================================================== */ +/* ==================================================== UART2_SWFC_REG ===================================================== */ +/* ===================================================== UART2_WA_REG ====================================================== */ + +/* =========================================================================================================================== */ +/* ================ UART3 ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== UART3_CR_REG ====================================================== */ +/* ==================================================== UART3_DMACR_REG ==================================================== */ +/* ===================================================== UART3_DR_REG ====================================================== */ +/* ==================================================== UART3_FBRD_REG ===================================================== */ +/* ===================================================== UART3_FR_REG ====================================================== */ +/* ==================================================== UART3_IBRD_REG ===================================================== */ +/* ===================================================== UART3_ICR_REG ===================================================== */ +/* ==================================================== UART3_IFLS_REG ===================================================== */ +/* ==================================================== UART3_IMSC_REG ===================================================== */ +/* ==================================================== UART3_LCR_H_REG ==================================================== */ +/* ===================================================== UART3_MIS_REG ===================================================== */ +/* ===================================================== UART3_RIS_REG ===================================================== */ +/* =================================================== UART3_RS485EN_REG =================================================== */ +/* ===================================================== UART3_RSR_REG ===================================================== */ +/* ==================================================== UART3_SWFC_REG ===================================================== */ +/* ===================================================== UART3_WA_REG ====================================================== */ + +/** @} */ /* End of group EnumValue_peripherals */ + + #ifdef __cplusplus +} + #endif + +#endif /* DA1640X_H */ + +/** @} */ /* End of group DA1640x */ + +/** @} */ /* End of group Renesas Electronics Corporation */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/renesas.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/renesas.h new file mode 100644 index 000000000000..878526080a9f --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/renesas.h @@ -0,0 +1,202 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/* Ensure Renesas MCU variation definitions are included to ensure MCU + * specific register variations are handled correctly. */ +#ifndef BSP_FEATURE_H + #error "INTERNAL ERROR: bsp_feature.h must be included before renesas.h." +#endif + +/** @addtogroup Renesas + * @{ + */ + +/** @addtogroup RA + * @{ + */ + +#ifndef RA_H + #define RA_H + + #ifdef __cplusplus +extern "C" { + #endif + + #include "cmsis_compiler.h" + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ +/* IRQn_Type is provided in bsp_exceptions.h. Vectors generated by the FSP Configuration tool are in vector_data.h */ + +/** @} */ /* End of group Configuration_of_CMSIS */ + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + + #if BSP_MCU_GROUP_RA0E1 + #include "R7FA0E107.h" + #elif BSP_MCU_GROUP_RA0E2 + #include "R7FA0E209.h" + #elif BSP_MCU_GROUP_RA0L1 + #include "R7FA0L107.h" + #elif BSP_MCU_GROUP_RA2A1 + #include "R7FA2A1AB.h" + #elif BSP_MCU_GROUP_RA2A2 + #include "R7FA2A2AD.h" + #elif BSP_MCU_GROUP_RA2E1 + #include "R7FA2E1A9.h" + #elif BSP_MCU_GROUP_RA2E2 + #include "R7FA2E2A7.h" + #elif BSP_MCU_GROUP_RA2E3 + #include "R7FA2E307.h" + #elif BSP_MCU_GROUP_RA2L1 + #include "R7FA2L1AB.h" + #elif BSP_MCU_GROUP_RA2L2 + #include "R7FA2L209.h" + #elif BSP_MCU_GROUP_RA2T1 + #include "R7FA2T107.h" + #elif BSP_MCU_GROUP_RA4C1 + #include "R7FA4C1BD.h" + #elif BSP_MCU_GROUP_RA4E1 + #include "R7FA4E10D.h" + #elif BSP_MCU_GROUP_RA4E2 + #include "R7FA4E2B9.h" + #elif BSP_MCU_GROUP_RA4M1 + #include "R7FA4M1AB.h" + #elif BSP_MCU_GROUP_RA4M2 + #include "R7FA4M2AD.h" + #elif BSP_MCU_GROUP_RA4M3 + #include "R7FA4M3AF.h" + #elif BSP_MCU_GROUP_RA4T1 + #include "R7FA4T1BB.h" + #elif BSP_MCU_GROUP_RA4W1 + #include "R7FA4W1AD.h" + #elif BSP_MCU_GROUP_RA4L1 + #include "R7FA4L1BD.h" + #elif BSP_MCU_GROUP_RA6E1 + #include "R7FA6E10F.h" + #elif BSP_MCU_GROUP_RA6E2 + #include "R7FA6E2BB.h" + #elif BSP_MCU_GROUP_RA6M1 + #include "R7FA6M1AD.h" + #elif BSP_MCU_GROUP_RA6M2 + #include "R7FA6M2AF.h" + #elif BSP_MCU_GROUP_RA6M3 + #include "R7FA6M3AH.h" + #elif BSP_MCU_GROUP_RA6M4 + #include "R7FA6M4AF.h" + #elif BSP_MCU_GROUP_RA6M5 + #include "R7FA6M5BH.h" + #elif BSP_MCU_GROUP_RA6T1 + #include "R7FA6T1AD.h" + #elif BSP_MCU_GROUP_RA6T2 + #include "R7FA6T2BD.h" + #elif BSP_MCU_GROUP_RA6T3 + #include "R7FA6T3BB.h" + #elif BSP_MCU_GROUP_RA8D1 + #include "R7FA8D1BH.h" + #elif BSP_MCU_GROUP_RA8E1 + #include "R7FA8E1AF.h" + #elif BSP_MCU_GROUP_RA8E2 + #include "R7FA8E2AF.h" + #elif BSP_MCU_GROUP_RA8M1 + #include "R7FA8M1AH.h" + #elif BSP_MCU_GROUP_RA8P1 + #if 0U == BSP_CFG_CPU_CORE + #include "R7KA8P1KF_core0.h" + #elif 1U == BSP_CFG_CPU_CORE + #include "R7KA8P1KF_core1.h" + #else + #warning "Unsupported CPU number" + #endif + #elif BSP_MCU_GROUP_RA8T1 + #include "R7FA8T1AH.h" + #elif BSP_MCU_GROUP_RA8T2 + #if 0U == BSP_CFG_CPU_CORE + #include "R7KA8T2LF_core0.h" + #elif 1U == BSP_CFG_CPU_CORE + #include "R7KA8T2LF_core1.h" + #else + #warning "Unsupported CPU number" + #endif + #elif BSP_MCU_GROUP_RA6B1 + #if defined(BOARD_RA6B1_PRODK) + #include "../../../../../bsp/cmsis/Device/RENESAS/Include/R7KA6B1BG.h" + #else + #if __has_include("../../../../../bsp/cmsis/Device/RENESAS/Include/D3108BA.h") + #include "../../../../../bsp/cmsis/Device/RENESAS/Include/D3108BA.h" + #else + #include "../../../../../bsp/cmsis/Device/RENESAS/Include/R7KA6B1BG.h" + #endif + #endif + #elif BSP_MCU_GROUP_RA6W1 + #include "../../../../../bsp/cmsis/Device/RENESAS/Include/R7SA6W1CE.h" + #elif BSP_MCU_GROUP_RA6W3 + #include "../../../../../bsp/cmsis/Device/RENESAS/Include/R7SA6W3xx.h" + #elif BSP_MCU_GROUP_RA6B2 + #include "../../../../../bsp/cmsis/Device/RENESAS/Include/D3333.h" + #elif BSP_MCU_GROUP_RA6U1 + #if defined(BOARD_RA6U1_EK) + #include "../../../../../bsp/cmsis/Device/RENESAS/Include/R7KA6U1BG.h" + #endif + #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/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/system.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/system.h new file mode 100644 index 000000000000..30afe29e7e06 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Include/system.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2026 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/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Source/startup.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Source/startup.c new file mode 100644 index 000000000000..bf21731c5216 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Source/startup.c @@ -0,0 +1,316 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#if BSP_TZ_SECURE_BUILD + #define BSP_TZ_STACK_SEAL_SIZE (8U) +#else + #define BSP_TZ_STACK_SEAL_SIZE (0U) +#endif + +#define BSP_PRV_MAGIC_WORD_ADDR (0x23010000) +#define BSP_PRV_MAGIC_WORD_0 (0xDEADBEEF) +#define BSP_PRV_MAGIC_WORD_1 (0xDEAD10CC) +#define BSP_PRV_DBG_DELAY_ITER (0x15000) + +/*********************************************************************************************************************** + * 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 Default_Handler(void); +void Reset_Handler(void); + +#if defined(__ICCARM__) +extern void __iar_program_start(void); + +#elif defined(__GNUC__) || defined(__ARMCC_VERSION) +extern void _start(void); +static void bsp_gcc_call_init_array(void); + +#endif + +#if (!BSP_TZ_NONSECURE_BUILD) && (BSP_CFG_STARTUP_MAGIC_CHECK) +static void bsp_debugger_attach_poll(void); + +#endif + +#if (BSP_CFG_IVT_COPY_ENABLE) +static void bsp_vector_table_copy(void); + +#endif + +#if (BSP_CFG_WAKEUP_RESET_HANDLER_ENABLE) +BSP_PLACE_CODE_IN_RAM static void Wakeup_Reset_Handler(void); +static void bsp_wakeup_reset_handler_set(void); + +#endif + +/*******************************************************************************************************************//** + * MCU starts executing here out of reset. Main stack pointer is set up already. + **********************************************************************************************************************/ +void Reset_Handler (void) +{ +#if (!BSP_TZ_NONSECURE_BUILD) && (BSP_CFG_STARTUP_MAGIC_CHECK) + bsp_debugger_attach_poll(); +#endif + +#if (BSP_CFG_IVT_COPY_ENABLE) + bsp_vector_table_copy(); +#endif + +#if (BSP_CFG_WAKEUP_RESET_HANDLER_ENABLE) + bsp_wakeup_reset_handler_set(); +#endif + + /* Initialize system using BSP. */ + SystemInit(); + +#if defined(__ICCARM__) + __iar_program_start(); +#elif defined(__GNUC__) || defined(__ARMCC_VERSION) + bsp_gcc_call_init_array(); + extern int entry(void); + entry(); +#endif + + while (1) + { + /* Infinite Loop. */ + } +} + +/*******************************************************************************************************************//** + * Run init array entries without invoking newlib _start(). + **********************************************************************************************************************/ +#if defined(__GNUC__) || defined(__ARMCC_VERSION) +static void bsp_gcc_call_init_array (void) +{ + extern void (* __preinit_array_start[])(void); + extern void (* __preinit_array_end[])(void); + extern void (* __init_array_start[])(void); + extern void (* __init_array_end[])(void); + + for (void (** p_func)(void) = __preinit_array_start; p_func < __preinit_array_end; p_func++) + { + (*p_func)(); + } + + for (void (** p_func)(void) = __init_array_start; p_func < __init_array_end; p_func++) + { + (*p_func)(); + } +} + +#endif + +/*******************************************************************************************************************//** + * Default exception handler. + **********************************************************************************************************************/ +void Default_Handler (void) +{ + CRG_TOP->SYS_CTRL_REG_b.DEBUGGER_ENABLE = 1; + + BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(0); + + while (1) + { + __NOP(); + } + + ; +} + +/* Main stack */ +uint8_t g_main_stack[BSP_CFG_STACK_MAIN_BYTES + BSP_TZ_STACK_SEAL_SIZE] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT); + +/* Heap */ +BSP_DONT_REMOVE uint8_t g_heap[BSP_CFG_HEAP_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT); + +/* All system exceptions in the vector table are weak references to Default_Handler. If the user wishes to handle + * these exceptions in their code they should define their own function with the same name. + */ +#if defined(__ICCARM__) + #define WEAK_REF_ATTRIBUTE + + #pragma weak NMI_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 HardFault_Handler(void); // Implemented in ARM assembly. +void NMI_Handler(void) WEAK_REF_ATTRIBUTE; +void MemManage_Handler(void) WEAK_REF_ATTRIBUTE; +void BusFault_Handler(void) WEAK_REF_ATTRIBUTE; +void UsageFault_Handler(void) WEAK_REF_ATTRIBUTE; +void SecureFault_Handler(void) WEAK_REF_ATTRIBUTE; +void SVC_Handler(void) WEAK_REF_ATTRIBUTE; +void DebugMon_Handler(void) WEAK_REF_ATTRIBUTE; +void PendSV_Handler(void) WEAK_REF_ATTRIBUTE; +void SysTick_Handler(void) WEAK_REF_ATTRIBUTE; + +/* Vector table. */ +BSP_DONT_REMOVE const exc_ptr_t __VECTOR_TABLE[BSP_CORTEX_VECTOR_TABLE_ENTRIES] BSP_PLACE_IN_SECTION( + BSP_SECTION_FIXED_VECTORS) = +{ + (exc_ptr_t) (&g_main_stack[0] + BSP_CFG_STACK_MAIN_BYTES), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* NMI Handler */ + HardFault_Handler, /* Hard Fault Handler */ + MemManage_Handler, /* MPU Fault Handler */ + BusFault_Handler, /* Bus Fault Handler */ + UsageFault_Handler, /* Usage Fault Handler */ + SecureFault_Handler, /* Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* SVCall Handler */ + DebugMon_Handler, /* Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* PendSV Handler */ + SysTick_Handler, /* SysTick Handler */ +}; + +#if BSP_CFG_IVT_COPY_ENABLE +BSP_DONT_REMOVE exc_ptr_t RAM_VECTOR_TABLE_COPY[BSP_VECTOR_TABLE_MAX_ENTRIES] BSP_PLACE_IN_SECTION( + ".fsp_vector_table_copy"); +BSP_DONT_REMOVE const fsp_vector_t g_vector_table[BSP_ICU_VECTOR_MAX_ENTRIES] BSP_PLACE_IN_SECTION( + BSP_SECTION_APPLICATION_VECTORS) __attribute__((weak)); + +/*******************************************************************************************************************//** + * Relocate the vector table to RAM. Substitute the Reset_Handler with the Wakeup_Reset_Handler for low power mode + * support. + **********************************************************************************************************************/ +static void bsp_vector_table_copy (void) +{ + if (((uint32_t) RAM_VECTOR_TABLE_COPY) != SCB->VTOR) + { + /* Copy Vector Table to allocated space in RAM. */ + for (uint8_t it = 0; it < BSP_CORTEX_VECTOR_TABLE_ENTRIES; it++) + { + RAM_VECTOR_TABLE_COPY[it] = __VECTOR_TABLE[it]; + } + + for (uint8_t it = 0; it < BSP_ICU_VECTOR_MAX_ENTRIES; it++) + { + RAM_VECTOR_TABLE_COPY[BSP_CORTEX_VECTOR_TABLE_ENTRIES + it] = g_vector_table[it]; + } + + /* Update VTOR value. */ + SCB->VTOR = ((uint32_t) RAM_VECTOR_TABLE_COPY); + + #if !BSP_TZ_NONSECURE_BUILD + SYSB->INITSVTOR_REG = ((uint32_t) RAM_VECTOR_TABLE_COPY); + #else + SYSB->INITNSVTOR_REG = ((uint32_t) RAM_VECTOR_TABLE_COPY); + #endif + } +} + +#endif + +#if (BSP_CFG_WAKEUP_RESET_HANDLER_ENABLE) + +void wakeup_from_deepsleep(void); + +BSP_PLACE_CODE_IN_RAM static void Wakeup_Reset_Handler (void) +{ + /* If this register is zeroed then this is a wakeup from deepsleep. + * Otherwise it is a cold boot. + */ + if (CRG_TOP->RESET_STAT_REG != 0) + { + Reset_Handler(); + } + else + { + /* Call to assembly function that will restore the state of the SYSCPU. */ + wakeup_from_deepsleep(); + + /* Wakeup from deepsleep returns execution to the function that called sleep. + * This should not be reached. + */ + BSP_CHECK_FATAL(0); + } +} + +static void bsp_wakeup_reset_handler_set (void) +{ + uint32_t * p_vector_table = (uint32_t *) SCB->VTOR; + + p_vector_table[1] = (uint32_t) Wakeup_Reset_Handler; +} + +#endif + +#if (!BSP_TZ_NONSECURE_BUILD) && (BSP_CFG_STARTUP_MAGIC_CHECK) + +/*******************************************************************************************************************//** + * Block execution until a debugger is attached if certain magic words are located in RAM. + **********************************************************************************************************************/ +static void bsp_debugger_attach_poll (void) +{ + volatile uint32_t * p_magic = (uint32_t *) BSP_PRV_MAGIC_WORD_ADDR; + + if ((BSP_PRV_MAGIC_WORD_0 == p_magic[0]) && + (BSP_PRV_MAGIC_WORD_0 == p_magic[1]) && + (BSP_PRV_MAGIC_WORD_0 == p_magic[2]) && + (BSP_PRV_MAGIC_WORD_1 == p_magic[3])) + { + uint32_t debug_setting = CRG_TOP->SYS_CTRL_REG; + + /* Enable debugger. */ + CRG_TOP->SYS_CTRL_REG = debug_setting | CRG_TOP_SYS_CTRL_REG_DEBUGGER_ENABLE_Msk; + + /* Refresh Watchdog */ + WDTSYS->WDTSYS_REG = 0xFF; + + for (volatile uint32_t it = BSP_PRV_DBG_DELAY_ITER; it > 0; it--) + { + ; + } + + /* Clear magic so that this is skipped in the event of a SW reset. */ + p_magic[0] = 0; + + CRG_TOP->SYS_CTRL_REG = debug_setting; + } +} + +#endif + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Source/system.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Source/system.c new file mode 100644 index 000000000000..bc849f109a5f --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/cmsis/Device/RENESAS/Source/system.c @@ -0,0 +1,721 @@ +/* +* Copyright (c) 2020 - 2026 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 + **********************************************************************************************************************/ + +/* Mask to select CP bits( 0xF00000 ) */ +#define CP_MASK (0xFU << 20) + +/* Key code for writing PRCR register. */ +#if defined(__ICCARM__) + #ifndef __Vectors + #define __Vectors __vector_table + #endif +#endif +#define BSP_PRV_STACK_LIMIT ((uint32_t) __Vectors[0] - BSP_CFG_STACK_MAIN_BYTES) +#define BSP_TZ_STACK_SEAL_VALUE (0xFEF5EDA5) + +#if defined(GPREG_DEBUG_REG_ETM_TRACE_MAP_ON_PINS_EN_Msk) + #define ETM_TRACE_ENABLE (GPREG->DEBUG_REG_b.ETM_TRACE_MAP_ON_PINS_EN) +#elif defined(GPREG_DEBUG_REG_ETM_ITM_TRACE_MAP_ON_PINS_EN_Msk) + #define ETM_TRACE_ENABLE (GPREG->DEBUG_REG_b.ETM_ITM_TRACE_MAP_ON_PINS_EN) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/** System Clock Frequency (Core Clock) */ +uint32_t SystemCoreClock BSP_SECTION_EARLY_INIT; +uint32_t g_bsp_reset_stat_reg BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); + +/* 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 * __VECTOR_TABLE[]; +extern uint8_t g_main_stack[]; + +extern void R_BSP_SecurityInit(void); + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +#if BSP_FEATURE_BSP_RESET_TRNG +static void bsp_reset_trng_circuit(void); + +#endif + +#if defined(__ICCARM__) + +void R_BSP_WarmStart(bsp_warm_start_event_t event); + + #pragma weak R_BSP_WarmStart + +#elif defined(__GNUC__) || defined(__ARMCC_VERSION) + +void R_BSP_WarmStart(bsp_warm_start_event_t event) __attribute__((weak)); + +#endif + +#if BSP_CFG_EARLY_INIT +static void bsp_init_uninitialized_vars(void); + +#endif + +__STATIC_FORCEINLINE void bsp_debugger_enable(void); +__STATIC_FORCEINLINE void bsp_clock_div_early_init(void); +__STATIC_FORCEINLINE void bsp_etm_trace_setup(void); +static void SystemRuntimeInit(const uint32_t external); + +#if !BSP_TZ_NONSECURE_BUILD +__STATIC_FORCEINLINE void bsp_sys_force_active(void); +__STATIC_FORCEINLINE void bsp_power_domains_early_init(void); +__STATIC_FORCEINLINE void bsp_mem_retain_early_init(void); +static void bsp_rails_early_init(void); + +#endif + +BSP_WEAK_REFERENCE __NO_RETURN void _exit(int __status); + +/*******************************************************************************************************************//** + * Initialize the MCU and the runtime environment. + **********************************************************************************************************************/ +void SystemInit (void) +{ + /** In Trustzone enabled project the g_bsp_reset_stat_reg is updated exclusively from the S application, + * which is executed first. The g_bsp_reset_stat_reg status can be read by NS application by calling the + * R_BSP_ResetStatusGet() + */ +#if !BSP_TZ_NONSECURE_BUILD + g_bsp_reset_stat_reg = CRG_TOP->RESET_STAT_REG; + CRG_TOP->RESET_STAT_REG = 0; +#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; + + /* ASPEN = 1 ==> Hardware should automatically preserve floating point + * context on exception entry and restore on exception return. + * LSPEN = 1 ==> Enable lazy context save of FP state. */ + FPU->FPCCR |= (FPU_FPCCR_ASPEN_Msk | FPU_FPCCR_LSPEN_Msk); +#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_CFG_EARLY_INIT + + /* Initialize uninitialized BSP variables early for use in R_BSP_WarmStart. */ + bsp_init_uninitialized_vars(); +#endif + + bsp_prv_halt_implementation_early_set(); + + /* TODO: Remove guard when device info is ready for other RAfW boards as well. */ +#if BSP_MCU_GROUP_RA6W1 + + /* Populate device information attributes. */ + BSP_CHECK_DEBUG(bsp_device_info_init()); +#endif + + bsp_debugger_enable(); + + /* Call pre clock initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_RESET); + + /* + * Setup the dividers for HCLK and PCLK defined by the user. + */ + bsp_clock_div_early_init(); + +#if 0 + + // TODO: Identify whether this code will be executed. If yes, then implement this function properly + // for all RAfW devices. + + /* + * Check that the firmware and the chip that it runs on are compatible with each other. + */ + BSP_CHECK_DEBUG(bsp_device_info_compatibility_check()); +#endif + + SystemRuntimeInit(0); +#if !BSP_FEATURE_FLASH_IS_INTERNAL + + /* TODO: Consider case where we also have some external PSRAM, that + * has not been properly setup to be transparent for reads/writes. + * In this case RAM variables present in that memory are never initialized, + * or a BusFault occurs here. + */ + SystemRuntimeInit(1); +#endif + +#if !BSP_TZ_NONSECURE_BUILD + bsp_sys_force_active(); + + bsp_rails_early_init(); + + bsp_power_domains_early_init(); + + bsp_mem_retain_early_init(); +#endif + + bsp_etm_trace_setup(); + +#if BSP_TZ_CFG_SKIP_INIT + + /* Initialize clock variables to be used with R_BSP_SoftwareDelay. */ + bsp_clock_freq_var_init(); +#else + #ifdef BSP_PRV_TCS_HANDLING_READY + + /* Apply TCS values before initializing clocks */ + bsp_prv_tcs_init(); + #endif + + /* Configure system clocks. */ + bsp_clock_init(); +#endif + + /* Call post clock initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_POST_CLOCK); + +#if BSP_FEATURE_TZ_HAS_TRUSTZONE + #if 33U == __CORTEX_M + + /* Use CM33 stack monitor. */ + __set_MSPLIM(BSP_PRV_STACK_LIMIT); + #else + #endif +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Initialize security features. */ + R_BSP_SecurityInit(); +#endif + + /* Initialize ELC events that will be used to trigger NVIC interrupts. */ + bsp_irq_cfg(); +} + +/*******************************************************************************************************************//** + * 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_RCLP_HZ; + #endif +} + +#endif + +/*******************************************************************************************************************//** + * Fallback weak implemenation of _exit(), which just hangs. + **********************************************************************************************************************/ +void _exit (int __status) +{ + FSP_PARAMETER_NOT_USED(__status); + while (1) + { + ; + } +} + +#if defined(__GNUC__) + +// TIN_HACK_WIFI + #ifdef BSP_MCU_GROUP_RA6W1 +BSP_WEAK_REFERENCE extern int _read(int fd, char * ptr, int len); +BSP_WEAK_REFERENCE extern int _write(int fd, char * ptr, int len); + +/*******************************************************************************************************************//** + * Stub to override _read(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +BSP_WEAK_REFERENCE int _read (int fd, char * ptr, int len) +{ + FSP_PARAMETER_NOT_USED(fd); + FSP_PARAMETER_NOT_USED(ptr); + FSP_PARAMETER_NOT_USED(len); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _write(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +BSP_WEAK_REFERENCE int _write (int fd, char * ptr, int len) +{ + FSP_PARAMETER_NOT_USED(fd); + FSP_PARAMETER_NOT_USED(ptr); + FSP_PARAMETER_NOT_USED(len); + + return -1; +} + + #else +extern _ssize_t _read_r(struct _reent * _reent, int _fd, void * _buff, size_t _cnt); + +/*******************************************************************************************************************//** + * Stub to override _read_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +_ssize_t _read_r (struct _reent * _reent, int _fd, void * _buff, size_t _cnt) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_fd); + FSP_PARAMETER_NOT_USED(_buff); + FSP_PARAMETER_NOT_USED(_cnt); + + return -1; +} + + #endif + +#if 0 +extern _off_t _lseek_r(struct _reent * _reent, int _fdes, _off_t _off, int _w); +extern int _kill_r(void * _reent, int _pid, int _signal); +extern int _getpid_r(void * _reent); +extern int _gettimeofday_r(void * _reent, void * _tp, void * _tzp); + + #if 0 + +struct stat; + +BSP_WEAK_REFERENCE extern int _open_r(struct _reent * _reent, const char * _path, int _flag, int _m); +BSP_WEAK_REFERENCE extern int _fstat_r(struct _reent * _reent, int _fd, struct stat * _buff); +BSP_WEAK_REFERENCE extern int _isatty_r(struct _reent * _reent, int _fd); +BSP_WEAK_REFERENCE extern int _close_r(struct _reent * _reent, int _fd); +BSP_WEAK_REFERENCE extern int _link_r(struct _reent * _reent, const char * _oldpath, const char * _newpath); +BSP_WEAK_REFERENCE extern int _unlink_r(struct _reent * _reent, const char * _path); + + #endif + +/*******************************************************************************************************************//** + * Stub to override _lseek_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +_off_t _lseek_r (struct _reent * _reent, int _fdes, _off_t _off, int _w) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_fdes); + FSP_PARAMETER_NOT_USED(_off); + FSP_PARAMETER_NOT_USED(_w); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _kill_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _kill_r (void * _reent, int _pid, int _signal) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_pid); + FSP_PARAMETER_NOT_USED(_signal); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _getpid_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _getpid_r (void * _reent) +{ + FSP_PARAMETER_NOT_USED(_reent); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _gettimeofday_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _gettimeofday_r (void * _reent, void * _tp, void * _tzp) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_tp); + FSP_PARAMETER_NOT_USED(_tzp); + + return -1; +} +#endif + + #if 0 + +/*******************************************************************************************************************//** + * Stub to override _open_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _open_r (struct _reent * _reent, const char * _path, int _flag, int _m) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_path); + FSP_PARAMETER_NOT_USED(_flag); + FSP_PARAMETER_NOT_USED(_m); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _fstat_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _fstat_r (struct _reent * _reent, int _fd, struct stat * _buff) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_fd); + FSP_PARAMETER_NOT_USED(_buff); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _isatty_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _isatty_r (struct _reent * _reent, int _fd) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_fd); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _close_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _close_r (struct _reent * _reent, int _fd) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_fd); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _link_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _link_r (struct _reent * _reent, const char * _oldpath, const char * _newpath) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_oldpath); + FSP_PARAMETER_NOT_USED(_newpath); + + return -1; +} + +/*******************************************************************************************************************//** + * Stub to override _unlink_r(), to silence a link warning when using recent gcc + **********************************************************************************************************************/ +int _unlink_r (struct _reent * _reent, const char * _path) +{ + FSP_PARAMETER_NOT_USED(_reent); + FSP_PARAMETER_NOT_USED(_path); + + return -1; +} + + #endif +#endif + +#if defined(__GNUC__) || defined(__ICCARM__) +__STATIC_FORCEINLINE void bsp_debugger_enable (void) +{ + #if BSP_CFG_DEBUGGER_ENABLE + CRG_TOP->SYS_CTRL_REG |= CRG_TOP_SYS_CTRL_REG_DEBUGGER_ENABLE_Msk; + #endif + + #if (BSP_CFG_CMAC_DEBUGGER_ENABLE) + CRG_TOP->SYS_CTRL_REG |= CRG_TOP_SYS_CTRL_REG_CMAC_DEBUGGER_ENABLE_Msk; + #endif +} + +__STATIC_FORCEINLINE void bsp_clock_div_early_init (void) +{ + uint32_t val = CRG_TOP->CLK_AMBA_REG; + + #if BSP_FEATURE_CGC_HAS_HCLK_DIV + FSP_REG_VAR_FIELD_SET(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, val, BSP_CFG_HCLK_DIV); + #endif + + #if BSP_FEATURE_CGC_HAS_PCLK_DIV + FSP_REG_VAR_FIELD_SET(CRG_TOP, CLK_AMBA_REG, PCLK_DIV, val, BSP_CFG_PCLK_DIV); + #endif + + CRG_TOP->CLK_AMBA_REG = val; +} + + #if !BSP_TZ_NONSECURE_BUILD +__STATIC_FORCEINLINE void bsp_sys_force_active (void) +{ + #if defined(CRG_TOP_PMU_CTRL_REG_SYS_SLEEP_Pos) + CRG_TOP->PMU_CTRL_REG_b.SYS_SLEEP = 0; + #endif +} + +static void bsp_rails_early_init (void) +{ + #if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6B2 || BSP_MCU_GROUP_RA6U1 + + /* XXX Setup rails based on HW recommendations (unchanged for RA6B1/RA6U1) */ + PMU_ANA->POWER_CTRL_REG_b.V18_ENABLE = 0x1; + PMU_ANA->POWER_CTRL_REG_b.VDD_ENABLE = 0x2; + + #ifndef BSP_MCU_GROUP_RA6B2 + PMU_ANA->POWER_CTRL_REG_b.V10_ENABLE = 0x2; + PMU_ANA->POWER_CTRL_REG_b.LDO_ANA_ENABLE = 0x1; + #endif + + /* V18EXT is not enabled since it is tied to a HW issue where the current required by all rails + * cannot be provided and the device crashes. The rail is only used by the external QSPI memory, + * and should only be enabled when that is used. + */ + #elif BSP_MCU_GROUP_RA6W1 + + /** + * TIN-TODO: Identify whether these are always needed or if we should only enable them for PLL. + * There is an issue with the external flash when the PLL clock is selected in Tin and the + * workaround to the HW bug is to increase the current provided to the pads. + * TIN-TODO: It is unclear why the clock for the DMA is enabled as well. + *//* Set QSPI pads drive current to 8 mA. Default was 2 mA. */ + OQSPIF->OQSPIF_GP_REG_b.OSPIC_PADS_DRV = 2; + + /* The following is required for BA. */ + CRG_TOP->CLK_AMBA_REG_b.GEN_DMA_ENABLE = 1; + #endif +} + +__STATIC_FORCEINLINE void bsp_power_domains_early_init (void) +{ +/* TIN-TODO: Identify if similar approach to other RAfW devices should be used, + * where all domains are enabled at startup. + */ + #if !BSP_MCU_GROUP_RA6W1 + bsp_pd_init(); + + /* Enable all power domains during startup. */ + for (uint8_t pd = 0; pd < BSP_PD_ID_COUNT; pd++) + { + bsp_pd_enable(pd); + } + #endif +} + +__STATIC_FORCEINLINE void bsp_mem_retain_early_init (void) +{ + // TIN-TODO: Identify whether RETAIN_MEM_CTRL_REG should be written here to enable retainment of cache. + #if !BSP_MCU_GROUP_RA6W1 + CRG_TOP->RAM_RETAIN_REG = UINT32_MAX; + #endif +} + + #endif + +__STATIC_FORCEINLINE void bsp_etm_trace_setup (void) +{ + /* TIN-TODO: Tin appears to have ETM support but the datasheet does not define any dedicated pins + * for the trace signals. + */ + #if !BSP_MCU_GROUP_RA6W1 + if (!ETM_TRACE_ENABLE) + { + /* No ETM trace required. Nothing to do. */ + return; + } + + uint32_t p0_etm_pins = 0; + + p0_etm_pins |= (1 << BSP_IO_PORT_00_PIN_19) | (1 << BSP_IO_PORT_00_PIN_20); /* TRACE_CLK & TRACE_DATA[0] */ + + /* Get trace port size from Current Parallel Port Size Register (CSPSR) */ + uint32_t trace_port_width = TPIU->CSPSR; + if (trace_port_width > 1) + { + p0_etm_pins |= (1 << BSP_IO_PORT_00_PIN_21); /* TRACE_DATA[1] */ + } + + if (trace_port_width == 8) + { + p0_etm_pins |= (1 << BSP_IO_PORT_00_PIN_22); /* TRACE_DATA[2] */ + p0_etm_pins |= (1 << BSP_IO_PORT_00_PIN_23); /* TRACE_DATA[3] */ + } + CRG_TOP->P0_SET_PAD_LATCH_REG = p0_etm_pins; + #endif +} + +static void SystemRuntimeInit (const uint32_t external) +{ + /* Initialize C runtime environment. */ + for (uint32_t i = 0; i < g_init_info.zero_count; i++) + { + if (external == g_init_info.p_zero_list[i].type.external) + { + uint32_t size = + ((uint32_t) g_init_info.p_zero_list[i].p_limit - (uint32_t) g_init_info.p_zero_list[i].p_base); + + #if defined(__ICCARM__) + size /= sizeof(uint32_t); + for (uint32_t it = 0; it < size; it++) + { + g_init_info.p_zero_list[i].p_base[it] = 0; + } + #else + fast_memset(g_init_info.p_zero_list[i].p_base, 0, size); + #endif + } + } + + for (uint32_t i = 0; i < g_init_info.copy_count; i++) + { + if (external == g_init_info.p_copy_list[i].type.external) + { + uint32_t size = + ((uint32_t) g_init_info.p_copy_list[i].p_limit - (uint32_t) g_init_info.p_copy_list[i].p_base); + + #if defined(__ICCARM__) + size /= sizeof(uint32_t); + for (uint32_t it = 0; it < size; it++) + { + g_init_info.p_copy_list[i].p_base[it] = g_init_info.p_copy_list[i].p_load[it]; + } + #else + fast_memcpy(g_init_info.p_copy_list[i].p_base, g_init_info.p_copy_list[i].p_load, size); + #endif + } + } +} + +#endif + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_api_override.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_api_override.h new file mode 100644 index 000000000000..4ff8cde007b9 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_api_override.h @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_API_OVERRIDE_H +#define BSP_API_OVERRIDE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +#include "./bsp_exceptions.h" + +/* BSP Common Includes. */ +#include "./bsp_common.h" + +#if BSP_MCU_GROUP_RA6B1 + #include "../ra6b1/bsp_tcs.h" +#elif BSP_MCU_GROUP_RA6U1 + #include "../ra6u1/bsp_tcs.h" +#elif BSP_MCU_GROUP_RA6W1 + #include "../ra6w1/bsp_tcs.h" +#endif + + +/* BSP MCU Specific Includes. */ +#include "./bsp_irq.h" +#include "./bsp_io.h" +#include "./bsp_group_irq.h" +#include "./bsp_clocks.h" +#include "./bsp_module_stop.h" +#include "./bsp_security.h" + +/* Factory MCU information. */ +#include "../../../../inc/fsp_features.h" + +/* BSP Common Includes (Other than bsp_common.h) */ +#include "./bsp_delay.h" +#include "./bsp_mcu_api.h" + +#if __has_include("./internal/bsp_internal.h") + #include "./internal/bsp_internal.h" +#endif + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_assert.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_assert.c new file mode 100644 index 000000000000..833d5ba03d45 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_assert.c @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_assert.h" +#ifdef UNIT_TESTING + #include "fake_regs.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#ifdef UNIT_TESTING + +void disable_irqs_mock(void); + + #define DISABLE_IRQS disable_irqs_mock() + +BSP_WEAK_REFERENCE void disable_irqs_mock (void) +{ + /* Do nothing. */ +} + +BSP_WEAK_REFERENCE void indicate_infinite_wait_hook(void); + + #define WAIT_FOREVER indicate_infinite_wait_hook() + +BSP_WEAK_REFERENCE void indicate_infinite_wait_hook (void) +{ + /* Do nothing. */ +} + +#else + #define DISABLE_IRQS __disable_irq() + #define WAIT_FOREVER do { /* Wait. */} while (1) + + #define MTB_MASTER_REG *((volatile uint32_t *) 0xE0043004) +#endif + +#define MTB_MASTER_EN_Pos 31 /* NOLINT(modernize-macro-to-enum) */ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Pointer to the current handler of BSP_CHECK_DEBUG() and BSP_CHECK_FATAL(). + * It should end up halting execution, which might then be escalated to a system reset by the system watchdog. + * + * @note It is placed in the ".noinit" section, so that its value is controlled solely by + * bsp_prv_halt_implementation_early_set() and bsp_prv_halt_implementation_normal_set(). + **********************************************************************************************************************/ +bsp_on_error_cb_t g_halt_impl BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +TESTABLE_STATIC volatile uint32_t bsp_prv_scratch_registers[4]; + +__STATIC_FORCEINLINE void store_scratch_regs (const uint32_t * regs) +{ + bsp_prv_scratch_registers[0] = *regs++; + bsp_prv_scratch_registers[1] = *regs++; + bsp_prv_scratch_registers[2] = *regs++; + bsp_prv_scratch_registers[3] = *regs; +} + +__STATIC_FORCEINLINE void disable_tracing (void) +{ + MTB_MASTER_REG &= ~(1 << MTB_MASTER_EN_Pos); +} + +TESTABLE_STATIC void bsp_prv_early_halt (uintptr_t args) +{ + DISABLE_IRQS; + + store_scratch_regs((uint32_t *) args); + + disable_tracing(); + + R_BSP_PeripheralFreeze(BSP_FREEZE_PERIPHERAL_SYS_WDOG); + + // TODO add GPIO debugging (EXCEPTION_DEBUG == 1) + + WAIT_FOREVER; +} + +BSP_PLACE_CODE_IN_RAM +TESTABLE_STATIC void bsp_prv_normal_halt (uintptr_t args) +{ + DISABLE_IRQS; + + store_scratch_regs((uint32_t *) args); + + disable_tracing(); + + R_BSP_PeripheralFreeze(BSP_FREEZE_PERIPHERAL_SYS_WDOG); + + // TODO add GPIO debugging (EXCEPTION_DEBUG == 1) + + WAIT_FOREVER; +} + +/*******************************************************************************************************************//** + * @internal + * @addtogroup BSP_MCU_PRV Internal BSP Documentation + * @ingroup RENESAS_INTERNAL + * @{ + **********************************************************************************************************************/ + +/** + * @brief Set up the halt capability to use an implementation that is valid "early", i.e. before the C runtime is ready. + * + * Before the C runtime is ready, the halt implementation must be located in the default code storage, close to the + * Reset_Handler(), so that it can be safely called. + */ +void bsp_prv_halt_implementation_early_set (void) +{ + g_halt_impl = bsp_prv_early_halt; +} + +/** + * @brief Set up the halt capability to use an implementation that is optimized for the normal case, i.e. after the C + * runtime is ready. + * + * In the normal case, it's better for the halt implementation to be located in RAM, so that it's always usable. + */ +void bsp_prv_halt_implementation_normal_set (void) +{ + g_halt_impl = bsp_prv_normal_halt; +} + +/** @} (end addtogroup BSP_MCU_PRV) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_assert.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_assert.h new file mode 100644 index 000000000000..3bb161032288 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_assert.h @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_ASSERT_H +#define BSP_ASSERT_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 + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void bsp_prv_halt_implementation_early_set(void); +void bsp_prv_halt_implementation_normal_set(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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_clocks.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_clocks.c new file mode 100644 index 000000000000..6fda832f5e51 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_clocks.c @@ -0,0 +1,821 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_clocks.h" +#include "bsp_common.h" + +#if BSP_TZ_NONSECURE_BUILD + #include "bsp_guard.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#if BSP_FEATURE_CGC_HAS_RCX_CONTROL + #if defined(CRG_AON_AON_OSC_EN_REG_RCX_ENABLE_Msk) + #define RCX() CRG_AON->AON_OSC_EN_REG_b + #else + #define RCX() CRG_AON->CLK_RCX_REG_b + #endif +#endif + +#if BSP_FEATURE_CGC_HAS_SOSC + #if defined(CRG_AON_AON_OSC_EN_REG_XTAL32K_ENABLE_Msk) + #define XTAL32K() CRG_AON->AON_OSC_EN_REG_b + #else + #define XTAL32K() CRG_AON->CLK_XTAL32K_REG_b + #endif +#endif + +/* The number of clocks is used to size the g_sys_clock_freq array. */ +#define BSP_PRV_NUM_SOURCE_CLOCKS ((uint8_t) BSP_CLOCKS_SOURCE_CLOCK_DIGITAL + 1U) + +#define BSP_PRV_STABILIZE_PLL (1) +#define BSP_PRV_STABILIZE_XTAL32M (1) + +#define NSEC_TO_CLK_CYCLES(nsec, clk_freq_hz) ((((nsec) * ((clk_freq_hz) / 10000)) + 99999) / 100000) + +#if BSP_FEATURE_CGC_HAS_POWER_LVL_REG + #define BSP_PRV_1V2_FOR_PLL_ENABLE() do {CRG_TOP->POWER_LVL_REG_b.V12_LEVEL = 2;} while (0) +#else + #define BSP_PRV_1V2_FOR_PLL_ENABLE() do {CRG_TOP->POWER_CTRL_REG_b.VDD_LEVEL = 3;} while (0) +#endif + +#if BSP_FEATURE_CGC_HAS_RCHS_SPEEDS + #define BSP_PRV_RUNNING_AT_RCHS_MASK CRG_TOP_CLK_CTRL_REG_RUNNING_AT_RCHS_Msk +#else + #define BSP_PRV_RUNNING_AT_RCHS_MASK CRG_TOP_CLK_CTRL_REG_RUNNING_AT_RC32M_Msk +#endif + +#if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 || BSP_MCU_GROUP_RA6B2 + #define BSP_PRV_RUNNING_AT_XTALM CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_XTAL32M +#elif BSP_MCU_GROUP_RA6W1 || BSP_MCU_GROUP_RA6W3 + #define BSP_PRV_RUNNING_AT_XTALM CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_XTAL40M +#endif + +#ifdef CRG_TOP_CLK_CTRL_REG_RUNNING_AT_PLL_Msk + #define BSP_PRV_RUNNING_AT_PLL_MASK CRG_TOP_CLK_CTRL_REG_RUNNING_AT_PLL_Msk +#else + #define BSP_PRV_RUNNING_AT_PLL_MASK CRG_TOP_CLK_CTRL_REG_RUNNING_AT_PLL96M_Msk +#endif + +#if BSP_MCU_GROUP_RA6W1 + #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET (1) +#endif + +/*********************************************************************************************************************** + * Type definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Global variables + **********************************************************************************************************************/ + +#if BSP_FEATURE_CGC_HAS_LP_CLOCK + +/** Low Power Clock Frequency */ +BSP_SECTION_EARLY_INIT uint32_t g_bsp_lp_clock; +#endif + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/* 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. */ +uint32_t g_clock_freq[BSP_PRV_NUM_SOURCE_CLOCKS] BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); + +/*********************************************************************************************************************** + * Public Functions + **********************************************************************************************************************/ +#if BSP_FEATURE_CGC_HAS_RCHS +void bsp_clock_rchs_enable (bool enable) +{ + CRG_TOP->CLK_RCHS_REG_b.RCHS_ENABLE = enable; +} + +bool bsp_clock_rchs_is_enabled (void) +{ + return CRG_TOP->CLK_RCHS_REG_b.RCHS_ENABLE; +} + +#endif + +#if BSP_FEATURE_CGC_HAS_RCLP +void bsp_clock_rclp_enable (bool enable) +{ + CRG_TOP->CLK_RCLP_REG_b.RCLP_DISABLE = !enable; +} + +bool bsp_clock_rclp_is_enabled (void) +{ + return !CRG_TOP->CLK_RCLP_REG_b.RCLP_DISABLE; +} + +#endif + +#if BSP_FEATURE_CGC_HAS_RCX_CONTROL +void bsp_clock_rcx_enable (bool enable) +{ + RCX().RCX_ENABLE = enable; +} + +#endif + +#if BSP_FEATURE_CGC_HAS_RCX +bool bsp_clock_rcx_is_enabled (void) +{ + #if BSP_FEATURE_CGC_HAS_RCX_CONTROL + + return RCX().RCX_ENABLE; + #else + + return true; + #endif +} + +#endif + +#if BSP_FEATURE_CGC_HAS_SOSC + +void bsp_clock_xtalk_enable (bool enable) +{ + XTAL32K().XTAL32K_ENABLE = enable; +} + +bool bsp_clock_xtalk_is_enabled (void) +{ + return XTAL32K().XTAL32K_ENABLE; +} + +#endif + +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + +static void bsp_prv_clock_xtalm_start (void) +{ + if (0 == BSP_PRV_RUNNING_AT_XTALM) + { + #if !BSP_MCU_GROUP_RA6W3 /* TODO: Workaround for OSPI XIP */ + BSP_CHECK_DEBUG(FSP_SUCCESS == bsp_clock_xtalm_preconditions_check()); + #endif + + bsp_clock_xtalm_enable(true); + + #if BSP_CLOCK_CFG_XTAL32M_STABILIZATION_USEC + R_BSP_SoftwareDelay(BSP_CLOCK_CFG_XTAL32M_STABILIZATION_USEC, BSP_DELAY_UNITS_MICROSECONDS); + #else + while (false == bsp_clock_xtalm_is_settled()) + { + /* Wait. */ + } + #endif + } +} + +bool bsp_clock_xtalm_is_enabled (void) +{ + #if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 || BSP_MCU_GROUP_RA6B2 + + return XTAL32M->XTAL32M_ENABLE_REG & + (XTAL32M_XTAL32M_ENABLE_REG_LDOXTAL_EN_Msk | + XTAL32M_XTAL32M_ENABLE_REG_EN_XTAL_BIAS_Msk | + XTAL32M_XTAL32M_ENABLE_REG_EN_XTAL_OSC_Msk); + #elif BSP_MCU_GROUP_RA6W3 + + return XTAL32M->XTAL40M_ENABLE_REG & + (XTAL32M_XTAL40M_ENABLE_REG_LDOXTAL_EN_Msk | + XTAL32M_XTAL40M_ENABLE_REG_EN_XTAL_BIAS_Msk | + XTAL32M_XTAL40M_ENABLE_REG_EN_XTAL_OSC_Msk); + #elif BSP_MCU_GROUP_RA6W1 + + return CRG_COM->XTAL40M_CTRL_REG_b.XTAL40M_RDY; + #endif +} + +#endif /* BSP_CLOCK_CFG_MAIN_OSC_POPULATED */ + +#if !BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET +static void bsp_prv_clock_set_hard_reset(void); + +#endif + +#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_TZ_CFG_CGFSAR != 0xFFFFFFFFU + +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_sys_clock_freq settings. */ + SystemCoreClockUpdate(); +} + + #endif +#endif + +/*******************************************************************************************************************//** + * @internal + * @addtogroup BSP_MCU_PRV Internal BSP Documentation + * @ingroup RENESAS_INTERNAL + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Update SystemCoreClock variable based on current clock settings. + **********************************************************************************************************************/ +void SystemCoreClockUpdate (void) +{ + uint32_t clock_index = CRG_TOP->CLK_CTRL_REG_b.SYS_CLK_SEL; + + SystemCoreClock = g_clock_freq[clock_index] >> bsp_clock_ahb_div_get(); +} + +#if BSP_FEATURE_CGC_HAS_LP_CLOCK + +/*******************************************************************************************************************//** + * Update g_bsp_lp_clock variable based on current clock settings. + **********************************************************************************************************************/ +void R_BSP_LPClockUpdate (void) +{ + uint32_t clock_index = CRG_TOP->CLK_CTRL_REG_b.LP_CLK_SEL + BSP_CLOCKS_SOURCE_CLOCK_RCLP; + + g_bsp_lp_clock = g_clock_freq[clock_index]; +} + +#endif + +#if BSP_FEATURE_CGC_HAS_RCHS_SPEEDS + +/*******************************************************************************************************************//** + * @brief Set the speed mode of the RCHS clock + * + * @param[in] speed the speed mode to use + **********************************************************************************************************************/ +void bsp_clock_rchs_speed_set (bsp_clock_rchs_speed_t speed) +{ + uint32_t value = 0; + uint32_t freq = BSP_RCHS_HZ; + FSP_CRITICAL_SECTION_DEFINE; + + if (BSP_CLOCK_RCHS_SPEED_64M == speed) + { + value = CRG_TOP_CLK_RCHS_REG_RCHS_SPEED_Msk; + freq = 2 * BSP_RCHS_HZ; + } + + FSP_CRITICAL_SECTION_ENTER; + FSP_REG_SET_MASKED(CRG_TOP, CLK_RCHS_REG, CRG_TOP_CLK_RCHS_REG_RCHS_SPEED_Msk, value); + FSP_CRITICAL_SECTION_EXIT; + + R_BSP_SourceClockHzSet(FSP_PRIV_CLOCK_RCHS, freq); +} + +#endif /* BSP_FEATURE_CGC_HAS_RCHS_SPEEDS */ + +#if BSP_FEATURE_CGC_HAS_RCLP_SPEEDS + +/*******************************************************************************************************************//** + * @brief Set the speed mode of the RCLP clock + * + * @param[in] speed the speed mode to use + **********************************************************************************************************************/ +void bsp_clock_rclp_speed_set (bsp_clock_rclp_speed_t speed) +{ + static const uint32_t mask = CRG_TOP_CLK_RCLP_REG_RCLP_LOW_SPEED_FORCE_Msk | CRG_AON_RCLP_TRIM_REG_RCLP_TRIM_Msk; + uint32_t value; + uint32_t freq = BSP_RCLP_HZ; + FSP_CRITICAL_SECTION_DEFINE; + + if (BSP_CLOCK_RCLP_SPEED_512K == speed) + { + value = CRG_TOP_CLK_RCLP_REG_RCLP_HIGH_SPEED_FORCE_Msk; + } + else if (BSP_CLOCK_RCLP_SPEED_32K == speed) + { + value = CRG_TOP_CLK_RCLP_REG_RCLP_LOW_SPEED_FORCE_Msk; + freq = BSP_RCLP_LOW_SPEED_FREQ_HZ; + } + else + { + value = 0; + } + + FSP_CRITICAL_SECTION_ENTER; + FSP_REG_SET_MASKED(CRG_TOP, CLK_RCLP_REG, mask, value); + FSP_CRITICAL_SECTION_EXIT; + + R_BSP_SourceClockHzSet(FSP_PRIV_CLOCK_RCLP, freq); +} + +#endif /* BSP_FEATURE_CGC_HAS_RCLP_SPEEDS */ + +/*******************************************************************************************************************//** + * Set System clock. + * + * \param[in] clock The new system clock. + * + * @note If any one of the lp clocks is requested, this function changes the system clock to the currently selected lp + * clock (whichever that is). + **********************************************************************************************************************/ +void bsp_clock_sysclk_set (fsp_priv_source_clock_t clock) +{ +#if BSP_FEATURE_CGC_HAS_XTALM_SWITCH + if ((FSP_PRIV_CLOCK_XTALM == clock) && CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_RCHS) + { + CRG_TOP->CLK_SWITCH2XTAL_REG_b.SWITCH2XTAL = 1; + } + else +#endif + { +#if BSP_FPGA + #if BSP_PRV_PLL_SUPPORTED + if (FSP_PRIV_CLOCK_PLL == clock) + { + bsp_clock_pll_enable(false); + bsp_clock_pll_enable(true); + } + #endif +#endif + uint32_t clock_index = clock > BSP_CLOCKS_SOURCE_CLOCK_PLL ? BSP_CLOCKS_SOURCE_CLOCK_RCLP : clock; + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + CRG_TOP->CLK_CTRL_REG_b.SYS_CLK_SEL = clock_index & + (CRG_TOP_CLK_CTRL_REG_SYS_CLK_SEL_Msk >> + CRG_TOP_CLK_CTRL_REG_SYS_CLK_SEL_Pos); + FSP_CRITICAL_SECTION_EXIT; + } + + /* Update the CMSIS core clock variable so that it reflects the new HCLK frequency. */ + SystemCoreClockUpdate(); + + /* Wait until the switch is done! */ + switch (clock) + { +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + case FSP_PRIV_CLOCK_XTALM: + { + #if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + while (!CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_XTAL32M) + #elif BSP_MCU_GROUP_RA6W1 || BSP_MCU_GROUP_RA6W3 + while (!CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_XTAL40M) + #endif + { + } + + return; + } + + #if BSP_FEATURE_CGC_HAS_XTALM_DBLR + case FSP_PRIV_CLOCK_XTALM_DBLR: + { + #if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + while (!CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_XTAL64M) + #elif BSP_MCU_GROUP_RA6W3 + while (!CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_XTAL80M) + #endif + { + } + + return; + } + #endif +#endif +#if BSP_FEATURE_CGC_HAS_RCHS + case FSP_PRIV_CLOCK_RCHS: + { + while (!CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_RCHS) + { + } + + return; + } +#endif +#if BSP_PRV_PLL_SUPPORTED + case FSP_PRIV_CLOCK_PLL: + { + #if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + while (!CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_PLL) + #elif BSP_MCU_GROUP_RA6W3 + while (!CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_PLL320M) + #endif + { + } + + return; + } +#endif + + case FSP_PRIV_CLOCK_RCLP: +#if BSP_FEATURE_CGC_ANY_LP_CLK_CAN_BE_SYS_CLK + #if BSP_FEATURE_CGC_HAS_SOSC && BSP_CLOCK_CFG_SUBCLOCK_POPULATED + case FSP_PRIV_CLOCK_XTALK: + #endif + case FSP_PRIV_CLOCK_RCX: + case FSP_PRIV_CLOCK_DIGITAL: + { + /* Low-power clock */ + while (!CRG_TOP->CLK_CTRL_REG_b.RUNNING_AT_LP_CLK) + { + } + } +#endif /* BSP_FEATURE_CGC_ANY_LP_CLK_CAN_BE_SYS_CLK */ + + default: + { + BSP_CHECK_DEBUG(0); + break; + } + } +} + +/*******************************************************************************************************************//** + * Applies system core clock source and divider changes. + * + * @param[in] clock Desired system clock + * @param[in] clk_amba_reg_div Value to set in dividers of CLK_AMBA_REG register + **********************************************************************************************************************/ +void bsp_clock_set (fsp_priv_source_clock_t clock, uint32_t clk_amba_reg_div) +{ + /* Set dividers. */ + uint32_t clk_amba_reg_val = (CRG_TOP->CLK_AMBA_REG & ~BSP_PRV_CLK_AMBA_REG_DIV) | + (clk_amba_reg_div & BSP_PRV_CLK_AMBA_REG_DIV); + + CRG_TOP->CLK_AMBA_REG = clk_amba_reg_val; + + /* Set lp clock if needed. */ +#if BSP_FEATURE_CGC_ANY_LP_CLK_CAN_BE_SYS_CLK + if ((FSP_PRIV_CLOCK_RCLP == clock) || (FSP_PRIV_CLOCK_RCX == clock) || + #if BSP_FEATURE_CGC_HAS_SOSC + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + (FSP_PRIV_CLOCK_XTALK == clock) || + #endif + #endif + (FSP_PRIV_CLOCK_DIGITAL == clock)) + { + bsp_clock_lpclk_set(clock); + } +#endif + + /* Set system clock. */ + bsp_clock_sysclk_set(clock); +} + +#if !BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + +static void bsp_prv_clock_set_hard_reset (void) +{ + /* Set the system source clock */ + #if BSP_CLOCK_CFG_MAIN_OSC_POPULATED && (BSP_CLOCKS_SOURCE_CLOCK_XTALM == BSP_CFG_CLOCK_SOURCE) + + /* Nothing to do. Xtal32m has already been set as system clock in bsp_clock_init(). */ + #elif BSP_CLOCK_CFG_MAIN_OSC_POPULATED && BSP_FEATURE_CGC_HAS_XTALM_DBLR && \ + (BSP_CLOCKS_SOURCE_CLOCK_XTALM_DBLR == BSP_CFG_CLOCK_SOURCE) + + bsp_clock_xtalm_64m_output_enable(true); + #elif (BSP_CLOCKS_SOURCE_CLOCK_RCHS == BSP_CFG_CLOCK_SOURCE) + #if BSP_FEATURE_CGC_HAS_RCHS_SPEEDS && (BSP_RCHS_64M_SPEED_MODE == BSP_CFG_RCHS_FREQUENCY) + BSP_CHECK_DEBUG(FSP_SUCCESS == bsp_clock_rchs_high_speed_preconditions_check()); + #endif + #if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + bsp_clock_rchs_enable(true); + #endif + #elif BSP_PRV_PLL_SUPPORTED && (BSP_CLOCKS_SOURCE_CLOCK_PLL == BSP_CFG_CLOCK_SOURCE) + bsp_clock_pll_enable(true); + + #if BSP_PRV_STABILIZE_PLL + while (!bsp_clock_pll_is_locked()) + { + } + #endif + + /* + * If ultra-fast wake-up mode is used, make sure that the startup state + * machine is finished and all power regulation is in order. + */ + while (0 == CRG_TOP->SYS_STAT_REG_b.POWER_IS_UP) + { + /* Wait. */ + } + #endif /* BSP_CFG_CLOCK_SOURCE */ + + #if BSP_FEATURE_CGC_HAS_RCHS_SPEEDS + #if (BSP_CLOCKS_SOURCE_CLOCK_RCHS == BSP_CFG_CLOCK_SOURCE) + bsp_clock_rchs_speed_set((bsp_clock_rchs_speed_t) BSP_CFG_RCHS_FREQUENCY); + + /* Switching to/from 64 MHz requires >100us for the RCHS to settle */ + R_BSP_SoftwareDelay(150, BSP_DELAY_UNITS_MICROSECONDS); + #endif /* BSP_CFG_CLOCK_SOURCE */ + #endif /* BSP_FEATURE_CGC_HAS_RCHS_SPEEDS */ + + bsp_clock_sysclk_set((fsp_priv_source_clock_t) BSP_CFG_CLOCK_SOURCE); + + /* Update the CMSIS core clock variable so that it reflects the new ICLK frequency. */ + SystemCoreClockUpdate(); + + /* Clocks are now at requested frequencies. */ +} + +#endif + +/*******************************************************************************************************************//** + * Initializes variable to store system clock frequencies. + **********************************************************************************************************************/ +#if BSP_TZ_NONSECURE_BUILD +void bsp_clock_freq_var_init (void) +#else +static void bsp_clock_freq_var_init (void) +#endif +{ + memset(g_clock_freq, 0, sizeof(g_clock_freq)); + + /* Initialize System Clock frequencies. */ +#if BSP_FEATURE_CGC_HAS_RCHS + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_RCHS] = BSP_RCHS_HZ; +#endif + +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_XTALM] = BSP_CFG_XTALM_HZ; + #if BSP_FEATURE_CGC_HAS_XTALM_DBLR + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_XTALM_DBLR] = 2 * BSP_CFG_XTALM_HZ; + #endif +#endif + +#if BSP_PRV_PLL_SUPPORTED + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = BSP_PLL_FREQ_HZ; +#endif + +#if BSP_FEATURE_CGC_HAS_RCLP + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_RCLP] = BSP_RCLP_HZ; +#endif + +#if BSP_FEATURE_CGC_HAS_RCX + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_RCX] = BSP_RCX_HZ; +#endif + +#if BSP_FEATURE_CGC_HAS_SOSC && BSP_CLOCK_CFG_SUBCLOCK_POPULATED + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_XTALK] = BSP_CFG_XTALK_HZ; +#endif + +#if BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_CGFSAR != 0xFFFFFFFFU + + /* 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 + + /* The SystemCoreClock needs to be updated before calling R_BSP_SoftwareDelay. */ + SystemCoreClockUpdate(); + +#if BSP_FEATURE_CGC_HAS_LP_CLOCK + + /* The g_bsp_lp_clock variable needs to be updated. */ + R_BSP_LPClockUpdate(); +#endif +} + +/*******************************************************************************************************************//** + * Initializes system clocks. Makes no assumptions about current register settings. + **********************************************************************************************************************/ +void bsp_clock_init (void) +{ + bsp_clock_freq_var_init(); + +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + bsp_clock_xtalm_configure(); + bsp_prv_clock_xtalm_start(); +#else + bsp_clock_rchs_enable(true); +#endif + +#if BSP_FEATURE_CGC_HAS_SOSC + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + bsp_clock_xtalk_configure(); + #else + bsp_clock_xtalk_enable(false); + #endif +#endif + +#if BSP_FEATURE_CGC_HAS_RCLP_SPEEDS + bsp_clock_rclp_speed_set((bsp_clock_rclp_speed_t) BSP_CFG_RCLP_FREQUENCY); +#endif + +#if BSP_CLOCKS_SOURCE_CLOCK_RCLP == BSP_CFG_LP_CLOCK_SOURCE + bsp_clock_rclp_enable(true); +#elif BSP_CLOCKS_SOURCE_CLOCK_RCX == BSP_CFG_LP_CLOCK_SOURCE + #if BSP_FEATURE_CGC_HAS_RCX_CONTROL + bsp_clock_rcx_enable(true); + #endif + + #if !defined(BSP_MCU_GROUP_RA6W1) && !defined(BSP_MCU_GROUP_RA6W3) + #if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + bsp_clock_msr_sel_t ref_clock = BSP_CLOCK_MSR_SEL_XTAL32M; + #else + bsp_clock_msr_sel_t ref_clock = BSP_CLOCK_MSR_SEL_DIVN; + #endif + + /* Perform initial measurement of RCX and update the value in the frequency table. */ + R_BSP_SourceClockHzSet(FSP_PRIV_CLOCK_RCX, + bsp_clock_measurement(BSP_CLOCK_MSR_SEL_RCX, ref_clock, BSP_CFG_CLOCK_CALIBRATION_CYCLES)); + #endif +#elif BSP_CLOCKS_SOURCE_CLOCK_XTALK == BSP_CFG_LP_CLOCK_SOURCE + #if BSP_FEATURE_CGC_HAS_SOSC + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + bsp_clock_xtalk_enable(true); + #if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + + R_BSP_SoftwareDelay(BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS, BSP_DELAY_UNITS_MILLISECONDS); + #endif + #endif + #endif +#endif + +#if BSP_FEATURE_CGC_HAS_LP_CLOCK + bsp_clock_lpclk_set((fsp_priv_source_clock_t) BSP_CFG_LP_CLOCK_SOURCE); + + R_BSP_LPClockUpdate(); +#endif + +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + + /* Switch to XTAL32M first in any case. */ + bsp_clock_sysclk_set(FSP_PRIV_CLOCK_XTALM); +#endif + + /* Set source clock and dividers. */ +#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 +#else + bsp_prv_clock_set_hard_reset(); +#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) +{ + BSP_CHECK_FATAL(clock <= FSP_PRIV_CLOCK_DIGITAL); + + uint32_t source_clock = 0; + + source_clock = g_clock_freq[clock]; + + return source_clock; +} + +/*******************************************************************************************************************//** + * Sets 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. + * @param[in] freq Frequency of requested clock in Hertz. + **********************************************************************************************************************/ +void R_BSP_SourceClockHzSet (fsp_priv_source_clock_t clock, uint32_t freq) +{ + BSP_CHECK_FATAL(clock <= FSP_PRIV_CLOCK_DIGITAL); + + g_clock_freq[clock] = freq; + + SystemCoreClockUpdate(); +#if BSP_FEATURE_CGC_HAS_LP_CLOCK + R_BSP_LPClockUpdate(); +#endif +} + +#if BSP_FEATURE_CGC_HAS_LP_CLOCK + +/*******************************************************************************************************************//** + * Set Low Power clock. + * + * \param[in] clock The new low power clock. + **********************************************************************************************************************/ +void bsp_clock_lpclk_set (fsp_priv_source_clock_t clock) +{ + uint32_t clock_index = clock - FSP_PRIV_CLOCK_RCLP; + uint32_t clk_ctrl_reg; + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + clk_ctrl_reg = CRG_TOP->CLK_CTRL_REG; + FSP_REG_VAR_FIELD_SET(CRG_TOP, CLK_CTRL_REG, LP_CLK_SEL, clk_ctrl_reg, clock_index); + CRG_TOP->CLK_CTRL_REG = clk_ctrl_reg; + + FSP_CRITICAL_SECTION_EXIT; +} + +/*******************************************************************************************************************//** + * Gets the frequency of the low power clock. + * + * @return Frequency of requested clock in Hertz. + **********************************************************************************************************************/ +uint32_t R_BSP_LPClockHzGet (void) +{ + return g_bsp_lp_clock; +} + +#endif + +#if BSP_FEATURE_RTC_IS_AVAILABLE + +/*******************************************************************************************************************//** + * RTC Initialization + * + * Configures the dividers for the 100kHz clock generation & the RTC_KEEP_RTC_REG. + **********************************************************************************************************************/ +void R_BSP_Init_RTC (void) +{ + uint16_t div_int; + uint16_t div_frac; + uint32_t clk_rtc_div; + uint32_t lp_clk_freq = R_BSP_LPClockHzGet(); + + div_int = (uint16_t) (lp_clk_freq / 100); // NOLINT + div_frac = (uint16_t) (10 * (lp_clk_freq - (div_int * 100))); // NOLINT + + clk_rtc_div = div_frac; + clk_rtc_div += div_int << CRG_AON_CLK_RTCDIV_REG_RTC_DIV_INT_Pos; + + clk_rtc_div += (CRG_TOP->CLK_CTRL_REG_b.LP_CLK_SEL) << CRG_AON_CLK_RTCDIV_REG_RTC_CLK_SEL_Pos; + + CRG_AON->CLK_RTCDIV_REG = clk_rtc_div; + + RTC->RTC_KEEP_RTC_REG = 1U; +} + +#endif + +/** @} (end addtogroup BSP_MCU_PRV) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_clocks.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_clocks.h new file mode 100644 index 000000000000..3bb7927e47ef --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_clocks.h @@ -0,0 +1,344 @@ +/* +* Copyright (c) 2020 - 2026 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" + +#if BSP_MCU_GROUP_RA6W1 + #include "../ra6w1/bsp_clocks.h" +#endif + +/** 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. */ +#define BSP_CLOCKS_SOURCE_CLOCK_RCHS (0) +#define BSP_CLOCKS_SOURCE_CLOCK_XTALM (1) +#define BSP_CLOCKS_SOURCE_CLOCK_XTALM_DBLR (2) +#define BSP_CLOCKS_SOURCE_CLOCK_PLL (3) +#define BSP_CLOCKS_SOURCE_CLOCK_RCLP (4) +#define BSP_CLOCKS_SOURCE_CLOCK_RCX (5) +#define BSP_CLOCKS_SOURCE_CLOCK_XTALK (6) +#define BSP_CLOCKS_SOURCE_CLOCK_DIGITAL (7) // External square wave clock. + +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + #define BSP_PRV_PLL_SUPPORTED (1) +#else + #define BSP_PRV_PLL_SUPPORTED (0) +#endif + +#if BSP_FEATURE_CGC_HAS_HCLK_DIV + #define BSP_PRV_HCLK_DIV_MASK (CRG_TOP_CLK_AMBA_REG_HCLK_DIV_Msk) +#else + #define BSP_PRV_HCLK_DIV_MASK (0) +#endif + +#if BSP_FEATURE_CGC_HAS_PCLK_DIV + #define BSP_PRV_PCLK_DIV_MASK (CRG_TOP_CLK_AMBA_REG_PCLK_DIV_Msk) +#else + #define BSP_PRV_PCLK_DIV_MASK (0) +#endif + +#if BSP_FEATURE_CGC_HAS_QCLK_DIV + #define BSP_PRV_QCLK_DIV_MASK (CRG_TOP_CLK_AMBA_REG_QSPI_SDR_DIV2_Msk) +#else + #define BSP_PRV_QCLK_DIV_MASK (0) +#endif + +#define BSP_PRV_CLK_AMBA_REG_DIV (BSP_PRV_HCLK_DIV_MASK | BSP_PRV_PCLK_DIV_MASK | BSP_PRV_QCLK_DIV_MASK) + +#if BSP_PRV_PLL_SUPPORTED + #define BSP_PRV_PLL_SOURCE_FREQ_HZ (BSP_CFG_XTALM_HZ) +#endif +#if BSP_PRV_PLL2_SUPPORTED + #define BSP_PRV_PLL2_SOURCE_FREQ_HZ (BSP_CFG_XTALM_HZ) +#endif + +/* Frequencies of clocks with fixed frequencies. */ +#define BSP_DIVN_FREQ_HZ (32000000U) // DIVN frequency is 32 MHz +#if BSP_FEATURE_CGC_HAS_RCLP_SPEEDS + #define BSP_RCLP_DEFAULT_SPEED_MODE (0) + #define BSP_RCLP_32K_SPEED_MODE (1) + #define BSP_RCLP_512K_SPEED_MODE (2) + + #define BSP_RCLP_HIGH_SPEED_FREQ_HZ (512000U) + #define BSP_RCLP_LOW_SPEED_FREQ_HZ (32000U) +#endif + +#if BSP_PRV_PLL_SUPPORTED + #if BSP_FPGA + #define BSP_PLL_FREQ_HZ (32000000) + #else + #if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + #define BSP_PLL_FREQ_HZ (128000000) + #elif BSP_MCU_GROUP_RA6W1 + #define BSP_PLL_FREQ_HZ (480000000) + #endif + #endif +#endif + +#if BSP_FEATURE_CGC_HAS_RCHS_SPEEDS + #define BSP_RCHS_32M_SPEED_MODE (0) + #define BSP_RCHS_64M_SPEED_MODE (1) +#endif + +#if BSP_CLOCKS_SOURCE_CLOCK_RCHS == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_RCHS_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_XTALM == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_CFG_XTALM_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_XTALM_DBLR == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (2 * BSP_CFG_XTALM_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_PLL == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_CFG_PLL_FREQUENCY_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_RCLP == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_RCLP_HZ) +#endif + +#if BSP_FEATURE_CGC_HAS_LP_CLOCK + #if BSP_CLOCKS_SOURCE_CLOCK_RCLP == BSP_CFG_LP_CLOCK_SOURCE + #define BSP_STARTUP_LP_CLOCK_HZ (BSP_RCLP_HZ) + #elif BSP_CLOCKS_SOURCE_CLOCK_RCX == BSP_CFG_LP_CLOCK_SOURCE + #define BSP_STARTUP_LP_CLOCK_HZ (BSP_RCX_HZ) + #elif BSP_CLOCKS_SOURCE_CLOCK_XTALK == BSP_CFG_LP_CLOCK_SOURCE + #define BSP_STARTUP_LP_CLOCK_HZ (BSP_CFG_XTALK_HZ) + #endif +#endif + +#define BSP_CLOCKS_SYS_CLOCK_DIV_1 (0U) // System clock divided by 1. +#define BSP_CLOCKS_SYS_CLOCK_DIV_2 (1U) // System clock divided by 2. +#define BSP_CLOCKS_SYS_CLOCK_DIV_4 (2U) // System clock divided by 4. +#define BSP_CLOCKS_SYS_CLOCK_DIV_8 (3U) // System clock divided by 8. +#define BSP_CLOCKS_SYS_CLOCK_DIV_16 (4U) // HCLK divided by 16. + +/* SPI clock output divider options. */ +#define BSP_CLOCKS_SPI_CLK_DIV_8 (0U) // SPI clock divided by 8. +#define BSP_CLOCKS_SPI_CLK_DIV_4 (1U) // SPI clock divided by 4. +#define BSP_CLOCKS_SPI_CLK_DIV_2 (2U) // SPI clock divided by 2. +#define BSP_CLOCKS_SPI_CLK_DIV_14 (3U) // SPI clock divided by 14. + +/* QSPI clock output divider options. */ +#define BSP_CLOCKS_QSPI_CLK_DIV_1 (0U) // QSPI clock divided by 1. +#define BSP_CLOCKS_QSPI_CLK_DIV_2 (1U) // QSPI clock divided by 2. +#define BSP_CLOCKS_QSPI_CLK_DIV_4 (2U) // QSPI clock divided by 4. +#define BSP_CLOCKS_QSPI_CLK_DIV_8 (3U) // QSPI clock divided by 8. + +/* WDOG clock output divider options. */ +#define BSP_CLOCKS_WDOG_DIV_320 (1U) // WDOG clock is LP CLK divided by 320. + +/* Configuration option used to disable a clock, or to select DIV1/DIVN as source. */ +#define BSP_CLOCKS_SOURCE_CLOCK_DISABLED (0xFFU) +#define BSP_CLOCKS_SOURCE_CLOCK_DIV1 (0U) +#define BSP_CLOCKS_SOURCE_CLOCK_DIV2 (1U) +#define BSP_CLOCKS_SOURCE_CLOCK_DIVN (2U) +#define BSP_CLOCKS_SOURCE_CLOCK_DIVN_DIV2 (2U) // Only for GPADC. + +// NOLINTEND(modernize-macro-to-enum) + +/*********************************************************************************************************************** + * 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 + +#if BSP_FEATURE_CGC_HAS_RCLP_SPEEDS + +/** + * @brief RCLP mode selection + */ +typedef enum e_bsp_clock_rclp_speed +{ + BSP_CLOCK_RCLP_SPEED_DEFAULT = BSP_RCLP_DEFAULT_SPEED_MODE, ///< Default RCLP speed mode (automatically switches to 32 + /// kHz during sleep and to 512 kHz during active) + BSP_CLOCK_RCLP_SPEED_32K = BSP_RCLP_32K_SPEED_MODE, ///< Low speed RCLP mode (32 kHz) + BSP_CLOCK_RCLP_SPEED_512K = BSP_RCLP_512K_SPEED_MODE, ///< High speed RCLP mode (512 kHz) +} bsp_clock_rclp_speed_t; +#endif /* BSP_FEATURE_CGC_HAS_RCLP_SPEEDS */ + +#if BSP_FEATURE_CGC_HAS_RCHS_SPEEDS + +/** + * @brief RCHS mode selection + */ +typedef enum e_bsp_clock_rchs_speed +{ + BSP_CLOCK_RCHS_SPEED_32M = BSP_RCHS_32M_SPEED_MODE, ///< High speed RCHS speed (32 MHz) + BSP_CLOCK_RCHS_SPEED_64M = BSP_RCHS_64M_SPEED_MODE, ///< Low speed RCHS speed (64 MHz) +} bsp_clock_rchs_speed_t; +#endif /* BSP_FEATURE_CGC_HAS_RCHS_SPEEDS */ + +/** + * @brief The type of clock to be measured + */ +typedef enum e_bsp_clock_msr_sel +{ + BSP_CLOCK_MSR_SEL_RCLP = 0, + BSP_CLOCK_MSR_SEL_RCHS = 1, + BSP_CLOCK_MSR_SEL_RCX = 2, + BSP_CLOCK_MSR_SEL_XTAL32K = 3, + BSP_CLOCK_MSR_SEL_XTAL32M = 4, + BSP_CLOCK_MSR_SEL_XTAL64M = 5, + BSP_CLOCK_MSR_SEL_EXTERNAL = 6, + BSP_CLOCK_MSR_SEL_DIVN = 7, +} bsp_clock_msr_sel_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ +#if BSP_FEATURE_CGC_HAS_LP_CLOCK +extern uint32_t g_bsp_lp_clock; /** System Clock Frequency (Low Power Clock) */ +extern uint32_t g_clock_freq[]; +#endif + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void bsp_clock_rchs_enable(bool enable); +bool bsp_clock_rchs_is_enabled(void); + +#if BSP_FEATURE_CGC_HAS_RCHS_SPEEDS +fsp_err_t bsp_clock_rchs_high_speed_preconditions_check(void); +void bsp_clock_rchs_speed_set(bsp_clock_rchs_speed_t speed); + +#endif + +void bsp_clock_rclp_enable(bool enable); +bool bsp_clock_rclp_is_enabled(void); + +#if BSP_FEATURE_CGC_HAS_RCLP_SPEEDS +void bsp_clock_rclp_speed_set(bsp_clock_rclp_speed_t speed); + +#endif + +#if BSP_FEATURE_CGC_HAS_RCX_CONTROL +void bsp_clock_rcx_enable(bool enable); + +#endif + +bool bsp_clock_rcx_is_enabled(void); + +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED +fsp_err_t bsp_clock_xtalm_preconditions_check(void); +void bsp_clock_xtalm_configure(void); +void bsp_clock_xtalm_enable(bool enable); +bool bsp_clock_xtalm_is_enabled(void); +bool bsp_clock_xtalm_is_settled(void); + + #if BSP_FEATURE_CGC_HAS_XTALM_READY_COUNTER +int16_t bsp_clock_xtalm_ready_counter_update(void); + + #endif + #if BSP_FEATURE_CGC_HAS_XTALM_DBLR +void bsp_clock_xtalm_64m_output_enable(bool enable); +bool bsp_clock_xtalm_64m_output_is_enabled(void); + + #endif +#endif + +#if BSP_FEATURE_CGC_HAS_SOSC +void bsp_clock_xtalk_enable(bool enable); + + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED +void bsp_clock_xtalk_configure(void); +bool bsp_clock_xtalk_is_enabled(void); + + #endif +#endif + +#if BSP_PRV_PLL_SUPPORTED +fsp_err_t bsp_clock_pll_preconditions_check(void); +void bsp_clock_check_core_voltage_before_switch_sysclk_to_pll(void); +void bsp_clock_pll_enable(bool enable); +bool bsp_clock_pll_is_enabled(void); +bool bsp_clock_pll_is_locked(void); + + #if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 +void bsp_clock_usbpll_enable(bool enable); +bool bsp_clock_usbpll_is_locked(void); + + #endif + +#endif + +#if BSP_FEATURE_CGC_HAS_LP_CLOCK +void bsp_clock_lpclk_set(fsp_priv_source_clock_t clock); + +#endif + +void bsp_clock_sysclk_set(fsp_priv_source_clock_t clock); +void bsp_clock_set(fsp_priv_source_clock_t clock, uint32_t clk_amba_reg_div); +void bsp_clock_hclk_set(uint8_t sys_clock_sel, uint8_t hclk_div); + +#if !BSP_MCU_GROUP_RA6W1 && !BSP_MCU_GROUP_RA6W3 + +uint32_t bsp_clock_measurement(bsp_clock_msr_sel_t target, bsp_clock_msr_sel_t ref, uint32_t cycles); +void bsp_clock_measurement_configure(bsp_clock_msr_sel_t target, bsp_clock_msr_sel_t ref, uint32_t cycles); + +__STATIC_FORCEINLINE void bsp_clock_measurement_start (void) +{ + ANAMISC->CLK_REF_SEL_REG_b.REF_CAL_START = 1; +} + +__STATIC_FORCEINLINE uint32_t bsp_clock_measurement_read (void) +{ + return ANAMISC->CLK_REF_VAL_REG; +} + +#endif + +#if BSP_FEATURE_CGC_HAS_LP_CLOCK +uint32_t R_BSP_LPClockHzGet(void); +void R_BSP_LPClockUpdate(void); + +#endif + +void bsp_clock_init(void); + +#if BSP_TZ_NONSECURE_BUILD +void bsp_clock_freq_var_init(void); + +#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 + +/* RTC Initialization */ +#if BSP_FEATURE_RTC_IS_AVAILABLE +void R_BSP_Init_RTC(void); + +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_cmac.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_cmac.h new file mode 100644 index 000000000000..ec691073fc3a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_cmac.h @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_CMAC_H +#define BSP_CMAC_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 + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define CMAC2SYS_IRQn ((IRQn_Type) 59) +#define TCM_SHARED_MEM (0x33200000U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef struct st_cmac_callback_args_t +{ + void const * data; ///< Placeholder for user data. + uint32_t err_code; ///< CMAC error code returned. +} cmac_callback_args_t; + +typedef void (* p_callback)(cmac_callback_args_t * cb_data); + +typedef struct st_cmac_irq_ctx +{ + IRQn_Type irq; + uint8_t ipl; + p_callback callback; + void * cb_data; +} cmac_irq_ctx_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void bsp_cmac_start(void); +void bsp_cmac_stop(void); +bool bsp_cmac_is_active(void); +void bsp_cmac_cmac2sys_enable(cmac_irq_ctx_t * const ctx); +void bsp_cmac_cmac2sys_disable(cmac_irq_ctx_t * const ctx); +void cmac2sys_isr(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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_common.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_common.c new file mode 100644 index 000000000000..3f42e2d9a873 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_common.c @@ -0,0 +1,311 @@ +/* +* Copyright (c) 2020 - 2026 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_common.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_common.h new file mode 100644 index 000000000000..ae1fac5cace8 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_common.h @@ -0,0 +1,1046 @@ +/* +* Copyright (c) 2020 - 2026 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" +#include "bsp_linker_info.h" +#include "bsp_cfg.h" + +#ifdef BSP_MCU_GROUP_RA6W1 + #include "../ra6w1/bsp_rtc.h" + #include "../ra6w1/bsp_tcs.h" +#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 + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** Used to signify that an ELC event is not able to be used as an interrupt. */ +#define BSP_IRQ_DISABLED (0xFFU) +#define EMULATOR_BASE_CLOCK (170500) + +/* 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_api.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 do {} while (0) + #define FSP_CONTEXT_RESTORE do {} while (0) +#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; \ + } \ + } + +/** Push ARM Cortex-M scratch registers on stack. */ +#ifndef UNIT_TESTING + #if defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC) + #define BSP_PUSH_SCRATCH_REGISTERS \ + do { \ + __asm volatile ("PUSH {r0, r1, r2, r3}"); \ + } while (0) + + #else + + #define BSP_PUSH_SCRATCH_REGISTERS \ + do { \ + __ASM volatile ( \ + " .syntax unified \n" /* Prevent non-unified syntax */ \ + " push {r0, r1, r2, r3} \n" /* Push scratch registers on stack. */ \ + : /* Output operands: None */ \ + : /* Input operands: None */ \ + : /* Clobbers: None */ \ + ); \ + } while (0) + #endif +#else + #define BSP_PUSH_SCRATCH_REGISTERS do {} while (0) +#endif + +/** Get the value of the stack pointer. */ +#ifndef UNIT_TESTING + + #if defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC) +static inline uint32_t BSP_GET_SP_IAR (void) +{ + uint32_t ret; + __asm volatile ("MOV %0, sp" : "=r" (ret)); + + return ret; +} + + #define BSP_GET_SP() (BSP_GET_SP_IAR()) + #else + #define BSP_GET_SP() \ + ({ \ + uint32_t ret; \ + \ + __ASM volatile ( \ + " .syntax unified \n" /* Prevent non-unified syntax */ \ + " mov %[ret], sp \n" /* Move SP value on a general purpose register . */ \ + :[ret] "=r" (ret) /* Output operands: Store the SP value on ret */ \ + : /* Input operands: None */ \ + : /* Clobbers: None */ \ + ); \ + ret; \ + }) + #endif +#else + #define BSP_GET_SP() (0) +#endif + +/** + * @brief Stop execution if a condition is false, in non-production builds. + * + * Used to detect an unexpected state at run-time during development. + * + * @note In non-production builds, if the condition is false, g_halt_impl() is called. + * + * @note In production builds, the condition is evaluated but nothing else happens, regardless of the outcome. + */ +#define BSP_CHECK_DEBUG(a) \ + do { \ + if (!(a)) { \ + if (0 == BSP_CFG_PRODUCTION_BUILD) { \ + BSP_PUSH_SCRATCH_REGISTERS; \ + g_halt_impl((uintptr_t) BSP_GET_SP()); \ + } \ + } \ + } while (0) + +#ifndef UNIT_TESTING + #define BSP_FATAL_ERROR \ + do { \ + __disable_irq(); \ + __BKPT(2); \ + } while (0) +#else + #define BSP_FATAL_ERROR \ + g_halt_impl(0) +#endif + +/** + * @brief Stop execution if a condition is false. + * + * Used to log and recover from a fatal state at run-time. + * + * @note In non-production builds, if the condition is false, g_halt_impl() is called, which is identical to the + * behavior of BSP_CHECK_DEBUG(). + * + * @note In production builds, if the condition is false, interrupts are disabled and a SW breakpoint is issued. + * If a debugger is attached execution will halt. + * If a debugger is not attached, the breakpoint will be escalated to a Hard_Fault. + */ +#define BSP_CHECK_FATAL(a) \ + do { \ + if (!(a)) { \ + if (0 == BSP_CFG_PRODUCTION_BUILD) { \ + BSP_PUSH_SCRATCH_REGISTERS; \ + g_halt_impl((uintptr_t) BSP_GET_SP()); \ + } \ + else { \ + BSP_FATAL_ERROR; \ + } \ + } \ + } while (0) + +/* 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 + +#ifndef FSP_REG_VAR_FIELD_GET + +/** + * Return the value of a register field, with the register value being stored in a variable + * e.g. + * @code + * uint16_t tmp; + * int counter; + * tmp = CRG_TOP->TRIM_CTRL_REG; + * counter = FSP_REG_VAR_FIELD_GET(CRG_TOP, TRIM_CTRL_REG, XTAL_COUNT_N, tmp); + * ... + * @endcode + */ + #define FSP_REG_VAR_FIELD_GET(base, reg, field, var) \ + ((var & (base ## _ ## reg ## _ ## field ## _Msk)) >> \ + (base ## _ ## reg ## _ ## field ## _Pos)) +#endif + +#ifndef FSP_REG_VAR_FIELD_SET + +/** + * Set the value of a register field, with the register value being stored in a variable + * e.g. + * @code + * uint16_t tmp; + * + * tmp = CRG_TOP->TRIM_CTRL_REG; + * FSP_REG_VAR_FIELD_SET(CRG_TOP, TRIM_CTRL_REG, XTAL_COUNT_N, tmp, 10); + * FSP_REG_VAR_FIELD_SET(CRG_TOP, TRIM_CTRL_REG, XTAL_TRIM_SELECT, tmp, 2); + * CRG_TOP->TRIM_CTRL_REG = tmp; + * ... + * @endcode + */ + #define FSP_REG_VAR_FIELD_SET(base, reg, field, var, val) \ + var = (((unsigned) var & ~((base ## _ ## reg ## _ ## field ## _Msk))) | \ + ((((unsigned) (val)) << (base ## _ ## reg ## _ ## field ## _Pos)) & \ + (base ## _ ## reg ## _ ## field ## _Msk))) +#endif + +/** + * @brief Sets register bits, indicated by the mask, to a value. + * + * e.g. + * @code + * FSP_REG_SET_MASKED(RFCU_POWER, RF_CNTRL_TIMER_5_REG, 0xFF00, 0x1818); + * @endcode + */ +#define FSP_REG_SET_MASKED(base, reg, mask, value) \ + base->reg = ((base->reg & ~(mask)) | ((value) & (mask))) + +/** + * @brief Return the value of a memory field using a mask. + * + * e.g. + * @code + * uint32_t val; + * + * val = FSP_MEM_GET_MASKED(0x50000000, 0x1UL); + * ... + * @endcode + */ +#define FSP_MEM_GET_MASKED(addr, mask) \ + ((*(volatile uint32_t *) (addr) & (mask)) >> (__builtin_ctz(mask))) + +/** + * \brief Get the address of a register value by index (provided a register stride) + * + * \note The register stride should be an exact multiple of the register's base size. For example, + * if the register size is 32-bit, then the stride should be 0x4, 0x8, etc. Otherwise, the result + * will be undefined. The stride value must be in bytes. The index value (0,1,2...) is multiplied by + * the stride value (in bytes) to find the actual offset of the register. + * + * Returns a register address value by index + */ +#define FSP_REG_ADDR_GET_INDEXED(base, reg, stride, index) \ + ((&base->reg) + (((intptr_t) (index)) * ((stride) / sizeof(base->reg)))) + +/** + * \brief Return the value of a register field by index (provided a register stride). + * + * e.g. + * \code + * uint16_t val; + * uint16_t index = 2 + * + * val = REG_GETF_INDEXED(FTDF, FTDF_LONG_ADDR_0_0_REG, REG_EXP_SA_L, 0x10, index) + * + * ... + * \endcode + * + * \note The register stride should be an exact multiple of the register's base size. For example, + * if the register size is 32-bit, then the stride should be 0x4, 0x8, etc. Otherwise, the result + * will be undefined. The stride value must be in bytes. The index value (0,1,2...) is multiplied by + * the stride value (in bytes) to find the actual offset of the register. + * + */ +#define FSP_REG_FIELD_GET_INDEXED(base, reg, field, stride, index) \ + (((*FSP_REG_ADDR_GET_INDEXED(base, reg, (stride), (index))) & \ + (base ## _ ## reg ## _ ## field ## _Msk)) >> (base ## _ ## reg ## _ ## field ## _Pos)) + +/** + * @brief Sets memory bits, indicated by the mask, to a value. + * + * e.g. + * @code + * FSP_MEM_SET_MASKED(0x50000000, 0xFF00, 0x1818); + * @endcode + */ +#define FSP_MEM_SET_MASKED(addr, mask, value) \ + (*(volatile uint32_t *) (addr)) = (((*(volatile uint32_t *) (addr)) & ~(mask)) | ((value) & (mask))) + +#define FSP_ARRAY_LENGTH(array) (sizeof((array)) / sizeof((array)[0])) + +/** + * Sets 32-bit wide register bits, indicated by the field, to a value v. + */ +#define FSP_REG_FIELD_SET_BITS32(base, reg, field, v) \ + ((uint32_t) (((uint32_t) (v) << (base ## _ ## reg ## _ ## field ## _Pos)) & \ + (base ## _ ## reg ## _ ## field ## _Msk))) + +/** + * Access register field mask. + * + * Returns a register field mask (aimed to be used with local variables). + * e.g. + * \code + * uint16_t tmp; + * + * tmp = CRG_TOP->SYS_STAT_REG; + * + * if (tmp & FSP_REG_MSK(CRG_TOP, SYS_STAT_REG, XTAL16_TRIM_READY)) { + * ... + * \endcode + */ +#define FSP_REG_MSK(base, reg, field) (base ## _ ## reg ## _ ## field ## _Msk) + +/** + * Macro to swap the bytes of a 32-bit variable + * + * @param[in] a The 32-bit variable + */ +#define FSP_SWAP32(a) (__REV(a)) + +/** + * Macro to swap the bytes of a 16-bit variable + * + * @param[in] a The 16-bit variable + */ +#define FSP_SWAP16(a) (__REVSH(a)) + +/**************************************************************** + * + * 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(__IAR_SYSTEMS_ICC__) && ((__CORE__ == __ARM7EM__) || (__CORE__ == __ARM_ARCH_8M_BASE__))) || \ + defined(__ARM_ARCH_7EM__) // CM4 + #ifndef BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION + #define BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION (0U) + #endif +#else // CM23 + #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. */ +#ifndef UNIT_TESTING + #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 +#else + #define FSP_CRITICAL_SECTION_GET_CURRENT_STATE() (0) + #define FSP_CRITICAL_SECTION_SET_STATE(x) (void) x + #define FSP_CRITICAL_SECTION_IRQ_MASK_SET (1U) +#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 + +#ifdef UNIT_TESTING + #define TESTABLE_STATIC +#else + #define TESTABLE_STATIC static +#endif + +/*******************************************************************************************************************//** + * Macro to enable the debugger + * + ***********************************************************************************************************************/ +#define BSP_DEBUGGER_ENABLE (CRG_TOP->SYS_CTRL_REG_b.DEBUGGER_ENABLE = 1) + +/*******************************************************************************************************************//** + * Macro to disable the debugger + * + ***********************************************************************************************************************/ +#define BSP_DEBUGGER_DISABLE (CRG_TOP->SYS_CTRL_REG_b.DEBUGGER_ENABLE = 0) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +// TIN_HACK_WIFI +#ifdef BSP_MCU_GROUP_RA6W1 + +/* Support 64bit time */ +typedef unsigned long long __time64_t; +typedef __time64_t ra6w1_time_t; +#endif + +/** 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_PM_WOKENUP, ///< Called after wake up when power management module is used + BSP_WARM_PM_SLEEP, ///< Called before sleep when power management module is used +} bsp_warm_start_event_t; + +/** + * @brief The AMBA High-Performance Bus (AHB) clock divider + */ +typedef enum e_ahb_clk_div +{ + BSP_AHB_CLK_DIV1 = 0, ///< Divide by 1 + BSP_AHB_CLK_DIV2 = 1, ///< Divide by 2 + BSP_AHB_CLK_DIV4 = 2, ///< Divide by 4 + BSP_AHB_CLK_DIV8 = 3, ///< Divide by 8 + BSP_AHB_CLK_DIV16 = 4, ///< Divide by 16 +#if BSP_MCU_GROUP_RA6W1 + BSP_AHB_CLK_DIV32 = 5, ///< Divide by 32 + BSP_AHB_CLK_DIV64 = 6, ///< Divide by 64 + BSP_AHB_CLK_DIV128 = 7, ///< Divide by 128 +#endif + BSP_AHB_CLK_DIV_INVALID = 8 +} ahb_clk_div_t; + +/* Private enum used in R_FSP_SystemClockHzGet(). */ +typedef enum e_fsp_priv_clock +{ + FSP_PRIV_CLOCK_SYS_CLK = 0, +#ifndef BSP_MCU_GROUP_RA6W1 + FSP_PRIV_CLOCK_SYS_HCLK, // HCLK + FSP_PRIV_CLOCK_SYS_PCLK, // PCLK + FSP_PRIV_CLOCK_SYS_QCLK, // QSPI clock + FSP_PRIV_CLOCK_UART = 9, // UART clock +#else + FSP_PRIV_CLOCK_CC312 = 1, ///< Security IP + FSP_PRIV_CLOCK_OTP = 2, + FSP_PRIV_CLOCK_OQSPI_FLASH = 3, + FSP_PRIV_CLOCK_QSPI_RAM = 4, + FSP_PRIV_CLOCK_SPI = 5, + FSP_PRIV_CLOCK_TIMER = 6, + FSP_PRIV_CLOCK_I2C = 7, + FSP_PRIV_CLOCK_SDIO = 8, + FSP_PRIV_CLOCK_UART = 9, + FSP_PRIV_CLOCK_AUX_ADC = 10, + FSP_PRIV_CLOCK_WDT = 11, +#endif +} fsp_priv_clock_t; + +/* Private enum used in by bsp_prv_clock_set(), bsp_prv_sysclk_set() and bsp_prv_lpclk_set(). */ +typedef enum e_fsp_priv_source_clock +{ + FSP_PRIV_CLOCK_RCHS = 0, ///< The high-speed on-chip oscillator (RCHS) + FSP_PRIV_CLOCK_XTALM, ///< The main oscillator (XTAL32M) + FSP_PRIV_CLOCK_XTALM_DBLR, ///< The main oscillator (XTAL64M) + FSP_PRIV_CLOCK_PLL, ///< The PLL oscillator + FSP_PRIV_CLOCK_RCLP, ///< The middle-speed on-chip oscillator (RCLP) + FSP_PRIV_CLOCK_RCX, ///< The low-speed on-chip oscillator (RCX) + FSP_PRIV_CLOCK_XTALK, ///< The subclock oscillator (XTAL32K) + FSP_PRIV_CLOCK_DIGITAL, ///< The subclock oscillator (externally supplied digital clock) +} fsp_priv_source_clock_t; + +typedef struct st_bsp_unique_id +{ + union + { + uint32_t unique_id_words[4]; + uint8_t unique_id_bytes[16]; + }; +} bsp_unique_id_t; + +typedef void (* bsp_on_error_cb_t)(uintptr_t args); + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ +extern bsp_on_error_cb_t g_halt_impl; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +uint32_t R_BSP_SourceClockHzGet(fsp_priv_source_clock_t clock); +void R_BSP_SourceClockHzSet(fsp_priv_source_clock_t clock, uint32_t freq); + +// TIN_HACK_WIFI +#ifdef BSP_MCU_GROUP_RA6W1 +bool R_BSP_RetainedIoExecute(); + +#endif + +/*********************************************************************************************************************** + * Global variables (defined in other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Inline Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Return active interrupt vector number value + * + * @return Active interrupt vector number value + **********************************************************************************************************************/ +__STATIC_FORCEINLINE 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); +} + +/*******************************************************************************************************************//** + * @brief Get the Sys_clk divider for HCLK + * + * @return current HCLK_DIV value + **********************************************************************************************************************/ +__STATIC_INLINE ahb_clk_div_t bsp_clock_ahb_div_get (void) +{ + ahb_clk_div_t div = BSP_AHB_CLK_DIV1; + +#if BSP_FEATURE_CGC_HAS_HCLK_DIV + div = (ahb_clk_div_t) CRG_TOP->CLK_AMBA_REG_b.HCLK_DIV; + div = div > BSP_AHB_CLK_DIV16 ? BSP_AHB_CLK_DIV16 : div; +#endif + + return div; +} + +/*******************************************************************************************************************//** + * 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_HAS_PCLK_DIV) || (BSP_FEATURE_HAS_QCLK_DIV) + uint32_t clk_amba_reg = CRG_TOP->CLK_AMBA_REG; +#endif + + uint32_t div = 0; + uint32_t hclk_div = bsp_clock_ahb_div_get(); + uint32_t sys_clk_Hz = SystemCoreClock << hclk_div; + +#ifdef BSP_MCU_GROUP_RA6W1 + uint32_t HCLK = SystemCoreClock / 1; /* CLK_AMBA_REG.HCLK_DIV = 0 */ + uint32_t PERI_CLK = SystemCoreClock; /* due to XTAL mode */ +#endif + switch (clock) + { + case FSP_PRIV_CLOCK_SYS_CLK: + { + break; + } + +#ifndef BSP_MCU_GROUP_RA6W1 + case FSP_PRIV_CLOCK_SYS_HCLK: + { + div = hclk_div; + break; + } + +#else + case FSP_PRIV_CLOCK_CC312: + case FSP_PRIV_CLOCK_OTP: + { + sys_clk_Hz = HCLK; /* there are no dividers applied when SYS_CLK = XTAL40M */ + break; + } + + case FSP_PRIV_CLOCK_OQSPI_FLASH: + case FSP_PRIV_CLOCK_QSPI_RAM: + { + sys_clk_Hz = SystemCoreClock; + break; + } + + case FSP_PRIV_CLOCK_SPI: + { + uint32_t SPI_CLK = 0; + if (3 == CRG_TOP->CLK_CTRL_REG_b.SYS_CLK_SEL) /* SYS_CLK = SYS-PLL */ + { + uint8_t spi_clk_bit = CRG_TOP->CLK_CTRL_REG_b.PLL_SPI_CLK_SEL; + if (0 == spi_clk_bit) /* SPI_CLK = 120Mhz */ + { + SPI_CLK = 120000000; + } + else if (1 == spi_clk_bit) /* SPI_CLK = 96Mhz */ + { + SPI_CLK = 96000000; + } + else if (2 == spi_clk_bit) /* SPI_CLK = 80Mhz */ + { + SPI_CLK = 80000000; + } + else /* SPI_CLK = 53Mhz */ + { + SPI_CLK = 53000000; + } + } + else /* SYS_CLK = XTAL40M */ + { + SPI_CLK = SystemCoreClock; /* due to XTAL mode */ + } + + sys_clk_Hz = SPI_CLK; + break; + } + + case FSP_PRIV_CLOCK_TIMER: + case FSP_PRIV_CLOCK_I2C: + case FSP_PRIV_CLOCK_SDIO: + case FSP_PRIV_CLOCK_UART: + { + sys_clk_Hz = CRG_TOP->CLK_CTRL_REG_b.PLL_PERI_ENABLE ? 2 * PERI_CLK : PERI_CLK; + break; + } + + case FSP_PRIV_CLOCK_AUX_ADC: + { + uint32_t AUX_CLK = 15000000; /* 15 MHz */ + sys_clk_Hz = AUX_CLK; + break; + } + + case FSP_PRIV_CLOCK_WDT: + { + #if BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_XTALK + sys_clk_Hz = BSP_CFG_XTALK_HZ; + #else + sys_clk_Hz = BSP_RCX_HZ; + #endif + break; + } +#endif +#if BSP_FEATURE_CGC_HAS_PCLK_DIV + case FSP_PRIV_CLOCK_SYS_PCLK: + { + div = hclk_div + FSP_REG_VAR_FIELD_GET(CRG_TOP, CLK_AMBA_REG, PCLK_DIV, clk_amba_reg); + break; + } +#endif +#if BSP_FEATURE_HAS_QCLK_DIV + case FSP_PRIV_CLOCK_SYS_QCLK: + { + div = FSP_REG_VAR_FIELD_GET(CRG_TOP, CLK_AMBA_REG, QSPI_SDR_DIV2, clk_amba_reg); + break; + } +#endif +#if BSP_MCU_GROUP_RA6W3 + case FSP_PRIV_CLOCK_UART: + { + #if defined(BOARD_RA6W3XX_PAL) + sys_clk_Hz = EMULATOR_BASE_CLOCK; + #endif + break; + } +#endif + default: + { + BSP_CHECK_FATAL(0); + } + } + + return sys_clk_Hz >> div; +} + +/*******************************************************************************************************************//** + * 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 1 << 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; + } + + /* Clock Divided by 5 */ + return 5U; +} + +#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) +{ + + // TODO + return 0; +#if 0 + + 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 + +#if BSP_FEATURE_BSP_HAS_CODE_SYSTEM_CACHE + + /* Disable the C-Cache. */ + R_CACHE->CCACTL = 0U; +#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 + +#if BSP_FEATURE_BSP_HAS_CODE_SYSTEM_CACHE + + /* Configure the C-Cache line size. */ + R_CACHE->CCALCF = BSP_CFG_C_CACHE_LINE_SIZE; + + /* 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 or CUSTOM_BSP_CFG_HANDLE_UNRECOVERABLE_ERROR macro. + */ +#if defined(CUSTOM_UNRECOVERABLE_ERROR_HANDLER) + #define BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(x) CUSTOM_UNRECOVERABLE_ERROR_HANDLER +#elif !defined(BSP_CFG_HANDLE_UNRECOVERABLE_ERROR) + + #define BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(x) __BKPT((x)) +#endif + +/** + * Streamlined version of memcpy(). + * + * It is optimized for the following cases: + * - dest and src are 32-bit aligned + * - if n is larger than 32, blocks of 32 bytes are copied, to the extent possible + * - if n is larger than 16, blocks of 16 bytes are copied, to the extent possible + */ +extern void * fast_memcpy(void * dest, const void * src, size_t n); + +/** + * Streamlined version of memset(). + * + * It is optimized for the following cases: + * - if n is larger than 32, blocks of 32 bytes are set, to the extent possible + * - if n is larger than 16, blocks of 16 bytes are set, to the extent possible + */ +extern void * fast_memset(void * b, int c, size_t len); + +/** @} (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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_compiler_support.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_compiler_support.h new file mode 100644 index 000000000000..69e11c232bb9 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_compiler_support.h @@ -0,0 +1,124 @@ +/* +* Copyright (c) 2020 - 2026 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 + #define BSP_ATTRIBUTE_STACKLESS __attribute__((naked)) + #define BSP_FORCE_INLINE __attribute__((always_inline)) + #define BSP_NO_INLINE __attribute__((noinline)) + #define BSP_READ_ONLY + #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)) + #define BSP_NO_INLINE __attribute__((noinline)) + #define BSP_READ_ONLY + #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") + #define BSP_NO_INLINE _Pragma("inline=never") + #define BSP_READ_ONLY __ro_placement + #endif + + #ifndef BSP_SECTION_STACK + #define BSP_SECTION_STACK BSP_UNINIT_SECTION_PREFIX ".stack" + #endif + + #ifdef BSP_MCU_GROUP_RA6W1 + #define BSP_SECTION_NOINIT BSP_UNINIT_SECTION_PREFIX ".noinit" + #else + #define BSP_SECTION_NOINIT BSP_UNINIT_SECTION_PREFIX ".ram_noinit" + #endif + + #define BSP_SECTION_FIXED_VECTORS ".fixed_vectors" + #define BSP_SECTION_PREINIT ".preinit_array" + #define BSP_SECTION_INIT ".init_array" + #define BSP_SECTION_APPLICATION_VECTORS ".application_vectors" + #define BSP_SECTION_CODE_IN_RAM ".ram_code_from_flash" + +/* #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_PLACE_CODE_IN_RAM BSP_PLACE_IN_SECTION(BSP_SECTION_CODE_IN_RAM) + +/* #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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_delay.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_delay.c new file mode 100644 index 000000000000..f8a95090aa2e --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_delay.c @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "bsp_delay.h" +#if dg_configUSE_CLOCK_MGR + #include "sys_clock_mgr.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_DELAY_OVERHEAD_CYCLES (72) +#define BSP_CYCLES_PER_DELAY_REP (4) +#define BSP_MAX_DELAY_CYCLES (0xFFFFFFFF) + +/*********************************************************************************************************************** + * 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 + * + * @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 Delays may be longer than expected when compiler optimization is turned off. + **********************************************************************************************************************/ +#if defined(__GNUC__) || defined(__ARMCC_VERSION) +#pragma GCC push_options +#pragma GCC optimize ("O3") +#endif +BSP_PLACE_CODE_IN_RAM void R_BSP_SoftwareDelay (uint32_t delay, bsp_delay_units_t units) +{ + uint32_t cpu_clk_Mhz; + uint32_t reps = 0; + uint32_t total_us = (delay * units); /** Convert the requested time to microseconds. */ + + static const uint8_t OVERHEAD_REPS = BSP_DELAY_OVERHEAD_CYCLES / BSP_CYCLES_PER_DELAY_REP; + +#if dg_configUSE_CLOCK_MGR + FSP_CRITICAL_SECTION_DEFINE; + + FSP_CRITICAL_SECTION_ENTER; + cpu_clk_Mhz = cm_cpu_clk_get_fromISR(); + FSP_CRITICAL_SECTION_EXIT; +#else + static const uint32_t DIVIDER = 1000000; + + cpu_clk_Mhz = SystemCoreClock / DIVIDER; /** Get the system clock frequency in Hz. */ +#endif + +#if BSP_FEATURE_CGC_HAS_HCLK_DIV + uint32_t hclk_div; + hclk_div = CRG_TOP->CLK_AMBA_REG_b.HCLK_DIV; + + cpu_clk_Mhz = cpu_clk_Mhz >> hclk_div; +#endif + + reps = cpu_clk_Mhz * total_us / BSP_CYCLES_PER_DELAY_REP; + +#ifdef CLK_DELAY_SANITY_CHECKS + BSP_CHECK_DEBUG(usec <= (BSP_MAX_DELAY_CYCLES / cpu_clk_Mhz)); // The requested delay is greater than the maximum delay this function can achieve + BSP_CHECK_DEBUG(reps > OVERHEAD_REPS); // The requested delay is smaller than the minimum delay this function can achieve. +#endif + + /** Only delay if the supplied parameters constitute a delay. */ + if ((reps <= OVERHEAD_REPS) || (total_us > (BSP_MAX_DELAY_CYCLES / cpu_clk_Mhz))) + { + return; + } + __asm volatile ( + " nop \n" + " nop \n" + " nop \n" + " nop \n" + " nop \n" + "loop: nop \n" + " subs %[reps], %[reps], #1 \n" + " bne loop \n" + : // outputs + :[reps] "r" (reps - OVERHEAD_REPS) // inputs + : // clobbers + ); +} + +#if defined(__GNUC__) || defined(__ARMCC_VERSION) +#pragma GCC pop_options +#endif + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_delay.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_delay.h new file mode 100644 index 000000000000..77b966a707b2 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_delay.h @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2020 - 2026 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_device_info.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_device_info.h new file mode 100644 index 000000000000..aadfafc511f7 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_device_info.h @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_DEVICE_INFO_H +#define BSP_DEVICE_INFO_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#if BSP_MCU_GROUP_RA6B1 + #include "../ra6b1/bsp_device_info.h" +#elif BSP_MCU_GROUP_RA6U1 + #include "../ra6u1/bsp_device_info.h" +#elif BSP_MCU_GROUP_RA6B2 + #include "../ra6b2/bsp_device_info.h" +#elif BSP_MCU_GROUP_RA6W1 + #include "../ra6w1/bsp_device_info.h" +#elif BSP_MCU_GROUP_RA6W3 + #include "../ra6w3/bsp_device_info.h" +#endif + +/** 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) + **********************************************************************************************************************/ + +/* The following functions are defined in the device-specific source files. */ +bool bsp_device_info_init(void); +bool bsp_device_variant_detect(void); +bool bsp_device_info_check(uint32_t mask, uint32_t attribute); +uint32_t bsp_device_info_get(void); +bool bsp_device_info_compatibility_check(void); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif /* BSP_DEVICE_INFO_H */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_exceptions.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_exceptions.h new file mode 100644 index 000000000000..faa8da1086db --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_exceptions.h @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2020 - 2026 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 + **********************************************************************************************************************/ + + #if !defined(BSP_API_OVERRIDE) + +/* 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; + #endif + + #ifdef __cplusplus +} + #endif + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_freeze.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_freeze.h new file mode 100644 index 000000000000..4c63d47ea608 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_freeze.h @@ -0,0 +1,20 @@ +#ifndef BSP_FREEZE_H +#define BSP_FREEZE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +#if BSP_MCU_GROUP_RA6B1 + #include "../ra6b1/bsp_freeze.h" +#elif BSP_MCU_GROUP_RA6U1 + #include "../ra6u1/bsp_freeze.h" +#elif BSP_MCU_GROUP_RA6W1 + #include "../ra6w1/bsp_freeze.h" +#elif BSP_MCU_GROUP_RA6B2 + #include "../ra6b2/bsp_freeze.h" +#elif BSP_MCU_GROUP_RA6W3 + #include "../ra6w3/bsp_freeze.h" +#endif + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.c new file mode 100644 index 000000000000..9e44c93730e4 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.c @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#if BSP_MCU_GROUP_RA6W1 + #define BSP_GRP_IRQ_TOTAL_ITEMS (16U) +#else + #define BSP_GRP_IRQ_TOTAL_ITEMS (3U) +#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_GRP_IRQ_TOTAL_ITEMS] BSP_SECTION_EARLY_INIT; + +static void (* g_bsp_group_nmi_cb)(const uint32_t * p_exception_args); + +BSP_WEAK_REFERENCE void NMI_HandlerC(unsigned long * exception_args); +BSP_WEAK_REFERENCE void HardFault_HandlerC(unsigned long * exception_args); +BSP_WEAK_REFERENCE void SecureFault_HandlerC(unsigned long * exception_args); + +#if BSP_FEATURE_BSP_HAS_ICU +static void bsp_group_irq_call(bsp_grp_irq_t irq); + +/*******************************************************************************************************************//** + * Calls the callback function for an interrupt if a callback has been registered. + * + * @param[in] irq Which interrupt to check and possibly call. + * + * @retval FSP_SUCCESS Callback was called. + * @retval FSP_ERR_INVALID_ARGUMENT No valid callback has been registered for this interrupt source. + * + * @warning This function is called from within an interrupt + **********************************************************************************************************************/ +static void bsp_group_irq_call (bsp_grp_irq_t irq) +{ + /** Check for valid callback */ + if (NULL != g_bsp_group_irq_sources[irq]) + { + /** Callback has been found. Call it. */ + g_bsp_group_irq_sources[irq](irq); + } +} + +#endif + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Register a callback function for supported interrupts. If NULL is passed for the callback argument then any + * previously registered callbacks are unregistered. + * + * @param[in] irq Interrupt for which to register a callback. + * @param[in] p_callback Pointer to function to call when interrupt occurs. + * + * @retval FSP_SUCCESS Callback registered + * @retval FSP_ERR_ASSERTION Callback pointer is NULL + **********************************************************************************************************************/ +fsp_err_t R_BSP_GroupIrqWrite (bsp_grp_irq_t irq, void (* p_callback)(bsp_grp_irq_t irq)) +{ +#if BSP_CFG_PARAM_CHECKING_ENABLE + + /* Check pointer for NULL value. */ + FSP_ASSERT(p_callback); +#endif + + /* Register callback. */ + g_bsp_group_irq_sources[irq] = p_callback; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Register a callback function for NMI. If NULL is passed for the callback argument then any + * previously registered callbacks are unregistered. + * + * @param[in] p_callback Pointer to function to call when NMI occurs. + * + * @retval FSP_SUCCESS Callback registered + * @retval FSP_ERR_ASSERTION Callback pointer is NULL + **********************************************************************************************************************/ +fsp_err_t R_BSP_GroupNmiWrite (void (* p_callback)(const uint32_t * p_exception_args)) +{ + g_bsp_group_nmi_cb = 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. + * + * @note NMI exception is caused due to watchdog timeout for DA1469x and hence the registered callback function + * for handling the WDT error is directly referred + **********************************************************************************************************************/ + +BSP_WEAK_REFERENCE void NMI_HandlerC (unsigned long * exception_args) +{ + FSP_PARAMETER_NOT_USED(exception_args); +#if BSP_FEATURE_BSP_HAS_ICU + uint32_t nmisr = ICU->ICU_NMISR_REG; + + /* Loop over all NMI status flags */ + bsp_grp_irq_t irq = BSP_GRP_IRQ_WDT_ERROR; + if (0U != (nmisr & (1U << irq))) + { + g_bsp_group_nmi_cb((uint32_t *) exception_args); + } + else + { + for ( ; irq <= (bsp_grp_irq_t) (BSP_GRP_IRQ_TOTAL_ITEMS - 1); 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. */ + ICU->ICU_NMICLR_REG = nmisr; +#else + if (g_bsp_group_nmi_cb != NULL) + { + g_bsp_group_nmi_cb((uint32_t *) exception_args); + } + else + { + /* Wait for the reset to occur */ + while (1) + { + } + } +#endif +} + +BSP_WEAK_REFERENCE void HardFault_HandlerC (unsigned long * exception_args) +{ + FSP_PARAMETER_NOT_USED(exception_args); + + while (1) + { + } +} + +BSP_WEAK_REFERENCE void SecureFault_HandlerC (unsigned long * exception_args) +{ + FSP_PARAMETER_NOT_USED(exception_args); + + while (1) + { + } +} + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.h new file mode 100644 index 000000000000..9c9e0df733ba --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_group_irq.h @@ -0,0 +1,58 @@ +/* +* Copyright (c) 2020 - 2026 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_WDT_ERROR = 0, ///< WDT underflow/refresh error has occurred + BSP_GRP_IRQ_VBATT = 1, ///< VBATT monitor interrupt + BSP_GRP_IRQ_TRUSTZONE = 2, ///< 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_guard.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_guard.c new file mode 100644 index 000000000000..03db6309c2a0 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_guard.c @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2020 - 2026 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 + +extern uint32_t g_bsp_reset_stat_reg; + +BSP_CMSE_NONSECURE_ENTRY uint32_t R_BSP_ResetStatusGet (void) +{ + return g_bsp_reset_stat_reg; +} + +/* 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_guard.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_guard.h new file mode 100644 index 000000000000..066477b67c65 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_guard.h @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2020 - 2026 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 uint32_t R_BSP_ResetStatusGet(void); + +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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_io.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_io.h new file mode 100644 index 000000000000..78ff01ad9526 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_io.h @@ -0,0 +1,408 @@ +/* +* Copyright (c) 2020 - 2026 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 + +/*********************************************************************************************************************** + * Includes + ***********************************************************************************************************************/ + +/* Gets MCU configuration information. */ +#include "bsp_api.h" + +#if BSP_MCU_GROUP_RA6B1 + #include "../ra6b1/bsp_io.h" +#elif BSP_MCU_GROUP_RA6U1 + #include "../ra6u1/bsp_io.h" +#elif BSP_MCU_GROUP_RA6B2 + #include "../ra6b2/bsp_io.h" +#elif BSP_MCU_GROUP_RA6W1 + #include "../ra6w1/bsp_io.h" +#elif BSP_MCU_GROUP_RA6W3 + #include "../ra6w3/bsp_io.h" +#endif + +/* 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_IO_PORT_BITS (0xC0U) +#define BSP_IO_PIN_BITS (0x3FU) + +/* Shift to get port in bsp_io_port_t and bsp_io_port_pin_t enums. */ +#define BSP_IO_PORT_OFFSET (6U) + +#define BSP_IO_PXX_MODE_REG(_port, _pin) \ + *(&(GPIO->P0_00_MODE_REG) + (((_port) == 0) ? 0 : \ + ((_port) == 1) ? BSP_FEATURE_IO_PORT0_GPIO_COUNT : \ + BSP_FEATURE_IO_PORT0_GPIO_COUNT + BSP_FEATURE_IO_PORT1_GPIO_COUNT) + (_pin)) + +/*********************************************************************************************************************** + * 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 = 0x0, ///< Input + BSP_IO_DIRECTION_OUTPUT = 0x300, ///< Output +} bsp_io_direction_t; + +/** Superset list of all possible IO ports. */ +typedef enum e_bsp_io_port +{ + BSP_IO_PORT_00 = 0x00, ///< IO port 0 + BSP_IO_PORT_01 = 0x01, ///< IO port 1 + BSP_IO_PORT_02 = 0x02, ///< IO port 2 + + /** Marks end of enum */ + BSP_IO_PORT_MAX, +} 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 = 0x00, ///< IO port 0 pin 0 + BSP_IO_PORT_00_PIN_01 = 0x01, ///< IO port 0 pin 1 + BSP_IO_PORT_00_PIN_02 = 0x02, ///< IO port 0 pin 2 + BSP_IO_PORT_00_PIN_03 = 0x03, ///< IO port 0 pin 3 + BSP_IO_PORT_00_PIN_04 = 0x04, ///< IO port 0 pin 4 + BSP_IO_PORT_00_PIN_05 = 0x05, ///< IO port 0 pin 5 + BSP_IO_PORT_00_PIN_06 = 0x06, ///< IO port 0 pin 6 + BSP_IO_PORT_00_PIN_07 = 0x07, ///< IO port 0 pin 7 + BSP_IO_PORT_00_PIN_08 = 0x08, ///< IO port 0 pin 8 + BSP_IO_PORT_00_PIN_09 = 0x09, ///< IO port 0 pin 9 + BSP_IO_PORT_00_PIN_10 = 0x0A, ///< IO port 0 pin 10 + BSP_IO_PORT_00_PIN_11 = 0x0B, ///< IO port 0 pin 11 + BSP_IO_PORT_00_PIN_12 = 0x0C, ///< IO port 0 pin 12 + BSP_IO_PORT_00_PIN_13 = 0x0D, ///< IO port 0 pin 13 + BSP_IO_PORT_00_PIN_14 = 0x0E, ///< IO port 0 pin 14 + BSP_IO_PORT_00_PIN_15 = 0x0F, ///< IO port 0 pin 15 + BSP_IO_PORT_00_PIN_16 = 0x10, ///< IO port 0 pin 16 + BSP_IO_PORT_00_PIN_17 = 0x11, ///< IO port 0 pin 17 + BSP_IO_PORT_00_PIN_18 = 0x12, ///< IO port 0 pin 18 + BSP_IO_PORT_00_PIN_19 = 0x13, ///< IO port 0 pin 19 + BSP_IO_PORT_00_PIN_20 = 0x14, ///< IO port 0 pin 20 + BSP_IO_PORT_00_PIN_21 = 0x15, ///< IO port 0 pin 21 + BSP_IO_PORT_00_PIN_22 = 0x16, ///< IO port 0 pin 22 + BSP_IO_PORT_00_PIN_23 = 0x17, ///< IO port 0 pin 23 + BSP_IO_PORT_00_PIN_24 = 0x18, ///< IO port 0 pin 24 + BSP_IO_PORT_00_PIN_25 = 0x19, ///< IO port 0 pin 25 + BSP_IO_PORT_00_PIN_26 = 0x1A, ///< IO port 0 pin 26 + BSP_IO_PORT_00_PIN_27 = 0x1B, ///< IO port 0 pin 27 + BSP_IO_PORT_00_PIN_28 = 0x1C, ///< IO port 0 pin 28 + BSP_IO_PORT_00_PIN_29 = 0x1D, ///< IO port 0 pin 29 + BSP_IO_PORT_00_PIN_30 = 0x1E, ///< IO port 0 pin 30 + BSP_IO_PORT_00_PIN_31 = 0x1F, ///< IO port 0 pin 31 + BSP_IO_PORT_01_PIN_00 = 0x40, ///< IO port 1 pin 0 + BSP_IO_PORT_01_PIN_01 = 0x41, ///< IO port 1 pin 1 + BSP_IO_PORT_01_PIN_02 = 0x42, ///< IO port 1 pin 2 + BSP_IO_PORT_01_PIN_03 = 0x43, ///< IO port 1 pin 3 + BSP_IO_PORT_01_PIN_04 = 0x44, ///< IO port 1 pin 4 + BSP_IO_PORT_01_PIN_05 = 0x45, ///< IO port 1 pin 5 + BSP_IO_PORT_01_PIN_06 = 0x46, ///< IO port 1 pin 6 + BSP_IO_PORT_01_PIN_07 = 0x47, ///< IO port 1 pin 7 + BSP_IO_PORT_01_PIN_08 = 0x48, ///< IO port 1 pin 8 + BSP_IO_PORT_01_PIN_09 = 0x49, ///< IO port 1 pin 9 + BSP_IO_PORT_01_PIN_10 = 0x4A, ///< IO port 1 pin 10 + BSP_IO_PORT_01_PIN_11 = 0x4B, ///< IO port 1 pin 11 + BSP_IO_PORT_01_PIN_12 = 0x4C, ///< IO port 1 pin 12 + BSP_IO_PORT_01_PIN_13 = 0x4D, ///< IO port 1 pin 13 + BSP_IO_PORT_01_PIN_14 = 0x4E, ///< IO port 1 pin 14 + BSP_IO_PORT_01_PIN_15 = 0x4F, ///< IO port 1 pin 15 + BSP_IO_PORT_01_PIN_16 = 0x50, ///< IO port 1 pin 16 + BSP_IO_PORT_01_PIN_17 = 0x51, ///< IO port 1 pin 17 + + BSP_IO_PORT_02_PIN_00 = 0x80, ///< IO port 2 pin 0 + BSP_IO_PORT_02_PIN_01 = 0x81, ///< IO port 2 pin 1 + BSP_IO_PORT_02_PIN_02 = 0x82, ///< IO port 2 pin 2 + BSP_IO_PORT_02_PIN_03 = 0x83, ///< IO port 2 pin 3 + BSP_IO_PORT_02_PIN_04 = 0x84, ///< IO port 2 pin 4 + BSP_IO_PORT_02_PIN_05 = 0x85, ///< IO port 2 pin 5 + BSP_IO_PORT_02_PIN_06 = 0x86, ///< IO port 2 pin 6 + BSP_IO_PORT_02_PIN_07 = 0x87, ///< IO port 2 pin 7 + BSP_IO_PORT_02_PIN_08 = 0x88, ///< IO port 2 pin 8 + BSP_IO_PORT_02_PIN_09 = 0x89, ///< IO port 2 pin 9 + BSP_IO_PORT_02_PIN_10 = 0x8A, ///< IO port 2 pin 10 + BSP_IO_PORT_02_PIN_11 = 0x8B, ///< IO port 2 pin 11 + BSP_IO_PORT_02_PIN_12 = 0x8C, ///< IO port 2 pin 12 + + /* TIN-TODO: Only used in Tin, remove if possible. */ + BSP_IO_PORT_FF_PIN_FF = 0xFF, ///< Invalid IO port +} bsp_io_port_pin_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * 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) +{ + uint32_t pin_id = pin & BSP_IO_PIN_BITS; + uint32_t port = pin >> BSP_IO_PORT_OFFSET; + __IOM uint32_t * reg = &(GPIO->P0_DATA_REG) + port; + + return ((*reg) >> pin_id) & 1U; +} + +/*******************************************************************************************************************//** + * Set a pin to output and set the output level to the level provided. + * + * @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) +{ + uint32_t pin_id = pin & BSP_IO_PIN_BITS; + uint32_t port = pin >> BSP_IO_PORT_OFFSET; + __IOM uint32_t * reg; +#if !defined(BSP_MCU_GROUP_RA6W1) // TIN-TODO: Unify R_BSP_PinWrite() + BSP_IO_PXX_MODE_REG(port, pin_id) = GPIO_W_CFG_PORT_DIRECTION_OUTPUT; +#endif + + if (BSP_IO_LEVEL_LOW == level) + { + reg = &(GPIO->P0_RESET_DATA_REG) + port; + } + else + { + reg = &(GPIO->P0_SET_DATA_REG) + port; + } + + *reg = 1 << pin_id; +} + +/*******************************************************************************************************************//** + * Configure a pin. + * + * @param[in] pin The pin + * @param[in] cfg Configuration for the pin + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinCfg (bsp_io_port_pin_t pin, uint32_t cfg) +{ + uint32_t pin_id = pin & BSP_IO_PIN_BITS; + uint32_t port = pin >> BSP_IO_PORT_OFFSET; + +#if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + if (BSP_IO_PORT_01 == port) + { + PMU_ANA->POWER_CTRL_REG_b.EN_HSGND = 1; + FSP_HARDWARE_REGISTER_WAIT(PMU_ANA->ANA_STATUS_REG_b.HSGND_OK, 1U); + } +#endif + + BSP_IO_PXX_MODE_REG(port, pin_id) = cfg; +} + +/*******************************************************************************************************************//** + * 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. + * + * @note: The DA HW does not provide such protection, so this function is a NOP. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinAccessEnable (void) +{ +#if BSP_CFG_PFS_PROTECT + + /* Nothing to do. */ +#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. + * + * @note: The DA HW does not provide such protection, so this function is a NOP. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinAccessDisable (void) +{ +#if BSP_CFG_PFS_PROTECT + + /* Nothing to do. */ +#endif +} + +#if BSP_FEATURE_IO_HAS_LATCHING + +/*******************************************************************************************************************//** + * Isolate pads, by disabling the latches of all GPIOs + * + * @note Effectively, the GPIO pads are disconnected from their internal drives and retain their + * current level. + **********************************************************************************************************************/ +__STATIC_INLINE void bsp_io_pads_isolation_enable_all (void) +{ + CRG_TOP->P0_RESET_PAD_LATCH_REG = CRG_TOP_P0_RESET_PAD_LATCH_REG_P0_RESET_LATCH_OPEN_Msk; + CRG_TOP->P1_RESET_PAD_LATCH_REG = CRG_TOP_P1_RESET_PAD_LATCH_REG_P1_RESET_LATCH_OPEN_Msk; + #ifdef CRG_TOP_P2_RESET_PAD_LATCH_REG_P2_RESET_LATCH_OPEN_Msk + CRG_TOP->P2_RESET_PAD_LATCH_REG = CRG_TOP_P2_RESET_PAD_LATCH_REG_P2_RESET_LATCH_OPEN_Msk; + #endif +} + +/*******************************************************************************************************************//** + * De-isolate pads, by enabling the latches of all GPIOs + * + * @note Effectively, the GPIO pads are connected to their internal drives + **********************************************************************************************************************/ +__STATIC_INLINE void bsp_io_pads_isolation_disable_all (void) +{ + CRG_TOP->P0_SET_PAD_LATCH_REG = CRG_TOP_P0_SET_PAD_LATCH_REG_P0_SET_LATCH_OPEN_Msk; + CRG_TOP->P1_SET_PAD_LATCH_REG = CRG_TOP_P1_SET_PAD_LATCH_REG_P1_SET_LATCH_OPEN_Msk; + #ifdef CRG_TOP_P2_SET_PAD_LATCH_REG_P2_SET_LATCH_OPEN_Msk + CRG_TOP->P2_SET_PAD_LATCH_REG = CRG_TOP_P2_SET_PAD_LATCH_REG_P2_SET_LATCH_OPEN_Msk; + #endif +} + +/*******************************************************************************************************************//** + * Disables the latch for the specific gpio. + * + * @param [in] pin The GPIO pin to unlatch + ***********************************************************************************************************************/ +__STATIC_INLINE void bsp_io_pad_isolation_enable (bsp_io_port_pin_t pin) +{ + bsp_io_port_pin_t pin_id = (bsp_io_port_pin_t) (BSP_IO_PIN_BITS & (uint16_t) pin); + bsp_io_port_t port_id = + (bsp_io_port_t) ((BSP_IO_PORT_BITS & (uint16_t) pin) >> BSP_IO_PORT_OFFSET); + + if (BSP_IO_PORT_00 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT0_GPIO_COUNT); + CRG_TOP->P0_RESET_PAD_LATCH_REG = 1 << pin_id; + } + else if (BSP_IO_PORT_01 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT1_GPIO_COUNT); + CRG_TOP->P1_RESET_PAD_LATCH_REG = 1 << pin_id; + } + + #if BSP_FEATURE_IO_PORT2_GPIO_COUNT > 0 + else if (BSP_IO_PORT_02 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT2_GPIO_COUNT); + CRG_TOP->P2_RESET_PAD_LATCH_REG = 1 << pin_id; + } + #endif + else + { + /* Invalid port_id. */ + BSP_CHECK_DEBUG(0); + } +} + +/*******************************************************************************************************************//** + * Enables the latch for the specific gpio. + * + * @param[in] pin The GPIO pin to latch + **********************************************************************************************************************/ +__STATIC_INLINE void bsp_io_pad_isolation_disable (bsp_io_port_pin_t pin) +{ + bsp_io_port_pin_t pin_id = (bsp_io_port_pin_t) (BSP_IO_PIN_BITS & (uint16_t) pin); + bsp_io_port_t port_id = + (bsp_io_port_t) ((BSP_IO_PORT_BITS & (uint16_t) pin) >> BSP_IO_PORT_OFFSET); + + if (BSP_IO_PORT_00 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT0_GPIO_COUNT); + CRG_TOP->P0_SET_PAD_LATCH_REG = 1 << pin_id; + } + else if (BSP_IO_PORT_01 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT1_GPIO_COUNT); + CRG_TOP->P1_SET_PAD_LATCH_REG = 1 << pin_id; + } + + #if BSP_FEATURE_IO_PORT2_GPIO_COUNT > 0 + else if (BSP_IO_PORT_02 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT2_GPIO_COUNT); + CRG_TOP->P2_SET_PAD_LATCH_REG = 1 << pin_id; + } + #endif + else + { + /* Invalid port_id. */ + BSP_CHECK_DEBUG(0); + } +} + +/*******************************************************************************************************************//** + * Checks if the specific GPIO is latched or not. + * + * @param[in] pin The GPIO pin to check latch status for + **********************************************************************************************************************/ +__STATIC_INLINE bool bsp_io_pad_isolation_is_disabled (bsp_io_port_pin_t pin) +{ + bsp_io_port_pin_t pin_id = (bsp_io_port_pin_t) (BSP_IO_PIN_BITS & (uint16_t) pin); + bsp_io_port_t port_id = + (bsp_io_port_t) ((BSP_IO_PORT_BITS & (uint16_t) pin) >> BSP_IO_PORT_OFFSET); + + if (BSP_IO_PORT_00 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT0_GPIO_COUNT); + + return CRG_TOP->P0_PAD_LATCH_REG & (1 << pin_id); + } + else if (BSP_IO_PORT_01 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT1_GPIO_COUNT); + + return CRG_TOP->P1_PAD_LATCH_REG & (1 << pin_id); + } + + #if BSP_FEATURE_IO_PORT2_GPIO_COUNT > 0 + else if (BSP_IO_PORT_02 == port_id) + { + BSP_CHECK_DEBUG(pin_id < BSP_FEATURE_IO_PORT2_GPIO_COUNT); + + return CRG_TOP->P2_PAD_LATCH_REG & (1 << pin_id); + } + #endif + else + { + /* Invalid port_id. */ + BSP_CHECK_DEBUG(0); + } + + return false; +} + +#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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_irq.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_irq.c new file mode 100644 index 000000000000..4be203e42650 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_irq.c @@ -0,0 +1,103 @@ +/* +* Copyright (c) 2020 - 2026 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_PRV_BITS_PER_WORD (32) + +/*********************************************************************************************************************** + * 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_IRQ_VECTOR_MAX_ENTRIES]; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +#if BSP_FEATURE_BSP_HAS_ICU +const bsp_interrupt_event_t g_interrupt_event_link_select[BSP_ICU_VECTOR_MAX_ENTRIES] BSP_WEAK_REFERENCE = +{ + (bsp_interrupt_event_t) 0 +}; +#endif + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * Using the vector table information section that has been built by the linker and placed into ROM in the + * .vector_info. section, this function will initialize the ICU so that configured ELC events will trigger interrupts + * in the NVIC. + * + **********************************************************************************************************************/ +void bsp_irq_cfg (void) +{ +#if FSP_PRIV_TZ_USE_SECURE_REGS + #if !BSP_TZ_SECURE_BUILD + + /* Set the DMAC channels to secure access. */ + #ifdef BSP_TZ_CFG_ICUSARC + + // R_CPSCU->ICUSARC = ~R_CPSCU_ICUSARC_SADMACn_Msk; + #endif + #ifdef BSP_TZ_CFG_DMASARA + + // R_CPSCU->DMASARA = ~R_CPSCU_DMASARA_DMASARAn_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]; + } +#endif + +#if BSP_FEATURE_BSP_HAS_ICU + for (uint32_t i = 0U; i < (BSP_ICU_VECTOR_MAX_ENTRIES - BSP_FEATURE_ICU_FIXED_IELSR_COUNT); i++) + { + volatile uint32_t * ielsr_reg = (&(ICU->ICU_IELSR0_REG) + i); + *ielsr_reg = (uint32_t) g_interrupt_event_link_select[i]; + } +#endif +} diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_irq.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_irq.h new file mode 100644 index 000000000000..77f3372f8be8 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_irq.h @@ -0,0 +1,246 @@ +/* +* Copyright (c) 2020 - 2026 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_IRQ_VECTOR_MAX_ENTRIES (BSP_VECTOR_TABLE_MAX_ENTRIES - BSP_CORTEX_VECTOR_TABLE_ENTRIES) + +#if BSP_FEATURE_BSP_HAS_ICU + #define BSP_ICU_VECTOR_MAX_ENTRIES (BSP_VECTOR_TABLE_MAX_ENTRIES - BSP_CORTEX_VECTOR_TABLE_ENTRIES) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ +extern void * gp_renesas_isr_context[BSP_IRQ_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; +} + +/*******************************************************************************************************************//** + * 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_FORCEINLINE void R_BSP_IrqStatusClear (IRQn_Type irq) +{ +#if BSP_FEATURE_BSP_HAS_ICU + + /* Clear the IR bit in the selected IELSR register. */ + volatile uint32_t * ielsr_reg = (&(ICU->ICU_IELSR0_REG) + irq); + *ielsr_reg &= ~ICU_ICU_IELSR0_REG_ICU_IR_Msk; + + /* Read back the IELSR register to ensure that the IR bit is cleared. */ + FSP_REGISTER_READ(ielsr_reg); +#else + (void) 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_FORCEINLINE void R_BSP_IrqClearPending (IRQn_Type irq) +{ + /* 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(); + + /* 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)); +} + +#if BSP_MCU_GROUP_RA6W1 + +/*******************************************************************************************************************//** + * Set the NVIC pending interrupt. + * + * @param[in] irq Interrupt for which to set the pending 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_IrqSetPending (IRQn_Type irq) +{ + // TIN-TODO: This seems to be used to induce a GPIO_Px_IRQ interrupt after wakeup. + // But there is no clear test case/use case as to why this is needed in the Tin packs. + // This is probably something that is needed by a demo application and was included in the BSP. + // Ported for now only for Tin, and we should remove it later on and sanitize the relevant application. + uint32_t _irq = (uint32_t) irq; + NVIC->ISPR[(((uint32_t) irq) >> 5UL)] = (uint32_t) (1UL << (_irq & 0x1FUL)); +} + +#endif + +/*******************************************************************************************************************//** + * 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->IP[((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_FORCEINLINE 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_FORCEINLINE 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_FORCEINLINE 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); +} + +/*******************************************************************************************************************//** + * @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_FORCEINLINE 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]; +} + +/*******************************************************************************************************************//** + * @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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_mcu_api.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_mcu_api.h new file mode 100644 index 000000000000..b722f0d632a1 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_mcu_api.h @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_MCU_API_H +#define BSP_MCU_API_H + +#include "bsp_pd.h" +#include "bsp_pd_ctrl.h" +#include "bsp_device_info.h" +#include "bsp_linker_info.h" +#include "bsp_assert.h" + +#if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + #include "bsp_rsip.h" +#endif + +#include "bsp_freeze.h" +#if BSP_MCU_GROUP_RA6W1 + #include "bsp_otp.h" + #include "../ra6w1/bsp_io_isolation.h" +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +fsp_err_t R_BSP_GroupIrqWrite(bsp_grp_irq_t irq, void (* p_callback)(bsp_grp_irq_t irq)); +fsp_err_t R_BSP_GroupNmiWrite(void (* p_callback)(const uint32_t * p_exception_args)); + +BSP_PLACE_CODE_IN_RAM 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_module_stop.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_module_stop.h new file mode 100644 index 000000000000..0fd3cfe6d8ec --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_module_stop.h @@ -0,0 +1,183 @@ +/* +* Copyright (c) 2020 - 2026 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. + **********************************************************************************************************************/ +#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)); \ + FSP_CRITICAL_SECTION_EXIT;} + +/*******************************************************************************************************************//** + * 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. + **********************************************************************************************************************/ +#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;} + +/** @} (end addtogroup BSP_MCU) */ + +#if 0U == BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE + #define BSP_MSTP_REG_FSP_IP_GPT(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_GPT(channel) ((BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH >= \ + channel) ? (1U << 5U) : (1U << 6U)); + #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_FSP_IP_POEG(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U)); +#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_FSP_IP_AGT(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_AGT(channel) (1U << (3U - channel)); + #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_FSP_IP_AGT(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_AGT(channel) (1U << (5U - channel)); + #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_FSP_IP_POEG(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U - channel)); + #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_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_FSP_IP_KEY(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_KEY(channel) (1U << (4U - channel)); + #define BSP_MSTP_REG_FSP_IP_POEG(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U - channel)); + #endif +#endif + +#define BSP_MSTP_REG_FSP_IP_DMAC(channel) R_BSP_MSTPCRA +#define BSP_MSTP_BIT_FSP_IP_DMAC(channel) (1U << (22U)); +#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_FSP_IP_CAN(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_CAN(channel) (1U << (2U - channel)); +#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_FSP_IP_IRDA(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_IRDA(channel) (1U << (5U - channel)); +#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_FSP_IP_IIC(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_IIC(channel) (1U << (9U - channel)); +#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_FSP_IP_USBHS(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_USBHS(channel) (1U << (12U - channel)); +#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_FSP_IP_ETHER(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_ETHER(channel) (1U << (15U - channel)); +#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_FSP_IP_SPI(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_SPI(channel) (1U << (19U - channel)); +#define BSP_MSTP_REG_FSP_IP_SCI(channel) R_MSTP->MSTPCRB +#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_BIT_FSP_IP_CAC(channel) (1U << (0U - channel)); +#define BSP_MSTP_REG_FSP_IP_CRC(channel) R_MSTP->MSTPCRC +#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_FSP_IP_CTSU(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_CTSU(channel) (1U << (3U - channel)); +#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_FSP_IP_GLCDC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_GLCDC(channel) (1U << (4U - channel)); +#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_FSP_IP_DRW(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_DRW(channel) (1U << (6U - channel)); +#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_FSP_IP_SRC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_SRC(channel) (1U << (9U - channel)); +#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_FSP_IP_DOC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_DOC(channel) (1U << (13U - channel)); +#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_FSP_IP_TFU(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_TFU(channel) (1U << (20U - channel)); +#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_FSP_IP_CANFD(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_CANFD(channel) (1U << (27U - channel)); +#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_FSP_IP_SCE(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_SCE(channel) (1U << (31U - channel)); +#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_FSP_IP_ADC(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_ADC(channel) (1U << (16U - channel)); +#define BSP_MSTP_REG_FSP_IP_SDADC(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_SDADC(channel) (1U << (17U - channel)); +#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)); +#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_FSP_IP_DAC(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_DAC(channel) (1U << (20U)); +#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_FSP_IP_ACMPHS(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_ACMPHS(channel) (1U << (28U - channel)); +#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_FSP_IP_OPAMP(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_OPAMP(channel) (1U << (31U - channel)); + +/** 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_otp.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_otp.h new file mode 100644 index 000000000000..e48c7d4e0d90 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_otp.h @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_OTP_H +#define BSP_OTP_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#if BSP_MCU_GROUP_RA6W1 + #include "../ra6w1/bsp_otp.h" +#elif BSP_MCU_GROUP_RA6W3 + #include "../ra6w3/bsp_otp.h" +#endif + +/** 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_otp_init(void); +void bsp_otp_timings_set(uint32_t sysclk_freq_MHz); +void bsp_otp_mode_set(uint32_t mode); +void bsp_otp_close(void); + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** @} (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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd.c new file mode 100644 index 000000000000..ccb68b94ec01 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd.c @@ -0,0 +1,270 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#ifdef UNIT_TESTING + #include "fake_regs.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +// Check if the RTC power domain exists in the MCU +#if (BSP_MCU_GROUP_RA6B1) || (BSP_MCU_GROUP_RA6U1) || (BSP_MCU_GROUP_RA6B2) || (BSP_MCU_GROUP_RA6W3) + #define PD_RTC_CHECK (BSP_PD_RTC == power_domain) // All power domains use PMU_CTRL_REG, except RTC which uses PMU_AON_CTRL_REG +#elif (BSP_MCU_GROUP_RA6W1) + #define PD_RTC_CHECK 0 +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +typedef void (* power_domain_ctrl_func)(uint32_t mask, bool is_aon); + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +TESTABLE_STATIC uint8_t bsp_prv_pd_ref_cnt[BSP_PD_ID_COUNT]; + +__STATIC_FORCEINLINE bool valid_pd_check (uint32_t pd_id) +{ + return pd_id < BSP_PD_ID_COUNT; +} + +#ifdef UNIT_TESTING +BSP_WEAK_REFERENCE void hook_for_testable_busy_register_check(uintptr_t reg, uint32_t mask); + +BSP_WEAK_REFERENCE void hook_for_testable_busy_register_check (uintptr_t reg, uint32_t mask) +{ + /* Do nothing. */ + (void) reg; + (void) mask; +} + +#endif + +__STATIC_FORCEINLINE bool pd_is_up_check (uint32_t is_up_mask) +{ + if (0 == is_up_mask) + { + return true; + } + + return bsp_prv_pd_is_up_check(is_up_mask); +} + +__STATIC_FORCEINLINE bool nonzero_cnt_check (uint32_t pd_id) +{ + return bsp_prv_pd_ref_cnt[pd_id] > 0; +} + +__STATIC_FORCEINLINE void atomic_use_pd (bsp_power_domain_t power_domain, uint32_t mask) +{ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + if ((0 == bsp_prv_pd_ref_cnt[power_domain]++) && (mask != 0)) + { + bsp_prv_pd_enable(mask, PD_RTC_CHECK); + } + + FSP_CRITICAL_SECTION_EXIT; +} + +__STATIC_FORCEINLINE void atomic_unuse_pd (bsp_power_domain_t power_domain, uint32_t mask) +{ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + if ((0 == --bsp_prv_pd_ref_cnt[power_domain]) && (mask != 0)) + { + bsp_prv_pd_disable(mask, PD_RTC_CHECK); + } + + FSP_CRITICAL_SECTION_EXIT; +} + +__STATIC_FORCEINLINE void enable_with_counter (uint32_t pd_id) +{ + // compute masks before turning off interrupts + uint32_t sleep_mask; + uint32_t is_up_mask; + + bsp_prv_pd_masks_get((bsp_power_domain_t) pd_id, &sleep_mask, &is_up_mask); + atomic_use_pd((bsp_power_domain_t) pd_id, sleep_mask); + + while (!pd_is_up_check(is_up_mask)) + { +#ifdef UNIT_TESTING + hook_for_testable_busy_register_check((uintptr_t) &CRG_TOP->SYS_STAT_REG, is_up_mask); +#endif + } +} + +__STATIC_FORCEINLINE void disable_with_counter (bsp_power_domain_t power_domain) +{ + // compute masks before turning off interrupts + uint32_t sleep_mask; + uint32_t is_up_mask; + + bsp_prv_pd_masks_get(power_domain, &sleep_mask, &is_up_mask); + atomic_unuse_pd(power_domain, sleep_mask); +} + +__STATIC_FORCEINLINE void atomic_control (power_domain_ctrl_func func, bsp_power_domain_t power_domain) +{ + // compute masks before turning off interrupts + uint32_t sleep_mask; + uint32_t is_up_mask; + bool is_aon = PD_RTC_CHECK; + + bsp_prv_pd_masks_get(power_domain, &sleep_mask, &is_up_mask); + + if (0 == sleep_mask) + { + return; + } + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + func(sleep_mask, is_aon); + + FSP_CRITICAL_SECTION_EXIT; +} + +__STATIC_FORCEINLINE void atomic_enable (bsp_power_domain_t power_domain) +{ + atomic_control(bsp_prv_pd_enable, power_domain); +} + +__STATIC_FORCEINLINE void atomic_disable (bsp_power_domain_t power_domain) +{ + atomic_control(bsp_prv_pd_disable, power_domain); +} + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** + * Initialize (zero) the reference counters of all power domains + */ +void bsp_pd_init (void) +{ + for (bsp_power_domain_t pd = (bsp_power_domain_t) 0; pd < BSP_PD_ID_COUNT; pd++) + { + bsp_prv_pd_ref_cnt[pd] = 0; + } +} + +/** + * Denote starting the use of a power domain + * + * If the power domain \p pd_id was previously unused, it will be enabled. + * A per-power-domain reference counter is used to allow for nested calls of this function. + * + * @param [in] pd_id ID of the power domain to start using + * + * @sa bsp_pd_unuse + */ +BSP_PLACE_CODE_IN_RAM void bsp_pd_use (uint32_t pd_id) +{ + BSP_CHECK_DEBUG(valid_pd_check(pd_id)); + + enable_with_counter(pd_id); + + /* detect overflow */ + BSP_CHECK_FATAL(nonzero_cnt_check(pd_id)); +} + +/** + * Denote ending the use of a power domain + * + * A per-power-domain reference counter is used to allow for nested calls of this function. + * If the reference counter of the power domain \p pd_id reaches zero, the power domain will be disabled. + * + * @param [in] pd_id ID of the power domain to stop using + * + * @sa bsp_pd_use + */ +BSP_PLACE_CODE_IN_RAM void bsp_pd_unuse (uint32_t pd_id) +{ + BSP_CHECK_DEBUG(valid_pd_check(pd_id)); + + /* detect imminent underflow */ + BSP_CHECK_FATAL(nonzero_cnt_check(pd_id)); + + disable_with_counter((bsp_power_domain_t) pd_id); +} + +/** + * Check is a power domain is denoted as used (i.e. its reference counter is non-zero) + * + * @param [in] pd_id ID of the power domain to check + */ +BSP_PLACE_CODE_IN_RAM bool bsp_pd_used_check (uint32_t pd_id) +{ + return nonzero_cnt_check(pd_id); +} + +/** + * Return the "IS_UP" status of a power domain + * + * @param [in] pd_id ID of the power domain to check + * + * @retval true if the power domain is up (activated) + * @retval false if the power domain is down (deactivated) + */ +bool bsp_pd_is_up_check (uint32_t pd_id) +{ + uint32_t sleep_mask; + uint32_t is_up_mask; + + bsp_prv_pd_masks_get((bsp_power_domain_t) pd_id, &sleep_mask, &is_up_mask); + + return pd_is_up_check(is_up_mask); +} + +/** + * Enable (i.e. take out of power-down) a power domain + * + * @param [in] pd_id ID of the power domain to enable + */ +BSP_PLACE_CODE_IN_RAM void bsp_pd_enable (uint32_t pd_id) +{ + BSP_CHECK_DEBUG(valid_pd_check(pd_id)); + + atomic_enable((bsp_power_domain_t) pd_id); +} + +/** + * Disable (i.e. put in power-down) a power domain + * + * @param [in] pd_id ID of the power domain to disable + */ +BSP_PLACE_CODE_IN_RAM void bsp_pd_disable (uint32_t pd_id) +{ + BSP_CHECK_DEBUG(valid_pd_check(pd_id)); + + atomic_disable((bsp_power_domain_t) pd_id); +} + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd.h new file mode 100644 index 000000000000..cff58e1d4afa --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd.h @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_PD_H +#define BSP_PD_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#if BSP_MCU_GROUP_RA6B1 + #include "../ra6b1/bsp_pd.h" +#elif BSP_MCU_GROUP_RA6U1 + #include "../ra6u1/bsp_pd.h" +#elif BSP_MCU_GROUP_RA6B2 + #include "../ra6b2/bsp_pd.h" +#elif BSP_MCU_GROUP_RA6W1 + #include "../ra6w1/bsp_pd.h" +#elif BSP_MCU_GROUP_RA6W3 + #include "../ra6w3/bsp_pd.h" +#endif + +/** 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_pd_init(void); + +BSP_PLACE_CODE_IN_RAM void bsp_pd_use(uint32_t pd_id); + +BSP_PLACE_CODE_IN_RAM void bsp_pd_unuse(uint32_t pd_id); + +BSP_PLACE_CODE_IN_RAM bool bsp_pd_used_check(uint32_t pd_id); + +bool bsp_pd_is_up_check(uint32_t pd_id); + +BSP_PLACE_CODE_IN_RAM void bsp_pd_enable(uint32_t pd_id); + +BSP_PLACE_CODE_IN_RAM void bsp_pd_disable(uint32_t pd_id); + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** @} (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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.c new file mode 100644 index 000000000000..ae14cbd254c3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.c @@ -0,0 +1,284 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +#include "bsp_pd_ctrl.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#define BSP_PRV_DMA_CTRL_REG_OFFSET (8) +#define BSP_PRV_SENSE_REACT_TIMEOUT_ITERATIONS (1000) + +#if defined(BSP_MCU_GROUP_RA6B1) || defined(BSP_MCU_GROUP_RA6U1) || defined(BSP_MCU_GROUP_RA6W3) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +static uint32_t bsp_pd_ctrl_prv_entry_translate(bsp_pd_ctrl_entry_t entry); +static bool bsp_prv_pd_ctrl_entry_match(bsp_pd_ctrl_entry_t entry, uint8_t idx); +static void bsp_pd_ctrl_prv_entry_reset(void); + +/*********************************************************************************************************************** + * Exported global variables and functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Read value of a specific PDC LUT entry. + * + * @param[in] idx Index of the entry that is to be read. Valid range: 0 - (BSP_FEATURE_PD_CTRL_VALID_ENTRIES-1) + * @param[out] p_value Pointer to value that was read from the PDC LUT at the given index. + **********************************************************************************************************************/ +void bsp_pd_ctrl_entry_read (uint32_t idx, uint32_t * p_value) +{ + *p_value = PDC->PDC_CTRL_REG[idx]; +} + +/*******************************************************************************************************************//** + * @brief Add a PDC LUT entry dynamically. Scans all LUT entries until it finds an unused one. A LUT entry shall be + * considered unused if it equals BSP_PD_CTRL_UNUSED_LUT_ENTRY_VALUE. + * + * @param[in] entry Value to be written to the PDC look-up table entry. + * @param[out] p_idx Pointer to variable where index of entry written to the PDC LUT is stored. + * + * @retval BSP_PD_CTRL_SUCCESS Operation was successful and entry was written to the PDC LUT. + * @retval BSP_PD_CTRL_ERROR_PDC_LUT_FULL All PDC LUT entries are used. New entry cannot be added. + **********************************************************************************************************************/ +bsp_pd_ctrl_error_t bsp_pd_ctrl_entry_write (bsp_pd_ctrl_entry_t entry, uint32_t * p_idx) +{ + bool entry_found = false; + + for (uint32_t i = 0; i < BSP_FEATURE_PD_CTRL_VALID_ENTRIES; ++i) + { + if (BSP_PD_CTRL_UNUSED_LUT_ENTRY_VALUE == PDC->PDC_CTRL_REG[i]) + { + *p_idx = i; + PDC->PDC_CTRL_REG[i] = bsp_pd_ctrl_prv_entry_translate(entry); + entry_found = true; + break; + } + } + + return entry_found ? BSP_PD_CTRL_SUCCESS : BSP_PD_CTRL_ERROR_PDC_LUT_FULL; +} + +/*******************************************************************************************************************//** + * @brief Get the first PDC LUT entry index matching specific criteria. + * + * @param[in] entry Search options provided in the form of a PDC LUT entry. Fields that should not be used to + * filter out potential candidates, must be set to BSP_PD_CTRL_FILTER_DONT_CARE. + * @param[in] start Index of starting search point in the PDC LUT. + * @param[out] p_idx Pointer to variable where index of found entry is stored. + * + * + * @retval BSP_PD_CTRL_SUCCESS Operation was successful, entry was found at index idx. + * @retval BSP_PD_CTRL_ERROR_ENTRY_NOT_FOUND Entry was not found in PDC LUT. + **********************************************************************************************************************/ +bsp_pd_ctrl_error_t bsp_pd_ctrl_entry_find (bsp_pd_ctrl_entry_t entry, uint32_t start, uint32_t * p_idx) +{ + for (uint32_t curr_idx = start; curr_idx < BSP_FEATURE_PD_CTRL_VALID_ENTRIES; ++curr_idx) + { + if (bsp_prv_pd_ctrl_entry_match(entry, (uint8_t) curr_idx)) + { + *p_idx = curr_idx; + + return BSP_PD_CTRL_SUCCESS; + } + } + + return BSP_PD_CTRL_ERROR_ENTRY_NOT_FOUND; +} + +/*******************************************************************************************************************//** + * @brief Remove a PDC LUT entry located in a specific index. Entry will contain BSP_PD_CTRL_UNUSED_LUT_ENTRY_VALUE + * after the operation is complete. + * + * @param[in] idx Index of the entry that is to be removed. Valid range: 0 - (BSP_FEATURE_PD_CTRL_VALID_ENTRIES-1) + * @param[out] p_value The value of the entry that was removed from the provided index of the PDC LUT. + **********************************************************************************************************************/ +void bsp_pd_ctrl_entry_remove (uint32_t idx, uint32_t * p_value) +{ + bsp_pd_ctrl_entry_read(idx, p_value); + + PDC->PDC_CTRL_REG[idx] = BSP_PD_CTRL_UNUSED_LUT_ENTRY_VALUE; +} + +/*******************************************************************************************************************//** + * @brief Reset the PDC look-up table. Keeps only the selected PDC LUT entries. All other entries are set to + * BSP_PD_CTRL_UNUSED_LUT_ENTRY_VALUE. + * + * @param[in] p_keep Pointer to list of entries that should be kept. These entries are + * compared to the ones present in the PDC LUT. Fields that should not be used to + * filter out potential kept entries, must be set to BSP_PD_CTRL_FILTER_DONT_CARE. If + * pointer is null, then all entries are reset. + * @param[in] keep_len Number of entries in the list. + * @param[out] p_kept Pointer to bitmask of entries contained in p_keep that were found in PDC LUT and therefore + * were not removed. + **********************************************************************************************************************/ +void bsp_pd_ctrl_entry_reset (bsp_pd_ctrl_entry_t * p_keep, uint32_t keep_len, uint32_t * p_kept) +{ + uint32_t old_value; + + if (!p_keep) + { + /* keep list is empty */ + bsp_pd_ctrl_prv_entry_reset(); + + /* p_kept is ignored, as all entries are reset and therefore the mask of kept entries is 0. */ + return; + } + + if (p_kept) + { + *p_kept = 0; + } + + for (uint8_t idx = 0; idx < BSP_FEATURE_PD_CTRL_VALID_ENTRIES; idx++) + { + uint8_t keep_idx; + for (keep_idx = 0; keep_idx < keep_len; keep_idx++) + { + if (bsp_prv_pd_ctrl_entry_match(p_keep[keep_idx], idx)) + { + if (p_kept) + { + *p_kept |= (1 << keep_idx); + } + + break; + } + } + + /* Keep-list exhausted without a match, remove unmatched entry */ + if (keep_len == keep_idx) + { + bsp_pd_ctrl_entry_remove(idx, &old_value); + } + } +} + +/*******************************************************************************************************************//** + * @brief Set a PDC LUT entry as pending. + * + * @param[in] idx Index of the entry. Valid range: 0 - (BSP_FEATURE_PD_CTRL_VALID_ENTRIES-1) + * + * @retval BSP_PD_CTRL_SUCCESS Operation was successful. + * @retval BSP_PD_CTRL_ERROR_INVALID_LUT_ENTRY Entry contains invalid master and cannot be set pending. + **********************************************************************************************************************/ +bsp_pd_ctrl_error_t bsp_pd_ctrl_pending_set (uint32_t idx) +{ + uint32_t entry; + + bsp_pd_ctrl_entry_read(idx, &entry); + + if (0 == (entry & PDC_PDC_CTRL_REG_PDC_MASTER_Msk)) + { + return BSP_PD_CTRL_ERROR_INVALID_LUT_ENTRY; + } + + PDC->PDC_SET_PENDING_REG = idx; + + return BSP_PD_CTRL_SUCCESS; +} + +/*******************************************************************************************************************//** + * @brief Get all pending PDC LUT entries. + * + * @param[out] p_status Pointer to a 16-bit value, where each bit indicates whether the corresponding + * PDC LUT entry is pending. + **********************************************************************************************************************/ +void bsp_pd_ctrl_pending_get (uint32_t * p_status) +{ + *p_status = PDC->PDC_PENDING_REG & PDC_PDC_PENDING_REG_PDC_PENDING_Msk; +} + +/*******************************************************************************************************************//** + * @brief Acknowledge a PDC LUT entry. + * + * @param[in] idx Index of the entry that is to be acknowledged. Valid range: 0 - (BSP_FEATURE_PD_CTRL_VALID_ENTRIES-1) + **********************************************************************************************************************/ +void bsp_pd_ctrl_acknowledge (uint32_t idx) +{ + PDC->PDC_ACKNOWLEDGE_REG = idx; +} + +/** @} (end addtogroup BSP_MCU) */ + +/*********************************************************************************************************************** + * Private Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Helper function that translates the look-up entry structure to the actual 32-bit value + * that is to be written. + **********************************************************************************************************************/ +static uint32_t bsp_pd_ctrl_prv_entry_translate (bsp_pd_ctrl_entry_t entry) +{ + uint32_t reg_value; + + reg_value = (((entry.trig_select) << PDC_PDC_CTRL_REG_TRIG_SELECT_Pos) & PDC_PDC_CTRL_REG_TRIG_SELECT_Msk) | \ + (((entry.trig_id) << PDC_PDC_CTRL_REG_TRIG_ID_Pos) & PDC_PDC_CTRL_REG_TRIG_ID_Msk) | \ + entry.wakeup_options | \ + (((entry.wakeup_master) << PDC_PDC_CTRL_REG_PDC_MASTER_Pos) & PDC_PDC_CTRL_REG_PDC_MASTER_Msk); + + return reg_value; +} + +/*******************************************************************************************************************//** + * Helper function that checks if PDC LUT entry at index idx matches the one provided. + **********************************************************************************************************************/ +static bool bsp_prv_pd_ctrl_entry_match (bsp_pd_ctrl_entry_t entry, uint8_t idx) +{ + uint32_t mask = 0; + uint32_t pattern = 0; + uint32_t val; + + mask |= (entry.trig_select == BSP_PD_CTRL_FILTER_DONT_CARE) ? mask : PDC_PDC_CTRL_REG_TRIG_SELECT_Msk; + mask |= (entry.trig_id == BSP_PD_CTRL_FILTER_DONT_CARE) ? mask : PDC_PDC_CTRL_REG_TRIG_ID_Msk; + mask |= ((entry.wakeup_options == BSP_PD_CTRL_FILTER_DONT_CARE) ? mask : entry.wakeup_options); + mask |= (entry.wakeup_master == BSP_PD_CTRL_FILTER_DONT_CARE) ? mask : PDC_PDC_CTRL_REG_PDC_MASTER_Msk; + + entry.wakeup_options = + (entry.wakeup_options == BSP_PD_CTRL_FILTER_DONT_CARE) ? (bsp_pd_ctrl_options_t) 0 : entry.wakeup_options; + + pattern = bsp_pd_ctrl_prv_entry_translate(entry); + + bsp_pd_ctrl_entry_read(idx, &val); + + return (val & mask) == (pattern & mask); +} + +/*******************************************************************************************************************//** + * Reset PDC look-up table. All entries are set to BSP_PD_CTRL_UNUSED_LUT_ENTRY_VALUE. + **********************************************************************************************************************/ +static void bsp_pd_ctrl_prv_entry_reset (void) +{ + for (uint32_t idx = 0; idx < BSP_FEATURE_PD_CTRL_VALID_ENTRIES; ++idx) + { + bsp_pd_ctrl_acknowledge(idx); + PDC->PDC_CTRL_REG[idx] = BSP_PD_CTRL_UNUSED_LUT_ENTRY_VALUE; + } +} + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.h new file mode 100644 index 000000000000..7944f3244b03 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_pd_ctrl.h @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_PD_CTRL_H +#define BSP_PD_CTRL_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#if BSP_MCU_GROUP_RA6B1 + #include "../ra6b1/bsp_pd_ctrl_ra6b1.h" +#elif BSP_MCU_GROUP_RA6U1 + #include "../ra6u1/bsp_pd_ctrl_ra6u1.h" +#elif BSP_MCU_GROUP_RA6W3 + #include "../ra6w3/bsp_pd_ctrl_ra6w3.h" +#endif + +#if defined(BSP_MCU_GROUP_RA6B1) || defined(BSP_MCU_GROUP_RA6U1) || defined(BSP_MCU_GROUP_RA6W3) + +/** 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 as an indication of an invalid index of the PDC look-up table. */ + #define BSP_PD_CTRL_INVALID_LUT_INDEX (0xFFFF) + +/** Used as an indication of an unused entry of the PDC look-up table. */ + #define BSP_PD_CTRL_UNUSED_LUT_ENTRY_VALUE (0UL) + +/*******************************************************************************************************************//** + * Used when searching for entries in the PDC look-up table, to indicate that a particular + * field will not be used to filter out potential candidates. + **********************************************************************************************************************/ + #define BSP_PD_CTRL_FILTER_DONT_CARE (0xFF) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Available wakeup source banks to be selected as a trigger in a PDC LUT entry. + **********************************************************************************************************************/ +typedef enum e_bsp_pd_ctrl_trig_select +{ + BSP_PD_CTRL_TRIG_SELECT_P0_GPIO = 0x0, ///< Trigger from GPIO Port 0 through WAKEUP block */ + BSP_PD_CTRL_TRIG_SELECT_P1_GPIO = 0x1, ///< Trigger from GPIO Port 1 through WAKEUP block */ + BSP_PD_CTRL_TRIG_SELECT_P2_GPIO = 0x2, ///< Trigger from GPIO Port 2 through WAKEUP block */ + BSP_PD_CTRL_TRIG_SELECT_PERIPHERAL = 0x3, ///< Trigger from peripheral IRQ, table from device header files */ +} bsp_pd_ctrl_trig_select_t; + +/*******************************************************************************************************************//** + * @brief Error codes specific to the PDC. + **********************************************************************************************************************/ +typedef enum e_bsp_pd_ctrl_error +{ + BSP_PD_CTRL_SUCCESS = 0x0, + BSP_PD_CTRL_ERROR_INVALID_LUT_ENTRY = 0x1, ///< LUT entry contains an invalid master. + BSP_PD_CTRL_ERROR_PDC_LUT_FULL = 0x2, ///< All PDC LUT entries are occupied. + BSP_PD_CTRL_ERROR_ENTRY_NOT_FOUND = 0x3, ///< Entry is not present in the PDC LUT. +} bsp_pd_ctrl_error_t; + +/*******************************************************************************************************************//** + * @brief PDC look-up entry structure. + **********************************************************************************************************************/ +typedef struct st_bsp_pd_ctrl_entry +{ + bsp_pd_ctrl_trig_select_t trig_select; ///< Triggering types. + uint8_t trig_id; ///< Trigger ID. + bsp_pd_ctrl_options_t wakeup_options; ///< Additional wakeup options. + bsp_pd_ctrl_master_t wakeup_master; ///< Wakeup Master ID. +} bsp_pd_ctrl_entry_t; + +/** @} (end addtogroup BSP_MCU) */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void bsp_pd_ctrl_entry_read(uint32_t idx, uint32_t * p_value); +bsp_pd_ctrl_error_t bsp_pd_ctrl_entry_write(bsp_pd_ctrl_entry_t entry, uint32_t * p_idx); +bsp_pd_ctrl_error_t bsp_pd_ctrl_entry_find(bsp_pd_ctrl_entry_t entry, uint32_t start, uint32_t * p_idx); +void bsp_pd_ctrl_entry_remove(uint32_t idx, uint32_t * p_value); +void bsp_pd_ctrl_entry_reset(bsp_pd_ctrl_entry_t * p_keep, uint32_t keep_len, uint32_t * p_kept); +bsp_pd_ctrl_error_t bsp_pd_ctrl_pending_set(uint32_t idx); +void bsp_pd_ctrl_pending_get(uint32_t * p_status); +void bsp_pd_ctrl_acknowledge(uint32_t idx); + +/** 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_rsip.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_rsip.h new file mode 100644 index 000000000000..bfba69c419c9 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_rsip.h @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_RSIP_H +#define BSP_RSIP_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +#if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + +/** + * \brief Retrieve key ring and shared key index values from NVR. + */ +BSP_PLACE_CODE_IN_RAM void bsp_prv_rsip_fetch_KeyIndex(void); + +/** + * \brief Get rsip_install_key_ring_index value. + */ +__STATIC_FORCEINLINE uint32_t R_BSP_InstallKeyRingIndexGet (void) +{ + extern volatile uint32_t rsip_install_key_ring_index; + + return rsip_install_key_ring_index; +} + +/** + * \brief Get rsip_SharedKeyIndex value. + */ +__STATIC_FORCEINLINE uint32_t R_BSP_SharedKeyIndexGet (void) +{ + extern volatile uint32_t rsip_SharedKeyIndex; + + return rsip_SharedKeyIndex; +} + +#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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_sbrk.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_sbrk.c new file mode 100644 index 000000000000..341d765e672b --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_sbrk.c @@ -0,0 +1,94 @@ +/* +* Copyright (c) 2020 - 2026 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); // NOLINT + +/*********************************************************************************************************************** + * 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) +{ +#if (BSP_CFG_HEAP_BYTES > 0) + extern uint8_t g_heap[BSP_CFG_HEAP_BYTES]; + + uint32_t bytes = (uint32_t) incr; + static uint32_t current_block_offset = 0; + char * current_block_address; + + current_block_address = (char *) &g_heap[current_block_offset]; + + /* The returned address must be aligned to a word boundary to prevent hard faults on cores that do not support + * unaligned access. We assume the heap starts on a word boundary and make sure all allocations are a multiple + * of 4. */ + bytes = (bytes + 3U) & (~3U); + if (current_block_offset + bytes > BSP_CFG_HEAP_BYTES) + { + /** Heap has overflowed */ + errno = ENOMEM; + + return (caddr_t) -1; + } + + current_block_offset += bytes; + + return (caddr_t) current_block_address; +#else + FSP_PARAMETER_NOT_USED(incr); + + /** Heap not allocated!!! */ + errno = ENOMEM; + + return (caddr_t) -1; +#endif +} + +#endif + +/******************************************************************************************************************//** + * @} (end addtogroup BSP_MCU) + *********************************************************************************************************************/ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_security.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_security.c new file mode 100644 index 000000000000..fec6d80db7ed --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_security.c @@ -0,0 +1,308 @@ +/* +* Copyright (c) 2020 - 2026 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_AIRCR_VECTKEY (0x05FA0000U) + +/* Branch T3 Instruction (IMM11=-2) */ + #define BSP_PRV_INFINITE_LOOP (0xE7FE) + + #define BSP_SAU_REGION_ROM_NSC (0U) // SAU Region 0 + #define BSP_SAU_REGION_CODE_MRM_NS (1U) // SAU Region 1 + #define BSP_SAU_REGION_CODE_SRAM_NSC (2U) // SAU Region 2 + #define BSP_SAU_REGION_CODE_NVM_NSC (3U) // SAU Region 3 + #define BSP_SAU_REGION_CODE_SRAM_NS (4U) // SAU Region 4 + #define BSP_SAU_REGION_CODE_NVM_NS (5U) // SAU Region 5 + #define BSP_SAU_REGION_CODE_QSPI_NS (6U) // SAU Region 6 + #define BSP_SAU_REGION_DATA_PERIPH_NS (7U) // SAU Region 7 + +/* Non-secure regions defined by the IDAU. These regions must be defined as non-secure in the SAU. */ + +// TODO: Use BSP BASE Address macros instead of magic numbers to define the next addresses + + #define BSP_SAU_REGION_SROM_NSC_BASE_ADDRESS (0x0000010000U) + #define BSP_SAU_REGION_SROM_NSC_LIMIT_ADDRESS ((BSP_SAU_REGION_SROM_NSC_BASE_ADDRESS) +0x0000010000U) + + #define BSP_SAU_REGION_CODE_MRM_NS_BASE_ADDRESS (0x01000020U | BSP_FEATURE_TZ_NS_OFFSET) + #define BSP_SAU_REGION_CODE_MRM_NS_LIMIT_ADDRESS ((BSP_SAU_REGION_CODE_MRM_NS_BASE_ADDRESS) +0x0000003BU) + + #define BSP_SAU_REGION_CODE_SRAM_NS_BASE_ADDRESS (0x03000000U | BSP_FEATURE_TZ_NS_OFFSET) + #define BSP_SAU_REGION_CODE_SRAM_NS_LIMIT_ADDRESS ((BSP_SAU_REGION_CODE_SRAM_NS_BASE_ADDRESS) +0x00FFFFFFU) + + #define BSP_SAU_REGION_CODE_NVM_NS_BASE_ADDRESS (0x04000000U | BSP_FEATURE_TZ_NS_OFFSET) + #define BSP_SAU_REGION_CODE_NVM_NS_LIMIT_ADDRESS ((BSP_SAU_REGION_CODE_NVM_NS_BASE_ADDRESS) +0x00FFFFFFU) + + #define BSP_SAU_REGION_CODE_QSPI_NS_BASE_ADDRESS (0x06000000U | BSP_FEATURE_TZ_NS_OFFSET) + #define BSP_SAU_REGION_CODE_QSPI_NS_LIMIT_ADDRESS ((BSP_SAU_REGION_CODE_QSPI_NS_BASE_ADDRESS) +0x01FFFFFFU) + + #define BSP_SAU_REGION_DATA_PERIPH_NS_BASE_ADDRESS (0x30000000U) + #define BSP_SAU_REGION_DATA_PERIPH_NS_LIMIT_ADDRESS (0x5FFFFFFFU) + +/* Use partition macros for primary core */ + #define FLASH_NSC_START ((uint32_t *) BSP_PARTITION_FLASH_CPU0_C_START) + #define FLASH_NSC_LIMIT ((uint32_t) BSP_PARTITION_FLASH_CPU0_C_START + \ + BSP_PARTITION_FLASH_CPU0_C_SIZE - 1) + #define FLASH_NS_START ((uint32_t *) BSP_PARTITION_FLASH_CPU0_N_START) + #define RAMCODE_NSC_START ((uint32_t *) BSP_PARTITION_RAMCODE_CPU0_C_START) + #define RAMCODE_NSC_LIMIT ((uint32_t) BSP_PARTITION_RAMCODE_CPU0_C_START + \ + BSP_PARTITION_RAMCODE_CPU0_C_SIZE - 1) + #define RAMCODE_NS_START ((uint32_t *) BSP_PARTITION_RAMCODE_CPU0_N_START) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +void R_BSP_SecurityInit(void); +void R_BSP_PinCfgSecurityInit(void); +void R_BSP_ElcCfgSecurityInit(void); + +/*********************************************************************************************************************** + * External symbols + **********************************************************************************************************************/ + #if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * bsp_nonsecure_func_t)(void); + #elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile bsp_nonsecure_func_t)(void); + #endif + + #if BSP_TZ_SECURE_BUILD + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Enter the non-secure code environment. + * + * This function configures the non-secure MSP and vector table then jumps to the non-secure project's Reset_Handler. + * + * @note This function (and therefore the non-secure code) should not return. + **********************************************************************************************************************/ +void R_BSP_NonSecureEnter (void) +{ + /* The NS vector table is at the start of the NS section in flash */ + uint32_t const * p_ns_vector_table = (uint32_t *) ((uint32_t) FLASH_NS_START); + + /* Set up the NS Reset_Handler to be called */ + uint32_t const * p_ns_reset_address = (uint32_t const *) ((uint32_t) p_ns_vector_table + sizeof(uint32_t)); + bsp_nonsecure_func_t p_ns_reset = (bsp_nonsecure_func_t) (*p_ns_reset_address); + + #if BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK + p_ns_reset = (bsp_nonsecure_func_t) ((uint32_t) RAM_NS_START); + + /* Write an infinite loop into start of NS RAM (Branch T3 Instruction (b.n )). */ + uint16_t * infinite_loop = (uint16_t *) ((uint32_t) RAM_NS_START); + *infinite_loop = BSP_PRV_INFINITE_LOOP; + + /* Set the NS stack pointer to a valid location in NS RAM. */ + __TZ_set_MSP_NS((uint32_t) RAM_NS_START + 0x20U); + + /* Jump to the infinite loop. */ + p_ns_reset(); +} + #endif + + /* Set the NS vector table address */ + SCB_NS->VTOR = (uint32_t) p_ns_vector_table; + + /* Set the NS stack pointer to the first entry in the NS vector table */ + __TZ_set_MSP_NS(p_ns_vector_table[0]); + + /* Jump to the NS Reset_Handler */ + p_ns_reset(); +} + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * Initialize security features for TrustZone. + * + * This function initializes ARM security register and Renesas SAR registers for secure projects. + * + * @note IDAU settings must be configured to match project settings with a separate configuration tool. + **********************************************************************************************************************/ +void R_BSP_SecurityInit (void) +{ + #if __SAUREGION_PRESENT + ICU->ICU_NMIER_REG_b.ICU_TZ_EN = 0x1; // Enable TZ NMI + CRG_TOP->TZ_CFG_REG_b.TZ_EN = 0x1; // Enable TZ + CRG_TOP->TZ_CFG_REG_b.TZ_ERR_RESP = 0x1; // Set NMI response upon TZ error + CRG_TOP->TZ_ERR_STAT_REG_b.TZ_ERR_STAT = 0x1; // Enable TZ error + + // TODO: This register must be set based on the size of the S/NS applications. Temporary split of the NVM between S/NS worlds to enable NS + // TODO: application executed without raising a HardFault due to TZ violation. + SYSB->TZ_NVMB_REG_b.TZ_NVMB = (uint32_t) FLASH_NS_START & SYSB_TZ_NVMB_REG_TZ_NVMB_Msk; + SYSB->TZ_RAMB_REG_b.TZ_RAMB = (uint32_t) RAMCODE_NS_START & SYSB_TZ_RAMB_REG_TZ_RAMB_Msk; + + /* Maintain the default settings of SAU to ensure the SAU attribution for the entire ROM area remains secure. */ + SAU->RNR = BSP_SAU_REGION_ROM_NSC; + SAU->RBAR = (uint32_t) BSP_SAU_REGION_SROM_NSC_BASE_ADDRESS & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (BSP_SAU_REGION_SROM_NSC_LIMIT_ADDRESS & SAU_RLAR_LADDR_Msk) | SAU_RLAR_NSC_Msk | + SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure MRM */ + SAU->RNR = BSP_SAU_REGION_CODE_MRM_NS; + SAU->RBAR = (uint32_t) BSP_SAU_REGION_CODE_MRM_NS_BASE_ADDRESS & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (BSP_SAU_REGION_CODE_MRM_NS_LIMIT_ADDRESS & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure callable SRAM (Code). */ + SAU->RNR = BSP_SAU_REGION_CODE_SRAM_NSC; + SAU->RBAR = (uint32_t) RAMCODE_NSC_START & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (RAMCODE_NSC_LIMIT & SAU_RLAR_LADDR_Msk) | SAU_RLAR_NSC_Msk | + SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure callable NVM (Code). */ + SAU->RNR = BSP_SAU_REGION_CODE_NVM_NSC; + SAU->RBAR = (uint32_t) FLASH_NSC_START & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (FLASH_NSC_LIMIT & SAU_RLAR_LADDR_Msk) | SAU_RLAR_NSC_Msk | + SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure SRAM (Code). */ + SAU->RNR = BSP_SAU_REGION_CODE_SRAM_NS; + SAU->RBAR = (uint32_t) BSP_SAU_REGION_CODE_SRAM_NS_BASE_ADDRESS & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (BSP_SAU_REGION_CODE_SRAM_NS_LIMIT_ADDRESS & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure NVM (Code). */ + SAU->RNR = BSP_SAU_REGION_CODE_NVM_NS; + SAU->RBAR = (uint32_t) BSP_SAU_REGION_CODE_NVM_NS_BASE_ADDRESS & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (BSP_SAU_REGION_CODE_NVM_NS_LIMIT_ADDRESS & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for always Non-secure QSPI (Code). */ + SAU->RNR = BSP_SAU_REGION_CODE_QSPI_NS; + SAU->RBAR = (uint32_t) BSP_SAU_REGION_CODE_QSPI_NS_BASE_ADDRESS & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (BSP_SAU_REGION_CODE_QSPI_NS_LIMIT_ADDRESS & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure NVM/SRAM (Data) and AHB/APB Peripherals. */ + + // TODO: Consider splitting this SAU region into multiple regions (Optional, as the final security attribution is overruled by IDAU). + SAU->RNR = BSP_SAU_REGION_DATA_PERIPH_NS; + SAU->RBAR = (uint32_t) BSP_SAU_REGION_DATA_PERIPH_NS_BASE_ADDRESS & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (BSP_SAU_REGION_DATA_PERIPH_NS_LIMIT_ADDRESS & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk; + + /* Enable the SAU. */ + SAU->CTRL = SAU_CTRL_ENABLE_Msk; + + // Configure Secure Fault Handler + SCB->SHCSR |= SCB_SHCSR_SECUREFAULTENA_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 + + /* Initialize SSA Registers. */ + SYSB->TZ_SSA_REG = BSP_TZ_CFG_SSA_REG; + SYSB->TZ_SSA2_REG = BSP_TZ_CFG_SSA2_REG; + + /* Initialize Type 2 SARs. */ + + // TODO: Add Type 2 SARs initialization + + // TODO: Port it or drop it + #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); + + /* On MCUs with this implementation of trustzone, DMAST security attribution is set to secure after reset. */ + + /* 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); + + /* On MCUs with this implementation of trustzone, DTCST security attribution is set to secure after reset. */ + + /* Ensure that DTCST is set so that the nonsecure program can use DTC. */ + + // R_DTC->DTCST = 1U; + #elif BSP_FEATURE_TZ_VERSION == 2 // TODO: consider removing it + + /* 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(); +} + +/* 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_security.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_security.h new file mode 100644 index 000000000000..616342507f3c --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/bsp_security.h @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2020 - 2026 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/fast_memcpy.S b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/fast_memcpy.S new file mode 100644 index 000000000000..b7d7e14bc614 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/fast_memcpy.S @@ -0,0 +1,104 @@ +/* ${REA_DISCLAIMER_PLACEHOLDER} */ + +#define BLOCK_SIZE_LARGE 32 +#define BLOCK_SIZE_SMALL 16 + + .syntax unified + + .text + .thumb + +/************************************************************************************//** + * @brief Optimized fast_memcpy for ARM Cortex-M33 + * + * void * fast_memcpy(void *dst, const void *src, size_t n); + ***************************************************************************************/ + .thumb_func + .align 1 + .globl fast_memcpy + .type fast_memcpy, %function +fast_memcpy: + /* save r0, as the return value must be "dst" */ + mov r12, r0 + + /* check if both src and dst are 32-bit aligned */ + movs r3, r0 + orrs r3, r1 + lsls r3, r3, #30 + bne .fast_memcpy_bytewise_copy + + /* check buffer size to select larger-block or small-block copying */ + cmp r2, #BLOCK_SIZE_LARGE + bcc .fast_memcpy_small_block + + push {r4-r10} + /* + * Decrement n in advance: we'll check for sign change and then add BLOCK_SIZE_LARGE. + * Assumes that n is less than 2GiB, i.e. its MSBit on entry is 0. + */ + subs r2, #BLOCK_SIZE_LARGE +.fast_memcpy_large_block_copy: + ldmia r1!, {r3-r10} + stmia r0!, {r3-r10} + subs r2, #BLOCK_SIZE_LARGE + bpl .fast_memcpy_large_block_copy + adds r2, #BLOCK_SIZE_LARGE + pop {r4-r10} + +.fast_memcpy_small_block: + /* check buffer size to select small-block or word copying */ + cmp r2, #BLOCK_SIZE_SMALL + bcc .fast_memcpy_word_copy + + push {r4-r6} + /* + * Decrement n in advance: we'll check for sign change and then add BLOCK_SIZE. + * Assumes that n is less than 2GiB, i.e. its MSBit on entry is 0. + */ + subs r2, #BLOCK_SIZE_SMALL +.fast_memcpy_small_block_copy: + ldmia r1!, {r3-r6} + stmia r0!, {r3-r6} + subs r2, #BLOCK_SIZE_SMALL + bpl .fast_memcpy_small_block_copy + adds r2, #BLOCK_SIZE_SMALL + pop {r4-r6} + + /* too little left for block copying, try word copying */ +.fast_memcpy_word_copy: + cmp r2, #3 + bls .fast_memcpy_bytewise_copy + + /* decrement n in advance: we'll check for sign change and then add 4 */ + subs r2, #4 +.fast_memcpy_word_copy_loop: + ldmia r1!, {r3} + stmia r0!, {r3} + subs r2, #4 + bpl .fast_memcpy_word_copy_loop + adds r2, #4 + +.fast_memcpy_bytewise_copy: + /* + * Whatever is left can only be copied byte-by-byte + * (either less than 4 bytes left, or at least one pointer + * is not 32-bit aligned). + */ + cmp r2, #0 + beq .fast_memcpy_exit + push {r4} + movs r4, #0 +.fast_memcpy_byte_copy: + ldrb r3, [r1, r4] + strb r3, [r0, r4] + adds r4, #1 + cmp r4, r2 + bne .fast_memcpy_byte_copy + pop {r4} + +.fast_memcpy_exit: + mov r0, r12 + bx lr + + .pool + .size fast_memcpy, . - fast_memcpy diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/fast_memset.S b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/fast_memset.S new file mode 100644 index 000000000000..239a52bd9c3c --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/fast_memset.S @@ -0,0 +1,97 @@ +/* ${REA_DISCLAIMER_PLACEHOLDER} */ + + .syntax unified + + .text + .thumb + +/************************************************************************************//** + * @brief Optimized fast_memset for ARM Cortex-M33 + * + * void * fast_memset(void *b, int c, size_t len); + ***************************************************************************************/ + .thumb_func + .align 1 + .globl fast_memset + .type fast_memset, %function +fast_memset: + push {r4-r6, lr} + mov r12, r0 /* preserve return value */ + + cbz r2, .Ldone + +/* ------------------------------------------------------------ + * Align destination to 4 bytes (byte stores) + * ------------------------------------------------------------ */ +.Lalign: + tst r0, #3 + beq .Lbuild + strb r1, [r0], #1 + subs r2, r2, #1 + bne .Lalign + b .Ldone + +/* ------------------------------------------------------------ + * Build 0xCCCCCCCC fill word + * ------------------------------------------------------------ */ +.Lbuild: + uxtb r1, r1 + orr r3, r1, r1, lsl #8 + orr r3, r3, r3, lsl #16 + mov r4, r3 + mov r5, r3 + mov r6, r3 + +/* ============================================================ + * Case 1: n >= 32 bytes + * 2 × STMIA (16B each) + * ============================================================ */ +.Lcase32: + cmp r2, #32 + blo .Lcase16 + +.Lloop32: + stmia r0!, {r3-r6} /* 16 bytes */ + stmia r0!, {r3-r6} /* 16 bytes */ + subs r2, r2, #32 + cmp r2, #32 + bhs .Lloop32 + +/* ============================================================ + * Case 2: 16 <= n < 32 + * ============================================================ */ +.Lcase16: + cmp r2, #16 + blo .Lcase4 + stmia r0!, {r3-r6} + subs r2, r2, #16 + +/* ============================================================ + * Case 3: 4 <= n < 16 + * ============================================================ */ +.Lcase4: + cmp r2, #4 + blo .Lcase1 + +.Lword_loop: + str r3, [r0], #4 + subs r2, r2, #4 + cmp r2, #4 + bhs .Lword_loop + +/* ============================================================ + * Case 4: n < 4 + * ============================================================ */ +.Lcase1: + cbz r2, .Ldone +.Lbyte_loop: + strb r1, [r0], #1 + subs r2, r2, #1 + bne .Lbyte_loop + +.Ldone: + mov r0, r12 + pop {r4-r6, pc} + + .pool + .size fast_memset, . - fast_memset diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/internal/bsp_device_definitions_internal.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/internal/bsp_device_definitions_internal.h new file mode 100644 index 000000000000..08875e6b8ae0 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/all/internal/bsp_device_definitions_internal.h @@ -0,0 +1,347 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_DEVICE_DEFINITIONS_INTERNAL_H +#define BSP_DEVICE_DEFINITIONS_INTERNAL_H + +/* + * All device information attributes are OR'ed in a 32-bit value, as indicated below: + * + * 31 21 20 17 16 13 12 11 9 8 4 3 0 + * +------------------+--------------------------+-----------+------------+----------+------------+-----------+ + * | | | | | Version | + * |------------------|--------------------------|-----------|------------+----------+------------+-----------+ + * | Family | Chip ID | Variant | FPGA | REV_x | SWC_x | STEP_x | + * |------------------+--------------------------+-----------+------------+----------+------------+-----------| + * | | 680 69X 59X 70X | | | | | | + * |------------------+--------------------------+-----------+------------+----------+------------+-----------| + * | 00000000000: INV | 0000: INV INV INV INV | 0000: INV | 0: Silicon | 000: INV | 00000: INV | 0000: INV | + * | 00000000001: 680 | 0001: 680 3080 3107 2634 | 0001: 0 | 1: FPGA | 001: D/C | 00001: D/C | 0001: D/C | + * | 00000000010: 69x | 0010: INV 2522 2798 INV | 0010: 1 | | 010: A | 00010: 0 | 0010: A | + * | 00000000011: 59x | | 0011: 2 | | 011: B | 00011: 1 | 0011: B | + * | 00000000100: 70x | | 0100: 3 | | 100: C | 00100: 2 | 0100: C | + * | 00000001000: 310x| | 0101: 4 | | 101: D | 00101: 3 | 0101: D | + * | | | 0111: 5 | | | 00111: 4 | 0111: E | + * | | | 1000: 6 | | | 01000: 5 | 1000: F | + * | | | 1001: 7 | | | 01001: 6 | 1001: G | + * | | | 1010: 8 | | | 01010: 7 | 1010: H | + * | | | 1011: 9 | | | 01011: 8 | | + * | | | | | | 01100: 9 | | + * | | | | | | 01101: 11 | | + * | | | | | | 01110: 12 | | + * | | | | | | 01111: 13 | | + * | | | | | | 10000: 14 | | + * | | | | | | 10001: 15 | | + * +------------------+--------------------------+-----------+------------+----------+------------+-----------+ + * + * INV: Invalid setting. None of the attributes should be 0, apart from the FPGA. + * D/C: Don't care + * RES: Reserved + */ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Make numerical value */ +#define _DEVICE_MK_NUM_VAL(field, value) (((value) << _DEVICE_ ## field ## _POS) & _DEVICE_ ## field ## _MASK) + +/* Device family definitions */ +#define _DEVICE_FAMILY_MASK 0xFFE00000 // 11 bits length +#define _DEVICE_FAMILY_POS 21 +#define _DEVICE_FAMILY_680 1 +#define _DEVICE_FAMILY_690 2 +#define _DEVICE_FAMILY_590 3 +#define _DEVICE_FAMILY_700 4 +#define _DEVICE_FAMILY_3100 5 +#define _DEVICE_FAMILY_W300 6 +#define _DEVICE_FAMILY_3333 7 +#define _DEVICE_MK_FAMILY(x) _DEVICE_MK_NUM_VAL(FAMILY, _DEVICE_FAMILY_ ## x) + +/* Device Chip ID definitions */ +#define _DEVICE_CHIP_ID_MASK 0x001E0000 // 4 bits length +#define _DEVICE_CHIP_ID_POS 17 +#define _DEVICE_CHIP_ID_680 1 +#define _DEVICE_CHIP_ID_3080 1 +#define _DEVICE_CHIP_ID_2522 2 +#define _DEVICE_CHIP_ID_2634 1 +#define _DEVICE_CHIP_ID_3107 1 +#define _DEVICE_CHIP_ID_2798 2 +#define _DEVICE_CHIP_ID_3108 1 +#define _DEVICE_CHIP_ID_3333 1 +#define _DEVICE_MK_CHIP_ID(x) _DEVICE_MK_NUM_VAL(CHIP_ID, _DEVICE_CHIP_ID_ ## x) + +/* Device variants definitions */ +#define _DEVICE_VARIANT_MASK 0x0001E000 // 4 bits length +#define _DEVICE_VARIANT_POS 13 +#define _DEVICE_VARIANT_XX0 1 +#define _DEVICE_VARIANT_XX1 2 +#define _DEVICE_VARIANT_XX2 3 +#define _DEVICE_VARIANT_XX3 4 +#define _DEVICE_VARIANT_XX4 5 +#define _DEVICE_VARIANT_XX5 6 +#define _DEVICE_VARIANT_XX6 7 +#define _DEVICE_VARIANT_XX7 8 +#define _DEVICE_VARIANT_XX8 9 +#define _DEVICE_VARIANT_XX9 10 +#define _DEVICE_MK_VARIANT(x) _DEVICE_MK_NUM_VAL(VARIANT, _DEVICE_VARIANT_XX ## x) +#define _DEVICE_MK_VARIANT_NUMERICAL(n) _DEVICE_MK_NUM_VAL(VARIANT, _DEVICE_VARIANT_XX0 + (n)) + +/* FPGA definitions */ +#define _DEVICE_FPGA_MASK 0x00001000 // 1 bit length +#define _DEVICE_FPGA_POS 12 + +#define _DEVICE_FPGA_VER_MASK 0x00000FFF // 12 bits length +#define _DEVICE_FPGA_VER_POS 0 +#define _DEVICE_MK_FPGA_VER(n) _DEVICE_MK_NUM_VAL(FPGA_VER, (n)) + +/* Device stepping major sub-revisions (I) */ +#define _DEVICE_REV_MASK 0x00000E00 // 3 bits length +#define _DEVICE_REV_POS 9 +#define _DEVICE_REV_DONT_CARE 1 +#define _DEVICE_REV_A 2 +#define _DEVICE_REV_B 3 +#define _DEVICE_REV_C 4 +#define _DEVICE_REV_D 5 +#define _DEVICE_MK_REV(x) _DEVICE_MK_NUM_VAL(REV, _DEVICE_REV_ ## x) +#define _DEVICE_MK_REV_NUMERICAL(n) _DEVICE_MK_NUM_VAL(REV, ((_DEVICE_REV_DONT_CARE) + (n) + 1)) + +/* Device SW Compatibility code (I) */ +#define _DEVICE_SWC_MASK 0x000001F0 // 5 bits length +#define _DEVICE_SWC_POS 4 +#define _DEVICE_SWC_DONT_CARE 1 +#define _DEVICE_SWC_0 2 +#define _DEVICE_SWC_1 3 +#define _DEVICE_SWC_2 4 +#define _DEVICE_SWC_3 5 +#define _DEVICE_SWC_4 6 +#define _DEVICE_SWC_5 7 +#define _DEVICE_SWC_6 8 +#define _DEVICE_SWC_7 9 +#define _DEVICE_SWC_8 10 +#define _DEVICE_SWC_9 11 +#define _DEVICE_SWC_10 12 +#define _DEVICE_SWC_11 13 +#define _DEVICE_SWC_12 14 +#define _DEVICE_SWC_13 15 +#define _DEVICE_SWC_14 16 +#define _DEVICE_SWC_15 17 +#define _DEVICE_MK_SWC(n) _DEVICE_MK_NUM_VAL(SWC, _DEVICE_SWC_ ## n) +#define _DEVICE_MK_SWC_NUMERICAL(n) _DEVICE_MK_NUM_VAL(SWC, ((_DEVICE_SWC_DONT_CARE) + (n) + 1)) + +/* Device stepping minor subrevisions (I) */ +#define _DEVICE_STEP_MASK 0x0000000F // 4 bits length +#define _DEVICE_STEP_POS 0 +#define _DEVICE_STEP_DONT_CARE 1 +#define _DEVICE_STEP_A 2 +#define _DEVICE_STEP_B 3 +#define _DEVICE_STEP_C 4 +#define _DEVICE_STEP_D 5 +#define _DEVICE_STEP_E 6 +#define _DEVICE_STEP_F 7 +#define _DEVICE_STEP_G 8 +#define _DEVICE_STEP_H 9 +#define _DEVICE_MK_STEP(y) _DEVICE_MK_NUM_VAL(STEP, _DEVICE_STEP_ ## y) +#define _DEVICE_MK_STEP_NUMERICAL(n) _DEVICE_MK_NUM_VAL(STEP, ((_DEVICE_STEP_DONT_CARE) + (n) + 1)) + +#define _DEVICE_MK_VER(x, n, y) (_DEVICE_MK_REV(x) | _DEVICE_MK_SWC(n) | _DEVICE_MK_STEP(y)) + +#define _DEVICE_MASK (_DEVICE_FAMILY_MASK | _DEVICE_CHIP_ID_MASK | \ + _DEVICE_VARIANT_MASK | _DEVICE_FPGA_MASK) + +/* Public definitions */ + +/* RRQ431xx Device Variants */ +#define RRQ43103 (_DEVICE_MK_FAMILY(3100) | _DEVICE_MK_VARIANT(3)) +#define RRQ43107 (_DEVICE_MK_FAMILY(3100) | _DEVICE_MK_VARIANT(7)) +#define RRQ43108 (_DEVICE_MK_FAMILY(3100) | _DEVICE_MK_VARIANT(8)) + +/* FPGA Device */ +#define D3108 (_DEVICE_MK_FAMILY(3100) | DEVICE_CHIP_ID_3108 | \ + _DEVICE_FPGA_MASK | DEVICE_REV_A) + +/* Family Wildcard */ +#define RRQ431XX (_DEVICE_MK_FAMILY(3100)) + +/* RA6B2XX Device Variants */ +/* Family Wildcard */ +#define RA6B2XX (_DEVICE_MK_FAMILY(3333)) + + +/* RA6W3xx Device Variants */ +/* Family Wildcard */ +#define RA6W3XX (_DEVICE_MK_FAMILY(W300)) + +/* DA1469X Device Variants */ +#define DA14691 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(1)) +#define DA14693 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(3)) +#define DA14695 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(5)) +#define DA14697 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(7)) +#define DA14699 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(9)) + +/* FPGA Device */ +#define D2522 (_DEVICE_MK_FAMILY(690) | DEVICE_CHIP_ID_2522 | \ + _DEVICE_FPGA_MASK | DEVICE_REV_A) + +/* Family Wildcard */ +#define DA1469X (_DEVICE_MK_FAMILY(690)) + +/* Device Chip ID */ +#define DEVICE_CHIP_ID_3108 (_DEVICE_MK_CHIP_ID(3108)) +#define DEVICE_CHIP_ID_3080 (_DEVICE_MK_CHIP_ID(3080)) +#define DEVICE_CHIP_ID_2522 (_DEVICE_MK_CHIP_ID(2522)) +#define DEVICE_CHIP_ID_3333 (_DEVICE_MK_CHIP_ID(3333)) + +/* Device Revision */ +#define DEVICE_REV_A (_DEVICE_MK_REV(A)) +#define DEVICE_REV_B (_DEVICE_MK_REV(B)) + +/* Define SWC */ +#define DEVICE_SWC_DONT_CARE (_DEVICE_MK_SWC(DONT_CARE)) +#define DEVICE_SWC_0 (_DEVICE_MK_SWC(0)) +#define DEVICE_SWC_1 (_DEVICE_MK_SWC(1)) +#define DEVICE_SWC_2 (_DEVICE_MK_SWC(2)) +#define DEVICE_SWC_3 (_DEVICE_MK_SWC(3)) +#define DEVICE_SWC_4 (_DEVICE_MK_SWC(4)) +#define DEVICE_SWC_5 (_DEVICE_MK_SWC(5)) +#define DEVICE_SWC_6 (_DEVICE_MK_SWC(6)) +#define DEVICE_SWC_7 (_DEVICE_MK_SWC(7)) +#define DEVICE_SWC_8 (_DEVICE_MK_SWC(8)) +#define DEVICE_SWC_9 (_DEVICE_MK_SWC(9)) +#define DEVICE_SWC_10 (_DEVICE_MK_SWC(10)) +#define DEVICE_SWC_11 (_DEVICE_MK_SWC(11)) +#define DEVICE_SWC_12 (_DEVICE_MK_SWC(12)) +#define DEVICE_SWC_13 (_DEVICE_MK_SWC(13)) +#define DEVICE_SWC_14 (_DEVICE_MK_SWC(14)) +#define DEVICE_SWC_15 (_DEVICE_MK_SWC(15)) + +/* Device Step */ +#define DEVICE_STEP_DONT_CARE (_DEVICE_MK_STEP(DONT_CARE)) +#define DEVICE_STEP_A (_DEVICE_MK_STEP(A)) +#define DEVICE_STEP_B (_DEVICE_MK_STEP(B)) +#define DEVICE_STEP_C (_DEVICE_MK_STEP(C)) +#define DEVICE_STEP_D (_DEVICE_MK_STEP(D)) +#define DEVICE_STEP_E (_DEVICE_MK_STEP(E)) +#define DEVICE_STEP_F (_DEVICE_MK_STEP(F)) +#define DEVICE_STEP_G (_DEVICE_MK_STEP(G)) +#define DEVICE_STEP_H (_DEVICE_MK_STEP(H)) + +/* Device Version */ +#define DEVICE_VER_A0 (_DEVICE_MK_VER(A, 0, DONT_CARE)) +#define DEVICE_VER_A1 (_DEVICE_MK_VER(A, 1, DONT_CARE)) +#define DEVICE_VER_AA (_DEVICE_MK_VER(A, DONT_CARE, A)) +#define DEVICE_VER_AB (_DEVICE_MK_VER(A, DONT_CARE, B)) + +/* + * A generic FPGA check, available for any device family. + */ +#define DEVICE_FPGA ((dg_configDEVICE & _DEVICE_FPGA_MASK) == _DEVICE_FPGA_MASK) + +/* + * Macros checking against specific device characteristics. + * Examples: + * #if (DEVICE_FAMILY == DA1468X) + * #if (DEVICE_CHIP_ID == DEVICE_CHIP_ID_3080) + * #if ((DEVICE_VARIANT == DA14695) || (DEVICE_VARIANT == DA14699)) + * #if (DEVICE_REVISION == DEVICE_REV_B) + * #if ((DEVICE_VERSION == DEVICE_VER_AB) || (DEVICE_VERSION == DEVICE_VER_AE)) + */ + +/* + * FIXME: + * Unused macros copied from SDK10. + * DEVICE_FAMILY commented-out because currently it has to be redefined in CMAC projects' CMakeLists + */ + +// #define DEVICE_FAMILY (dg_configDEVICE & _DEVICE_FAMILY_MASK) +#define DEVICE_CHIP_ID (dg_configDEVICE & _DEVICE_CHIP_ID_MASK) +#define DEVICE_VARIANT (dg_configDEVICE & (_DEVICE_FAMILY_MASK | _DEVICE_VARIANT_MASK)) +#define DEVICE_REVISION (dg_configDEVICE & _DEVICE_REV_MASK) +#define DEVICE_SWC (dg_configDEVICE & _DEVICE_SWC_MASK) +#define DEVICE_STEP (dg_configDEVICE & _DEVICE_STEP_MASK) +#define DEVICE_VERSION (dg_configDEVICE & (_DEVICE_REV_MASK | _DEVICE_SWC_MASK | _DEVICE_STEP_MASK)) + +/* + * Device information attributes masks + */ +#define DEVICE_FAMILY_MASK (_DEVICE_FAMILY_MASK) +#define DEVICE_CHIP_ID_MASK (_DEVICE_CHIP_ID_MASK) +#define DEVICE_VARIANT_MASK (_DEVICE_VARIANT_MASK) +#define DEVICE_REVISION_MASK (_DEVICE_REV_MASK) +#define DEVICE_SWC_MASK (_DEVICE_SWC_MASK) +#define DEVICE_STEP_MASK (_DEVICE_STEP_MASK) + +/* + * Use the next macros to get the minimum acceptable value of specific device information attribute + */ +#define DEVICE_INFO_ATTRIBUTE_MIN(mask) (1 << __CLZ(__RBIT(mask))) +#define DEVICE_FAMILY_MIN (1 << _DEVICE_FAMILY_POS) +#define DEVICE_CHIP_ID_MIN (1 << _DEVICE_CHIP_ID_POS) +#define DEVICE_VARIANT_MIN (1 << _DEVICE_VARIANT_POS) +#define DEVICE_REVISION_MIN (1 << _DEVICE_REV_POS) +#define DEVICE_SWC_MIN (1 << _DEVICE_SWC_POS) +#define DEVICE_STEP_MIN (1 << _DEVICE_STEP_POS) + +/* + * Use the next macros to get the maximum acceptable value of specific device information attribute + */ +#define DEVICE_INFO_ATTRIBUTE_MAX(mask) (mask) +#define DEVICE_FAMILY_MAX _DEVICE_FAMILY_MASK +#define DEVICE_CHIP_ID_MAX _DEVICE_CHIP_ID_MASK +#define DEVICE_VARIANT_MAX _DEVICE_VARIANT_MASK +#define DEVICE_REVISION_MAX _DEVICE_REV_MASK +#define DEVICE_SWC_MAX _DEVICE_SWC_MASK +#define DEVICE_STEP_MAX _DEVICE_STEP_MASK + +/* + * Use the next macros to convert (mask and shift) a specific device information attribute + * extracted from the corresponding registers to bit-field. + */ + +#define MAKE_DEVICE_FAMILY_ENCODING(family) _DEVICE_MK_NUM_VAL(FAMILY, family) +#define MAKE_DEVICE_CHIP_ID_ENCODING(id) _DEVICE_MK_NUM_VAL(CHIP_ID, id) +#define MAKE_DEVICE_VARIANT_ENCODING(variant) _DEVICE_MK_VARIANT_NUMERICAL(variant) +#define MAKE_DEVICE_REVISION_ENCODING(rev) _DEVICE_MK_REV_NUMERICAL(rev) +#define MAKE_DEVICE_SWC_ENCODING(swc) _DEVICE_MK_SWC_NUMERICAL(swc) +#define MAKE_DEVICE_STEP_ENCODING(step) _DEVICE_MK_STEP_NUMERICAL(step) + +#define RRQ43103_3108_00 (RRQ43103 | _DEVICE_MK_CHIP_ID(3108) | DEVICE_VER_A0) +#define RRQ43107_3108_00 (RRQ43107 | _DEVICE_MK_CHIP_ID(3108) | DEVICE_VER_A0) +#define RRQ43108_3108_00 (RRQ43108 | _DEVICE_MK_CHIP_ID(3108) | DEVICE_VER_A0) + +#define DA14691_2522_00 (DA14691 | _DEVICE_MK_CHIP_ID(2522) | _DEVICE_MK_VER(A, DONT_CARE, B)) +#define DA14693_2522_00 (DA14693 | _DEVICE_MK_CHIP_ID(2522) | _DEVICE_MK_VER(A, DONT_CARE, B)) +#define DA14695_2522_00 (DA14695 | _DEVICE_MK_CHIP_ID(2522) | _DEVICE_MK_VER(A, DONT_CARE, B)) +#define DA14697_2522_00 (DA14697 | _DEVICE_MK_CHIP_ID(2522) | _DEVICE_MK_VER(A, DONT_CARE, B)) +#define DA14699_2522_00 (DA14699 | _DEVICE_MK_CHIP_ID(2522) | _DEVICE_MK_VER(A, DONT_CARE, B)) + +#define DA14691_3080_00 (DA14691 | _DEVICE_MK_CHIP_ID(3080) | _DEVICE_MK_VER(A, DONT_CARE, A)) +#define DA14693_3080_00 (DA14693 | _DEVICE_MK_CHIP_ID(3080) | _DEVICE_MK_VER(A, DONT_CARE, A)) +#define DA14695_3080_00 (DA14695 | _DEVICE_MK_CHIP_ID(3080) | _DEVICE_MK_VER(A, DONT_CARE, A)) +#define DA14697_3080_00 (DA14697 | _DEVICE_MK_CHIP_ID(3080) | _DEVICE_MK_VER(A, DONT_CARE, A)) +#define DA14699_3080_00 (DA14699 | _DEVICE_MK_CHIP_ID(3080) | _DEVICE_MK_VER(A, DONT_CARE, A)) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +typedef union +{ + uint32_t value; + + struct + { + uint32_t step : 4; + uint32_t swc : 5; + uint32_t revision : 3; + uint32_t is_fpga : 1; + uint32_t variant : 4; + uint32_t chip_id : 4; + uint32_t family : 11; + } bits; +} bsp_device_info_t; + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_cache.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_cache.h new file mode 100644 index 000000000000..171f325aa758 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_cache.h @@ -0,0 +1,178 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_CACHE_RA6W1_H +#define BSP_CACHE_RA6W1_H + +// TIN-TODO: This file was originally under cmsis/Device/RENESAS/Include, named hw_cache.h. The contents should be made FSP compliant. + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "sdk_defs.h" + +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* With a 64KB cacheable resolution (i.e. the target memory is addressed in blocks of 64KB), + * and a size of 131072KB of the target memory (MEMORY_OQSPIC_SIZE) the maximum cacheable length + * is 131072 = 131072KB / 64KB. In hex: 0x8000000 / 0x10000 = 0x800. */ +#define HW_CACHE_CACHEABLE_RESOLUTION 0x10000 /* Blocks of 64KB in size */ +#define HW_CACHE_CACHEABLE_LEN_MAX MEMORY_OQSPIC_SIZE / HW_CACHE_CACHEABLE_RESOLUTION + +#define HW_CACHE_FLASH_MIN_REGION_BASE 0xA00 // 0x1800 +#define HW_CACHE_FLASH_MAX_REGION_BASE 0xDFF // 0x1FFF +#define HW_CACHE_FLASH_DEFAULT_REGION_BASE (HW_CACHE_FLASH_MIN_REGION_BASE) + +#define HW_CACHE_FLASH_MIN_REGION_OFFSET 0x0 +#define HW_CACHE_FLASH_MAX_REGION_OFFSET 0xFFF +#define HW_CACHE_FLASH_DEFAULT_REGION_OFFSET (HW_CACHE_FLASH_MIN_REGION_OFFSET) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef uint16_t flash_region_base_t; +typedef uint16_t flash_region_offset_t; + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/** + * \brief Enables the iCache Controller + * + * The iCache Controller is enabled by setting the CACHERAM_MUX to '1'. This action enables + * the corresponding HW block, letting the RAM memory of the block be visible only to the + * iCache Controller for caching purposes. + * + */ +__STATIC_INLINE void hw_cache_enable (void) +{ + REG_SET_BIT(CRG_TOP, SYS_CTRL_REG, CACHERAM_MUX); + + /* Wait until the CACHERAM_MUX=1 (because of the APB Bridge). */ + while (REG_GETF(CRG_TOP, SYS_CTRL_REG, CACHERAM_MUX) != 1) + { + } +} + +/** + * \brief Disables the iCache Controller + * + * The iCache Controller is disabled by setting the CACHERAM_MUX to '0'. This action disables + * the corresponding HW block, bypassing the iCache Controller for all read requests + * and letting the RAM memory of the block be visible in the entire memory space. + * + */ +__STATIC_INLINE void hw_cache_disable (void) +{ + REG_CLR_BIT(CRG_TOP, SYS_CTRL_REG, CACHERAM_MUX); + + /* Wait until the CACHERAM_MUX=0 (because of the APB Bridge). */ + while (REG_GETF(CRG_TOP, SYS_CTRL_REG, CACHERAM_MUX) != 0) + { + } +} + +/** + * \brief Checks if the iCache Controller is enabled + * + * \return True if the iCache Controller is enabled, False otherwise. + * + * + */ +__STATIC_INLINE bool hw_cache_is_enabled (void) +{ + return REG_GETF(CRG_TOP, SYS_CTRL_REG, CACHERAM_MUX); +} + +/** + * \brief Enable flushing the iCache Controller (cache RAM cells) contents. For debugging only. + */ +__STATIC_INLINE void hw_cache_enable_flushing (void) +{ + REG_CLR_BIT(CACHE, CACHE_CTRL2_REG, CACHE_FLUSH_DISABLE); +} + +/** + * \brief Disable flushing the iCache Controller (cache RAM cells) contents. For debugging only. + */ +__STATIC_INLINE void hw_cache_disable_flushing (void) +{ + REG_SET_BIT(CACHE, CACHE_CTRL2_REG, CACHE_FLUSH_DISABLE); +} + +/** + * \brief Checks if the iCache Controller flushing is disabled. For debugging only. + * + * \return True if the iCache Controller flushing is disabled, False otherwise. + * + * + */ +__STATIC_INLINE bool hw_cache_is_flushing_disabled (void) +{ + return REG_GETF(CACHE, CACHE_CTRL2_REG, CACHE_FLUSH_DISABLE); +} + +/** + * \brief Check if the flushing process is complete + * + * \return True if flushing is complete, False if the iCache controller flushing is still + * in progress or there is no pending flushing termination indication as it + * will be cleared via a prior hw_cache_clear_flushed() call. + */ +__STATIC_INLINE bool hw_cache_is_flushed (void) +{ + return REG_GETF(CACHE, CACHE_CTRL2_REG, CACHE_FLUSHED); +} + +/** + * \brief Clear the indication that a prior flushing process is complete + */ +__STATIC_INLINE void hw_cache_clear_flushed (void) +{ + REG_CLR_BIT(CACHE, CACHE_CTRL2_REG, CACHE_FLUSHED); +} + +/** + * \brief Flush the cache contents + * + * Note: The very first flushing occurred after power on reset when the iCache Controller + * is enabled for the first time by the booter. + */ +__STATIC_INLINE void hw_cache_flush (void) +{ + if (!hw_cache_is_flushing_disabled()) + { + hw_cache_disable(); + hw_cache_enable(); + + /* Wait for the completion of the flushing process */ + while (hw_cache_is_flushed() == 0) + { + ; + } + + /* Clear the indication that the flushing is complete */ + hw_cache_clear_flushed(); + } +} + +/** 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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.c new file mode 100644 index 000000000000..8f080113a914 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.c @@ -0,0 +1,842 @@ +/** + * \addtogroup BSP + \{ + * \addtogroup DEVICES + \{ + * \addtogroup CLK + \{ + */ + +/** + **************************************************************************************** + * + * @file ra6w1/bsp_clocks.c + * + * @brief Clock Driver + * + * Copyright (c) 2016-2020 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#if (DEVICE_FAMILY == DA1640X) + +#define USE_FAST_STARTUP 0 + +#include +#include "bsp_api.h" +#include "sdk_defs.h" +#include "bsp_clocks.h" + +#if (dg_configUSE_HW_CLK_DEBUG_GPIO == 1) + #include "hw_gpio.h" +#endif + +#if (dg_configUSE_HW_CLK_DEBUG_GPIO == 1) + #define HW_CLK_DEBUG_GPIO_HIGH() hw_gpio_set_active(HW_GPIO_PORT_1, HW_GPIO_PIN_10) + #define HW_CLK_DEBUG_GPIO_LOW() hw_gpio_set_inactive(HW_GPIO_PORT_1, HW_GPIO_PIN_10) +#else + #define HW_CLK_DEBUG_GPIO_HIGH() + #define HW_CLK_DEBUG_GPIO_LOW() +#endif + +/* macros to adjust RTC access timing */ +#define RTC_POP_ACCESS_TIMING() (RTC->RTC_IF_REG) +#define RTC_PUSH_ACCESS_TIMING(val) (RTC->RTC_IF_REG) = (val) +#define RTC_SET_ACCESS_TIMING(curval, fz, fh, sz) do { \ + (RTC->RTC_IF_REG) = \ + (curval & (~0x00000FFFuL)) \ + | ((sz & 0x0f) << 8) \ + | ((fh & 0x0f) << 4) \ + | ((fz & 0x0f) << 0); \ +} while (0) + +#if USE_FAST_STARTUP +typedef struct +{ + uint16_t temp_refpt; // reference point for temperature compensation + + uint16_t base_drive_cycles; // base drive cycles at room xtal32m_temp_refpt +} xtalm_otp_t; + +__RETAINED static xtalm_otp_t xtalm_otp_values; +#endif + +/*******************************************************************************************************************//** + * Checks if the main oscillator (XTALM) has settled. + * + * @return true if XTALM has settled, false if it hasn't. + **********************************************************************************************************************/ +bool bsp_clock_xtalm_is_settled (void) +{ + return true; +} + +/*********************************************************************************************************************** + * Configures the XTAL32M clock + **********************************************************************************************************************/ +void bsp_clock_xtalm_configure (void) +{ + /* No configuration for XTAL40M. */ +} + +fsp_err_t bsp_clock_xtalm_preconditions_check (void) +{ + /* No preconditions for XTAL40M. */ + return FSP_SUCCESS; +} + +void bsp_clock_xtalm_enable (bool enable) +{ + if (enable) + { + CRG_COM->XTAL40M_CTRL_REG |= CRG_COM_XTAL40M_CTRL_REG_XTAL40M_EN_Msk; + } + else + { + CRG_COM->XTAL40M_CTRL_REG &= ~CRG_COM_XTAL40M_CTRL_REG_XTAL40M_EN_Msk; + } +} + +__RETAINED_CODE void hw_clk_start_calibration(cal_clk_t clk_type, cal_ref_clk_t clk_ref_type, uint16_t cycles); + +__RETAINED_CODE void hw_clk_start_calibration (cal_clk_t clk_type, cal_ref_clk_t clk_ref_type, uint16_t cycles) +{ + uint32_t val = 0; + + /* Must be disabled */ + ASSERT_WARNING(!REG_GETF(CLKCAL_BIF, CLK_REF_SEL_REG, REF_CAL_START)); + + CLKCAL_BIF->CLK_REF_CNT_REG = cycles; // # of cal clock cycles + + if (clk_ref_type == CALIBRATE_REF_EXT) + { + REG_SET_FIELD(CLKCAL_BIF, CLK_REF_SEL_REG, EXT_CNT_EN_SEL, val, 1); + } + else + { + REG_SET_FIELD(CLKCAL_BIF, CLK_REF_SEL_REG, REF_CLK_SEL, val, clk_ref_type); + } + + REG_SET_FIELD(CLKCAL_BIF, CLK_REF_SEL_REG, CAL_CLK_SEL, val, clk_type); + + CLKCAL_BIF->CLK_REF_SEL_REG = val; + + REG_SET_BIT(CLKCAL_BIF, CLK_CAL_IRQ_REG, CLK_CAL_IRQ_EN); + + REG_SET_BIT(CLKCAL_BIF, CLK_REF_SEL_REG, REF_CAL_START); +} + +uint32_t hw_clk_get_calibration_data(void); + +uint32_t hw_clk_get_calibration_data (void) +{ + /* Wait until it's finished */ + while (REG_GETF(CLKCAL_BIF, CLK_REF_SEL_REG, REF_CAL_START)) + { + } + + return CLKCAL_BIF->CLK_REF_VAL_REG; +} + +#undef CLK_DELAY_SANITY_CHECKS +#pragma GCC push_options +#pragma GCC optimize ("O3") + +void hw_clk_delay_usec(uint32_t usec); + +void hw_clk_delay_usec (uint32_t usec) +{ + static const uint32_t DIVIDER = 1000000; + +#ifdef CLK_DELAY_SANITY_CHECKS + ASSERT_WARNING((dg_configXTAL40M_FREQ % DIVIDER) == 0); + ASSERT_WARNING((dg_configXTAL80M_FREQ % DIVIDER) == 0); + ASSERT_WARNING((dg_configPLL80M_FREQ % DIVIDER) == 0); + ASSERT_WARNING((HW_CLK_DELAY_OVERHEAD_CYCLES % HW_CLK_CYCLES_PER_DELAY_REP) == 0); +#endif + + static const uint8_t OVERHEAD_REPS = HW_CLK_DELAY_OVERHEAD_CYCLES / HW_CLK_CYCLES_PER_DELAY_REP; + static volatile uint32_t sys_freq_table[] = + { + 0, // SYS_CLK_IS_NONE + dg_configXTAL40M_FREQ / DIVIDER, // SYS_CLK_IS_XTAL40M + dg_configXTAL32K_FREQ / DIVIDER, // SYS_CLK_IS_LP + 0, // SYS_CLK_IS_PLL240M + 0, // SYS_CLK_IS_PLL192M + dg_configPLL160M_FREQ / DIVIDER, // SYS_CLK_IS_PLL160M + dg_configPLL137M_FREQ / DIVIDER, // SYS_CLK_IS_PLL137M + dg_configPLL106M_FREQ / DIVIDER, // SYS_CLK_IS_PLL106M + }; + + const uint32_t cycles_per_usec = sys_freq_table[hw_clk_get_sysclk()] >> hw_clk_get_hclk_div(), + reps = cycles_per_usec * usec / HW_CLK_CYCLES_PER_DELAY_REP; + +#ifdef CLK_DELAY_SANITY_CHECKS + ASSERT_WARNING(usec <= 0xFFFFFFFF / cycles_per_usec); // The requested delay is greater than the maximum delay this function can achieve + ASSERT_WARNING(reps > OVERHEAD_REPS); // The requested delay is smaller than the minimum delay this function can achieve. +#endif + + if (reps <= OVERHEAD_REPS) + { + return; + } + + __ASM volatile ( + " nop \n" + " nop \n" + " nop \n" + " nop \n" + " nop \n" + "loop: nop \n" + " subs %[reps], %[reps], #1 \n" + " bne loop \n" + : // outputs + :[reps] "r" (reps - OVERHEAD_REPS) // inputs + : // clobbers + ); +} + +#pragma GCC pop_options +#if USE_FAST_STARTUP +static void xtal32m_readOTP (void) +{ + xtalm_otp_values.temp_refpt = 100; // reference point for temperature compensation + xtalm_otp_values.base_drive_cycles = 175; // base drive cycles at room xtal32m_temp_refpt +} + +#endif + +int16_t hw_clk_xtalm_update_rdy_cnt (void) +{ + int16_t xtalrdy_stat = 0; + + /* + * XXX On FPGA the value of XTALRDY_STAT_REG[XTALRDY_STAT] is always zero, so + * XXX there is no need to update XTALRDY_CTRL_REG[XTALRDY_CNT]. + */ +#if !DEVICE_FPGA + #if 0 + uint8_t xtalrdy_cnt = 0; + + // XXX review the following comments. normal vs fast mode + // XXX update IRQ time when in NORMAL startup mode: + // XXX (mis) use irq counter setting to do this + + if (REG_GETF(CRG_XTAL, XTALRDY_CTRL_REG, XTALRDY_CLK_SEL) == 0) + { + xtalrdy_cnt = REG_GETF(CRG_XTAL, XTALRDY_CTRL_REG, XTALRDY_CNT); + xtalrdy_stat = 3 - REG_GETF(CRG_XTAL, XTALRDY_STAT_REG, XTALRDY_STAT); + xtalrdy_cnt += xtalrdy_stat; + REG_SETF(CRG_XTAL, XTALRDY_CTRL_REG, XTALRDY_CNT, xtalrdy_cnt); + } + #endif +#endif + + return xtalrdy_stat; +} + +void hw_clk_xtalm_compensate_amp (void) +{ +#if USE_FAST_STARTUP + uint16_t T_drive, T_drive_lsb; + uint8_t N; + + // perform amplitude compensation + if (REG_GETF(CRG_XTAL, XTAL32M_CTRL0_REG, XTAL32M_RCOSC_XTAL_DRIVE) == 1) + { + uint16_t divisor = (0x8 << (0x7 - REG_GETF(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_STARTUP_TDRIVE))); + + T_drive = (xtalm_otp_values.base_drive_cycles * xtal32m_adcread()) / xtalm_otp_values.temp_refpt; + N = T_drive / divisor; + T_drive_lsb = T_drive - divisor * N; + + REG_SETF(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_STARTUP_TDRIVE_LSB, T_drive_lsb); + REG_SETF(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_DRIVE_CYCLES, N + 1); + } +#endif +} + +void hw_clk_xtalm_configure (void) +{ +#if 0 + #if USE_FAST_STARTUP + uint8_t settling_time; + uint8_t cxcomp_phi_trim; + + xtal32m_readOTP(); + + REG_SETF(CRG_XTAL, XTAL32M_CTRL0_REG, XTAL32M_CORE_CUR_SET, 3); // gmopt cur set. + + uint32_t reg = CRG_XTAL->XTAL32M_CTRL1_REG; + REG_SET_FIELD(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_RCOSC_SYNC_DELAY_TRIM, reg, 0); // synchronization delay trim + REG_SET_FIELD(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_STARTUP_TDISCHARGE, reg, 0); // discharge time in drive sequence + REG_SET_FIELD(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_STARTUP_TSETTLE, reg, 5); // required settling time + settling_time = 6; + REG_SET_FIELD(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_STARTUP_TDRIVE, reg, settling_time); // unit drive length + CRG_XTAL->XTAL32M_CTRL1_REG = reg; + + REG_SETF(CRG_XTAL, XTAL32M_CTRL2_REG, XTAL32M_RCOSC_TRIM_SNS, 118); // sensitivity of rcosc + + // sets TSETTLE to half of TDRIVE + REG_SETF(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_STARTUP_TSETTLE, settling_time); + + uint16_t T_drive, T_drive_lsb; + uint8_t N; + + uint16_t divisor = (0x8 << (0x7 - REG_GETF(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_STARTUP_TDRIVE))); + + // equate FASTBOOT drive-cycles + T_drive = xtalm_otp_values.base_drive_cycles; + N = T_drive / divisor; + T_drive_lsb = T_drive - divisor * N; + + REG_SETF(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_STARTUP_TDRIVE_LSB, T_drive_lsb); + REG_SETF(CRG_XTAL, XTAL32M_CTRL1_REG, XTAL32M_DRIVE_CYCLES, N + 1); + + // fast startup mode + REG_SETF(CRG_XTAL, TRIM_CTRL_REG, XTAL_TRIM_SELECT, 0x2); // always use direct trimming (disable legacy) + + // ~10us for ldo settling and 2 cycles for xtal voltage settling. IRQ handler also takes some time. + // hclk divider needs to be set to 0 + uint16_t xtalrdy_cnt = T_drive / 83 + 3 + 2; + + // Setup IRQ: + REG_SET_BIT(CRG_XTAL, XTALRDY_CTRL_REG, XTALRDY_CLK_SEL); // use 256kHz clock + REG_SETF(CRG_XTAL, XTALRDY_CTRL_REG, XTALRDY_CNT, xtalrdy_cnt); + REG_SET_BIT(CRG_XTAL, XTAL32M_CTRL0_REG, XTAL32M_RCOSC_CALIBRATE); + REG_CLR_BIT(CRG_XTAL, XTAL32M_CTRL0_REG, XTAL32M_CXCOMP_ENABLE); + #else + + // Configure OSF BOOST + uint8_t cxcomp_phi_trim = 0; + uint8_t cxcomp_trim_cap = REG_GETF(CRG_XTAL, XTAL32M_CTRL2_REG, XTAL32M_CXCOMP_TRIM_CAP); + + // set phi compensation + if (cxcomp_trim_cap < 37) + { + cxcomp_phi_trim = 3; + } + else + { + if (cxcomp_trim_cap < 123) + { + cxcomp_phi_trim = 2; + } + else + { + if (cxcomp_trim_cap < 170) + { + cxcomp_phi_trim = 1; + } + else + { + cxcomp_phi_trim = 0; + } + } + } + REG_SETF(CRG_XTAL, XTAL32M_CTRL2_REG, XTAL32M_CXCOMP_PHI_TRIM, cxcomp_phi_trim); + #endif +#endif +} + +/** + * \brief Enable the PLL. + */ +__RETAINED_CODE uint32_t hw_clk_pll_sys_on (void) +{ +#if DEVICE_FPGA + return 0; +#else + volatile uint32_t pllockcnt = 0, ldoisoff; + volatile uint32_t ldostabletime; + ahb_div_t bkup_ahbdiv, ahbdiv, scaler; + uint32_t bkup_rtcacctime; + + GLOBAL_INT_DISABLE(); + + // enable LDO for PLL + + /* 231024, NOTICE !!!!!!!!!! + * According to long-run testing, LDO settling time seems to be about 270~300 us. + * The NOP-loop (below while-loop) consists of 10 instructions. (approx. 12 cycles) */ + + // + // old condition: We managed to keep the time to 50us at least. + // 231024, test : unstable 50,55. stable 56(about 270 us),58,60,64 @ CPU 2.5MHz (XTAL 40MHz, AHB div 1/16) + // 231025, random test : + // long time, unstable 62(2.5>40). stable 64 + // short time, unstable 12(137>34). stable 16 + // 231026, pll management model has been updated for speed-up. + // 231027, (25<<4). long-run failed. changed to (30<<4) + // ahbdiv control scheme is fixed. + // 231030, HW_TIMER2 based time measurement was incorrect. changed to (640<<4, about 300 us) + + // backup ahbdiv & rtcacctime + bkup_ahbdiv = hw_clk_get_hclk_div(); + bkup_rtcacctime = RTC_POP_ACCESS_TIMING(); + + // forcing ahbdiv & rtcacctime + ahbdiv = ahb_div1; + + // We should access HCLK_DIV directly instead of calling hw_clk_set_hclk_div() + // to avoid the conflict with the nested call when using GLOBAL_INT_DISABLE. + // Trick to speed up RTC access. + HW_CLK_DEBUG_GPIO_HIGH(); + RTC_SET_ACCESS_TIMING(bkup_rtcacctime, 5, 7, 0); + REG_SETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, ahbdiv); + HW_CLK_DEBUG_GPIO_LOW(); + + ldostabletime = (1 << 4); + for ( ; ldostabletime > 0; ldostabletime--) + { + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + } + + switch (ahbdiv) + { + case ahb_div1: + { + scaler = 4; /*XTAL 40MHz*/ + break; + } + + case ahb_div2: + { + scaler = 3; /*XTAL 20MHz*/ + break; + } + + case ahb_div4: + { + scaler = 2; /*XTAL 10MHz*/ + break; + } + + case ahb_div8: + { + scaler = 1; /*XTAL 5MHz*/ + break; + } + + case ahb_div16: /*XTAL 2.5MHz*/ + default: + { + scaler = 0; + break; + } + } + + HW_CLK_DEBUG_GPIO_HIGH(); + if (REG_GETF(RTC, LDO_ENABLE_REG, LDO_EN_LDO_PLL1) == 0) + { + ldostabletime = (140 << 4); // when LDO is off for a long time. about 320 us + + REG_SET_BIT(RTC, LDO_ENABLE_REG, LDO_EN_LDO_PLL1); + ldoisoff = 1; + } + else + { + ldostabletime = 0; // when LDO and/or DPLL are turned on/off for a moment, + // or when LDO is turned on during waking up from deepsleep. + ldoisoff = 0; + } + + ldostabletime = ldostabletime >> (scaler); + for ( ; ldostabletime > 0; ldostabletime--) + { + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + } + + HW_CLK_DEBUG_GPIO_LOW(); + + // set dpll1en & xtalen to activate PLL ( XTAL_GAIN(7) ) + // xtalen + REG_SET_BIT(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_EN); + + // xtal switch for DPLL + HW_CLK_DEBUG_GPIO_HIGH(); + if (REG_GETF(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_DPLL_EN) == 0) + { + ldostabletime = (0 << 4); // when XTAL40M_DPLL_EN is off for a long time. + + // 231101, these steps are changed to "gain control before DPLL.xtal_en" + // xtal gain + REG_SETF(CRG_COM, XTAL40M_CTRL_REG, XTAL40_GAIN, 7); + + ldostabletime = ldostabletime >> (scaler); + for ( ; ldostabletime > 0; ldostabletime--) + { + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + } + + // DPLL.xtal_en + REG_SET_BIT(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_DPLL_EN); + ldostabletime = (0 << 4); + } + else + { + ldostabletime = 0; // when XTAL40M_DPLL_EN is enabled, + } + + ldostabletime = ldostabletime >> (scaler); + for ( ; ldostabletime > 0; ldostabletime--) + { + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + } + + HW_CLK_DEBUG_GPIO_LOW(); + + // disable PLL ( power-down ) + // first clear to make sure that the logic will be reseted + REG_CLR_BIT(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN); + + // wait until PLL is unlocked + pllockcnt = MAX_PLL_LCKCHK_TIME; /* x1 times */ + + HW_CLK_DEBUG_GPIO_HIGH(); + while (pllockcnt-- > 0) + { + if (REG_GETF(CRG_COM, PLL1_ARM_CTRL_REG, PLL_LOCK) == 0) + { + break; + } + } + + HW_CLK_DEBUG_GPIO_LOW(); + + // setup PLL to operate 480MHz + REG_SETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_VCO_SEL, 0); + REG_SETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_DIV_SEL, 24); + REG_SETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_SHORT_S, 2); + REG_SETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_LF_RCTRL, 0); + + // enable PLL ( power-up ) + REG_SET_BIT(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN); + + // wait until PLL is locked + pllockcnt = MAX_PLL_LCKCHK_TIME; /* x1 times */ + + HW_CLK_DEBUG_GPIO_HIGH(); + while (pllockcnt-- > 0) + { + if (REG_GETF(CRG_COM, PLL1_ARM_CTRL_REG, PLL_LOCK) != 0) + { + break; + } + } + + HW_CLK_DEBUG_GPIO_LOW(); + + // restore ahbdiv + HW_CLK_DEBUG_GPIO_HIGH(); + RTC_PUSH_ACCESS_TIMING(bkup_rtcacctime); + REG_SETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, bkup_ahbdiv); + + ldostabletime = (1 << 4) >> (bkup_ahbdiv); + for ( ; ldostabletime > 0; ldostabletime--) + { + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + } + + HW_CLK_DEBUG_GPIO_LOW(); + + GLOBAL_INT_RESTORE(); + + return (ldoisoff << 2) | ((MAX_PLL_LCKCHK_TIME - pllockcnt) << 3); +#endif +} + +/** + * \brief Disable the PLL. + * + * \warning The System clock must have been set to XTAL40M before calling this function! + */ +__RETAINED_CODE void hw_clk_pll_sys_off (void) +{ +#if DEVICE_FPGA +#else + volatile uint32_t pllockcnt = 0; + ahb_div_t bkup_ahbdiv, ahbdiv; + + GLOBAL_INT_DISABLE(); + + // backup ahbdiv + bkup_ahbdiv = hw_clk_get_hclk_div(); + + // forcing ahbdiv + ahbdiv = ahb_div1; + + // We should access HCLK_DIV directly instead of calling hw_clk_set_hclk_div() + // to avoid the conflict with the nested call when using GLOBAL_INT_DISABLE. + REG_SETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, ahbdiv); + + // The PLL is not the system clk. + ASSERT_WARNING(!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_PLL)); + + /* Turn off PLL. */ + REG_CLR_BIT(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN); + + // wait until PLL is unlocked + pllockcnt = MAX_PLL_LCKCHK_TIME; /* x1 times */ + while (pllockcnt-- > 0) + { + if (REG_GETF(CRG_COM, PLL1_ARM_CTRL_REG, PLL_LOCK) == 0) + { + break; + } + } + + /* LDO PLL disable. */ + REG_CLR_BIT(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_DPLL_EN); + + for (uint32_t ldostabletime = (1 << 4); ldostabletime > 0; ldostabletime--) + { + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + } + + /* disable LDO for PLL */ + REG_CLR_BIT(RTC, LDO_ENABLE_REG, LDO_EN_LDO_PLL1); + + for (uint32_t ldostabletime = (1 << 4); ldostabletime > 0; ldostabletime--) + { + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + __ASM volatile ("nop"); + } + + // restore ahbdiv + REG_SETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, bkup_ahbdiv); + + GLOBAL_INT_RESTORE(); +#endif +} + +__RETAINED_CODE void pll_on (void) +{ +#if DEVICE_FPGA +#else + int i; + volatile uint32_t delay; + + /* Now turn on PLL */ + REG_SETF(RTC, LDO_ENABLE_REG, LDO_EN_LDO_PLL1, 1); // enable LDO for PLL + + /* it need 50us at least */ + for (delay = 50; delay > 0; delay--) + { + __asm__ volatile ( "nop"); + __asm__ volatile ( "nop"); + __asm__ volatile ( "nop"); + __asm__ volatile ( "nop"); + } + + REG_SETF(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_DPLL_EN, 1); // enable xtal path to DPLL + + REG_SETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN, 0); // first clear to make sure that the logic will be reseted + REG_SETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN, 1); + + /* And wait until lock. */ + while (REG_GETF(CRG_COM, PLL1_ARM_CTRL_REG, PLL_LOCK) == 0) + { + } + + REG_SETF(CRG_TOP, CLK_AMBA_REG, OQSPIF_DIV, 1); // oqspi divide first 40Mhz + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL, 2); // 160Mhz + REG_SETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, 0); // AMBA 160Mhz + // REG_SETF(CRG_PER, CLK_COM_REG, UART_ENABLE, 0); // uart source 40Mhz + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_PERI_ENABLE, 1); // peri pll clock + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_CPU_ENABLE, 1); + +/* + * REG_SETF(OQSPIF,OQSPIF_CTRLMODE_REG, OSPIC_PCLK_MD, 7); + * REG_SETF(OQSPIF,OQSPIF_CTRLMODE_REG, OSPIC_RPIPE_EN, 1); + */ + REG_SETF(CRG_TOP, CLK_CTRL_REG, SYS_CLK_SEL, 3); + + for (i = 32; i > 0; i--) + { + __ASM volatile ("nop"); + __ASM volatile ("nop"); + } + + /* update UART clock */ +#endif +} + +__RETAINED_CODE void pll_off (void) +{ +#if DEVICE_FPGA +#else + REG_SETF(CRG_TOP, CLK_CTRL_REG, SYS_CLK_SEL, 1); // XTAL + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_CPU_ENABLE, 0); + REG_SETF(CRG_TOP, CLK_AMBA_REG, OQSPIF_DIV, 1); // oqspi divide first 80Mhz + + /* Now turn off PLL */ + REG_SETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN, 0); // first clear to make sure that the logic will be reseted + REG_SETF(RTC, LDO_ENABLE_REG, LDO_EN_LDO_PLL1, 0); // enable LDO for PLL + + REG_SETF(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_DPLL_EN, 0); // enable xtal path to DPLL +#endif +} + +/*******************************************************************************************************************//** + * Enable mirror for acessing RTC register. + * + * @note The RTC block uses a 32khz clock. + * Because of this, bus access also uses 32khz. + * Using a mirror, you can access the RTC register using the CPU's clock. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM void bsp_prv_rtc_mirror_init (void) +{ + RTC->RTC_REQ_REG_b.RTC_REQ_CLR_IRQ = 1; + + if (RTC->RTC_REQ_REG_b.RTC_REQ_LOAD_MR == 0) + { + RTC->RTC_MIRROR_REG_b.RTC_OP_EN = 1; + RTC->RTC_MIRROR_REG_b.RTC_MR_EN = 1; + + RTC->RTC_REQ_REG_b.RTC_REQ_LOAD_MR = 1; + + /* Wait to done process */ + while ((RTC->RTC_IRQ_STATUS_REG_b.RTC_IRQ_STATUS) != 0x01) + { + ; + } + } +} + +/*******************************************************************************************************************//** + * Gets the current low power clock source selection. + * + * @return The current low power clock source type. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM lp_clk_is_t bsp_prv_lpclk_get () +{ + uint32_t sel, current_sel; + + sel = RTC->CLK_XTAL32K_REG_b.XTAL_CLK_SEL; + + if (sel == 0x00) + { + current_sel = LP_CLK_IS_RCX; + } + else if (sel == 0x01) + { + current_sel = LP_CLK_IS_XTAL32K; + } + else + { + current_sel = LP_CLK_IS_INVALID; + } + + return current_sel; +} + +/*******************************************************************************************************************//** + * @brief Selects the low power clock source. + * + * This function selects the low power clock source based on the input type. + * It checks the current clock selection and updates it if available. + * + * @param[in] type The desired low power clock source type. + * + * @return The selected low power clock source type. + * + * @note The lp clock has internal rcx and external xtal32k. + * It usually takes about 1 second after POR for XTAL_RDY_BAT_RD_STATUS to become 1. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM fsp_err_t bsp_prv_lpclk_select (lp_clk_is_t type) +{ + fsp_err_t result = FSP_SUCCESS; + + if (bsp_prv_lpclk_get() == type) + { + /* If sel is same to type, it's return */ + return result; + } + + switch (type) + { + case LP_CLK_IS_RCX: + { + RTC->CLK_XTAL32K_REG_b.XTAL_CLK_SEL = 0; + RTC->CLK_XTAL32K_REG_b.XTAL_BAT_EN = 0; + break; + } + + case LP_CLK_IS_XTAL32K: + { +#if (BSP_CLOCK_CFG_SUBCLOCK_POPULATED == 1) + if (RTC->READ_STATUS_REG_b.XTAL_RDY_BAT_RD_STATUS) + { + RTC->CLK_XTAL32K_REG_b.XTAL_CLK_SEL = 1; + + /* For decrease current consumption, it's off OSC */ + RTC->RCX32K_REG = 0; + RTC->CLK_XTAL32K_REG_b.PDB_OSC_EN = 0; + } + else +#endif + { + result = FSP_ERR_NOT_STABILIZED; + } + + break; + } + + default: + { + break; + } + } + + return result; +} + +#endif /* DEVICE_FAMILY */ + +/** + \} + \} + \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.h new file mode 100644 index 000000000000..69a5fb92382d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_clocks.h @@ -0,0 +1,1146 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_CLOCKS_RA6W1_H +#define BSP_CLOCKS_RA6W1_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "../all/bsp_delay.h" +#include "../all/bsp_mcu_api.h" +#include "../all/bsp_clocks.h" + +/* TODO get rid of the following legacy definitions from sdk_defs.h: */ +#define REG_GETF(base, reg, field) \ + (((base->reg) & (base ## _ ## reg ## _ ## field ## _Msk)) >> (base ## _ ## reg ## _ ## field ## _Pos)) + +#define REG_SETF(base, reg, field, new_val) \ + base->reg = ((base->reg & ~(base ## _ ## reg ## _ ## field ## _Msk)) | \ + ((base ## _ ## reg ## _ ## field ## _Msk) &((new_val) << (base ## _ ## reg ## _ ## field ## _Pos)))) + +#define GLOBAL_INT_DISABLE() \ + do { \ + unsigned int __l_irq_rest; \ + __ASM volatile ("mrs %0, primask \n\t" \ + "mov r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (__l_irq_rest) \ + : \ + : "r1" \ + ); \ + /*DBG_CONFIGURE_HIGH(CMN_TIMING_DEBUG, CMNDBG_CRITICAL_SECTION);*/ + +#define GLOBAL_INT_RESTORE() \ + if (__l_irq_rest == 0) { \ + /*DBG_CONFIGURE_LOW(CMN_TIMING_DEBUG, CMNDBG_CRITICAL_SECTION);*/ \ + } \ + __ASM volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (__l_irq_rest) \ + : \ + ); \ +} \ + while (0) + +#define REG_SET_BIT(base, reg, field) \ + do { \ + base->reg |= (1 << (base ## _ ## reg ## _ ## field ## _Pos)); \ + } while (0) + +#define REG_CLR_BIT(base, reg, field) \ + do { \ + base->reg &= ~(base ## _ ## reg ## _ ## field ## _Msk); \ + } while (0) + +/** 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 HW_CLK_DELAY_OVERHEAD_CYCLES (72) +#define HW_CLK_CYCLES_PER_DELAY_REP (4) + +#define MAX_PLL_LCKCHK_TIME (0x00007FFF) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** + * \brief The type of the LP clock + */ +typedef enum lp_clk_is_type +{ + LP_CLK_IS_RCX, // 32K internal RC oscillator + LP_CLK_IS_XTAL32K, // 32K Crystal oscillator + LP_CLK_IS_SWCLK, // Test_clk + LP_CLK_IS_INVALID +} lp_clk_is_t; + +/** + * \} + */ + +/** + * \brief The AMBA High-Performance Bus (AHB) clock divider + */ +typedef enum ahbdiv_type +{ + ahb_div1 = 0, //!< Divide by 1 + ahb_div2, //!< Divide by 2 + ahb_div4, //!< Divide by 4 + ahb_div8, //!< Divide by 8 + ahb_div16, //!< Divide by 16 +} ahb_div_t; + +/** + * \brief The AMBA Peripheral Bus (APB) clock divider + */ +typedef enum apbdiv_type +{ + apb_div1 = 0, //!< Divide by 1 + apb_div2, //!< Divide by 2 + apb_div4, //!< Divide by 4 + apb_div8, //!< Divide by 8 + apb_div16, //!< Divide by 16 +} apb_div_t; + +/** + * \brief Get the divider of the AMBA High Speed Bus. + * + * \return The AMBA High Speed Bus divider + */ +__STATIC_FORCEINLINE ahb_div_t hw_clk_get_hclk_div (void) +{ + return (ahb_div_t) REG_GETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV); +} + +/** + * \brief Set the divider of the AMBA High Speed Bus. + * + * \param div The AMBA High Speed Bus divider + */ +__STATIC_FORCEINLINE void hw_clk_set_hclk_div (ahb_div_t div) +{ + BSP_CHECK_DEBUG(div <= ahb_div16); + + GLOBAL_INT_DISABLE(); + REG_SETF(CRG_TOP, CLK_AMBA_REG, HCLK_DIV, div); + GLOBAL_INT_RESTORE(); +} + +/** + * \brief The type of the system clock + */ +typedef enum sys_clk_is_type +{ + SYS_CLK_IS_NONE = 0, /* RUNNING_AT_LP_CLK */ + SYS_CLK_IS_XTAL40M, /* RUNNING_AT_XTAL40M */ + SYS_CLK_IS_LP, + SYS_CLK_IS_PLL240M, /* RUNNING_AT_PLL240M : descoped */ + SYS_CLK_IS_PLL192M, /* RUNNING_AT_PLL192M : descoped */ + SYS_CLK_IS_PLL160M, /* RUNNING_AT_PLL160M */ + SYS_CLK_IS_PLL137M, /* SYS_CLK_IS_PLL137M */ + SYS_CLK_IS_PLL106M, /* SYS_CLK_IS_PLL106M */ + SYS_CLK_IS_INVALID +} sys_clk_is_t; + +/** + * \} + */ + +/** + * \brief The type of clock to be calibrated + */ +typedef enum cal_clk_sel_type +{ + CALIBRATE_XTAL32K = 0, + CALIBRATE_RCX32K, + CALIBRATE_DIVN_CLK, +} cal_clk_t; + +/** + * \brief The reference clock used for calibration + */ +typedef enum cal_ref_clk_sel_type +{ + CALIBRATE_REF_XTAL32K = 0, + CALIBRATE_REF_RCX32K, + CALIBRATE_REF_DIVN_CLK, + CALIBRATE_REF_EXT, +} cal_ref_clk_t; + +/** + * \brief The system clock type + * + * \note Must only be used with functions cm_sys_clk_init/set() + */ +typedef enum sysclk_type +{ + sysclk_RC32 = 0, //!< RC32 + sysclk_XTAL40M = 2, //!< 40MHz + sysclk_PLL480 = 6, //!< 480MHz + sysclk_LP = 255, //!< not applicable +} sys_clk_t; + +/** + * \brief The CPU clock type (speed) + * + */ +typedef enum cpu_clk_type +{ + cpuclk_2M = 2, //!< 2.5 MHz, divided by 16 in XTAL + cpuclk_5M = 5, //!< 5 MHz, divided by 8 in XTAL + cpuclk_10M = 10, //!< 10 MHz, divided by 4 in XTAL + cpuclk_20M = 20, //!< 20 MHz, divided by 2 in XTAL + + cpuclk_26M = 26, //!< 26 MHz, divided by 4 in SYSCLK 106MHz + cpuclk_34M = 34, //!< 34 MHz, divided by 4 in SYSCLK 137MHz + cpuclk_40M = 40, //!< 40 MHz, divided by 4 in SYSCLK 160MHz + + cpuclk_53M = 53, //!< 53 MHz, divided by 2 in SYSCLK 106MHz + cpuclk_68M = 68, //!< 68 MHz, divided by 2 in SYSCLK 137MHz + cpuclk_80M = 80, //!< 80 MHz, divided by 2 in SYSCLK 160MHz + + cpuclk_106M = 106, //!< 106 MHz + cpuclk_137M = 137, //!< 137 MHz + cpuclk_160M = 160 //!< 160 MHz +} cpu_clk_t; + +/** + * \brief The type of the fpll clock + */ +typedef enum fpll_clock_type +{ + FPLL_98M = 0, + FPLL_90M = 1, + DIVN_40M = 2, +} fpll_clk_t; + +/** + * \brief The type of the fpll mode + */ +typedef enum fpll_clock_mode +{ + FPLL_MODE_USE_IRM = 0, + FPLL_MODE_NO_IRM = 1 +} fpll_mode_t; + +/** + * \brief Get the XTAL32M settling time. + * + * \return The number of 256KHz clock cycles required for XTAL40M to settle + */ +__STATIC_FORCEINLINE uint16_t hw_clk_get_xtalm_settling_time (void) +{ + /* TODO for DA1640x */ + return 0; +} + +/** + * \brief Check if the XTAL40M is enabled. + * + * \return true if the XTAL40M is enabled, else false. + */ +__STATIC_INLINE bool hw_clk_check_xtal40m_status (void) +{ + /* TODO for DA1640x */ + return true; +} + +/** + * \brief Activate the XTAL40M. + */ +__STATIC_INLINE void hw_clk_enable_xtal40m (void) +{ + /* Do nothing if XTAL40M is already up and running. */ + if (REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_XTAL40M)) + { + return; + } + + // Check if TIM power domain is enabled +#if DEVICE_FPGA +#else + BSP_CHECK_DEBUG(REG_GETF(CRG_TOP, SYS_STATUS_REG, SYS_IS_UP)); +#endif + +#if DEVICE_FPGA + REG_SET_BIT(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_EN); +#else + REG_SET_BIT(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_EN); + +// Delay + R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS); + BSP_CHECK_DEBUG(REG_GETF(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_RDY)); +#endif +} + +/** + * \brief Deactivate the XTAL40M. + */ +__STATIC_INLINE void hw_clk_disable_xtal40m (void) +{ + REG_CLR_BIT(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_EN); +} + +/** + * \brief Check if the XTAL40M has settled. + * + * \return true if the XTAL40M has settled, else false. + */ +__STATIC_INLINE bool hw_clk_is_xtalm_started (void) +{ + return true; +} + +/** + * \brief Return the clock used as the system clock. + * + * \return The type of the system clock + */ +__STATIC_FORCEINLINE sys_clk_is_t hw_clk_get_sysclk (void) +{ + sys_clk_is_t clk = SYS_CLK_IS_NONE; + + if (REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_XTAL40M)) + { + clk = SYS_CLK_IS_XTAL40M; + } + else if (REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_LP_CLK)) + { + clk = SYS_CLK_IS_LP; + } + else if (REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_PLL)) + { + uint8_t mode = REG_GETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL); + clk = (sys_clk_is_t) (SYS_CLK_IS_PLL240M + mode); + } + + BSP_CHECK_DEBUG(clk < SYS_CLK_IS_INVALID); + + return clk; +} + +/** + * \brief Check whether the XTAL32K is the Low Power clock. + * + * \return true if XTAL32K is the LP clock, else false. + */ +__STATIC_INLINE bool hw_clk_lp_is_xtal32k (void) +{ + if (REG_GETF(RTC, CLK_XTAL32K_REG, XTAL_CLK_SEL) == LP_CLK_IS_XTAL32K) + { + return true; + } + + return false; +} + +/** + * \brief Set RCX as the Low Power clock. + * + * \warning The RCX must have been enabled before calling this function! + * + * \note Call with interrupts disabled to ensure that CLK_CTRL_REG + * read/modify/write operation is not interrupted + */ +__STATIC_INLINE void hw_clk_lp_set_rcx (void) +{ +#if DEVICE_FPGA +#else + BSP_CHECK_DEBUG(__get_PRIMASK() == 1 || __get_BASEPRI()); + BSP_CHECK_DEBUG(REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_LP_CLK)); + + REG_SET_BIT(RTC, CLK_XTAL32K_REG, PDB_OSC_EN); + REG_SETF(RTC, CLK_XTAL32K_REG, XTAL_CLK_SEL, LP_CLK_IS_RCX); +#endif +} + +/** + * \brief Set XTAL32K as the Low Power clock. + * + * \warning The XTAL32K must have been enabled before calling this function! + * + * \note Call with interrupts disabled to ensure that CLK_CTRL_REG + * read/modify/write operation is not interrupted + */ +__STATIC_INLINE void hw_clk_lp_set_xtal32k (void) +{ + BSP_CHECK_DEBUG(__get_PRIMASK() == 1 || __get_BASEPRI()); +#if DEVICE_FPGA +#else + BSP_CHECK_DEBUG(REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_LP_CLK)); +#endif + REG_SET_BIT(RTC, CLK_XTAL32K_REG, XTAL_BAT_EN); + REG_SETF(RTC, CLK_XTAL32K_REG, XTAL_CLK_SEL, LP_CLK_IS_XTAL32K); +} + +/** + * \brief Set an external SWCLK as the Low Power clock. + * + * \note Call with interrupts disabled to ensure that CLK_CTRL_REG + * read/modify/write operation is not interrupted + */ +__STATIC_INLINE void hw_clk_lp_set_swclk (void) +{ + BSP_CHECK_DEBUG(__get_PRIMASK() == 1 || __get_BASEPRI()); +#if DEVICE_FPGA +#else + BSP_CHECK_DEBUG(REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_LP_CLK)); +#endif + REG_SETF(RTC, CLK_XTAL32K_REG, XTAL_CLK_SEL, LP_CLK_IS_SWCLK); +} + +/** + * \brief Enable RCX but does not set it as the LP clock. + */ +__STATIC_INLINE void hw_clk_enable_rcx (void) +{ + REG_SET_BIT(RTC, CLK_XTAL32K_REG, PDB_OSC_EN); +} + +/** + * \brief Disable RCX. + * + * \warning RCX must not be the LP clock + */ +__STATIC_INLINE void hw_clk_disable_rcx (void) +{ + if (REG_GETF(RTC, CLK_XTAL32K_REG, XTAL_CLK_SEL) != LP_CLK_IS_RCX) + { + REG_CLR_BIT(RTC, CLK_XTAL32K_REG, PDB_OSC_EN); + } +} + +/** + * \brief Enable XTAL32K but do not set it as the LP clock. + */ +__STATIC_INLINE void hw_clk_enable_xtal32k (void) +{ + REG_SET_BIT(RTC, CLK_XTAL32K_REG, XTAL_BAT_EN); +} + +/** + * \brief Enable XTAL32K from XTAL40MHz but do not set it as the LP clock. + */ +__STATIC_INLINE void hw_clk_enable_external (void) +{ +} + +/** + * \brief Disable XTAL32K. + * + * \warning XTAL32K must not be the LP clock. + */ +__STATIC_INLINE void hw_clk_disable_xtal32k (void) +{ + if (REG_GETF(RTC, CLK_XTAL32K_REG, XTAL_CLK_SEL) != LP_CLK_IS_XTAL32K) + { + REG_CLR_BIT(RTC, CLK_XTAL32K_REG, XTAL_BAT_EN); + } +} + +/** + * \brief Disable XTAL32K from XTAL40M. + * + * \warning XTAL32K must not be the LP clock. + */ +__STATIC_INLINE void hw_clk_disable_external (void) +{ + BSP_CHECK_DEBUG(REG_GETF(RTC, CLK_XTAL32K_REG, XTAL_CLK_SEL) == LP_CLK_IS_XTAL32K); + + REG_CLR_BIT(RTC, CLK_XTAL32K_REG, XTAL_BAT_EN); +} + +/** + * \brief Set System clock. + * + * \param[in] mode The new system clock. + * + * \note System clock switch to PLL is only allowed when current system clock is XTAL40M. + * System clock switch from PLL is only allowed when new system clock is XTAL40M. + */ +__STATIC_FORCEINLINE void hw_clk_set_sysclk (sys_clk_is_t mode) +{ + /* Make sure a valid sys clock is requested */ + BSP_CHECK_DEBUG(mode <= SYS_CLK_IS_PLL106M); +#if (0) + + /* Switch to PLL is only allowed when current system clock is XTAL32M */ + BSP_CHECK_DEBUG(mode != SYS_CLK_IS_PLL || + REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_XTAL32M) || + REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_PLL96M)) + + /* Switch to PLL is only allowed when HDIV and PDIV are 0 */ + BSP_CHECK_DEBUG(mode != SYS_CLK_IS_PLL || (hw_clk_get_hclk_div() == ahb_div1 && hw_clk_get_pclk_div() == apb_div1)); + + /* Switch from PLL is only allowed when new system clock is XTAL32M */ + BSP_CHECK_DEBUG(!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_PLL96M) || + mode == SYS_CLK_IS_XTAL40M || + mode == SYS_CLK_IS_PLL); +#endif + GLOBAL_INT_DISABLE(); + if (mode < SYS_CLK_IS_PLL240M) + { + // sys_clk_is_t clk = hw_clk_get_sysclk(); + if (mode == SYS_CLK_IS_XTAL40M) + { + REG_SET_BIT(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_EN); + } + else if (mode == SYS_CLK_IS_LP) + { + REG_SET_BIT(CRG_COM, XTAL32K_CTRL_REG, XTAL32K_ENABLE); + BSP_CHECK_DEBUG(0); + } + + REG_SETF(CRG_TOP, CLK_CTRL_REG, SYS_CLK_SEL, mode); + } + else + { + sys_clk_is_t clk = hw_clk_get_sysclk(); + + if ((clk != SYS_CLK_IS_XTAL40M) && (clk != SYS_CLK_IS_LP)) + { + REG_SETF(CRG_TOP, CLK_CTRL_REG, SYS_CLK_SEL, SYS_CLK_IS_XTAL40M); // XTAL + while (REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_PLL)) + { + } + } + + /* PLL_CLK_SEL, + * 0: set to SYS_CLK=240Mhz + * 1: set to SYS_CLK=192Mhz + * 2: set to SYS_CLK=160Mhz + * 3: set to SYS_CLK=137.14Mhz + * 4: set to SYS_CLK=106Mhz + */ + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL, (unsigned) (mode - SYS_CLK_IS_PLL240M)); + + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_CPU_ENABLE, 1); + + REG_SETF(CRG_TOP, CLK_CTRL_REG, SYS_CLK_SEL, 3); // PLL + } + + GLOBAL_INT_RESTORE(); + + /* Wait until the switch is done! */ + switch (mode) + { + case SYS_CLK_IS_XTAL40M: + { + while (!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_XTAL40M)) + { + } + + return; + } + + case SYS_CLK_IS_LP: + { + while (!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_LP_CLK)) + { + } + + return; + } + + case SYS_CLK_IS_PLL160M: + case SYS_CLK_IS_PLL137M: + case SYS_CLK_IS_PLL106M: + { + while (!REG_GETF(CRG_TOP, CLK_CTRL_REG, RUNNING_AT_PLL)) + { + } + + return; + } + + default: + BSP_CHECK_DEBUG(0); + } +} + +/** + * \brief Enable the PLL. + */ +uint32_t hw_clk_pll_sys_on(void); + +/** + * \brief Disable the PLL. + * + * \warning The System clock must have been set to XTAL40M before calling this function! + */ +void hw_clk_pll_sys_off(void); + +/** + * \brief Check if the PLL is enabled. + * + * \return true if the PLL is enabled, else false. + */ +__STATIC_FORCEINLINE bool hw_clk_check_pll_status (void) +{ +#if DEVICE_FPGA + return REG_GETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN); +#else + return REG_GETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN); +#endif +} + +/** + * \brief Check if the PLL is on and has locked. + * + * \return true if the PLL has locked, else false. + */ +__STATIC_FORCEINLINE bool hw_clk_is_pll_locked (void) +{ +#if DEVICE_FPGA + return REG_GETF(CRG_COM, PLL1_ARM_CTRL_REG, PLL_LOCK); +#else + return REG_GETF(CRG_COM, PLL1_ARM_CTRL_REG, PLL_LOCK); +#endif +} + +/** + * \brief Activate a System clock. + * + * \param[in] clk The clock to activate. + */ +__STATIC_FORCEINLINE void hw_clk_enable_sysclk (sys_clk_is_t clk) +{ + switch (clk) + { + case SYS_CLK_IS_LP: + { + if (hw_clk_lp_is_xtal32k() == false) + { + hw_clk_enable_xtal32k(); + } + + break; + } + + case SYS_CLK_IS_XTAL40M: + { + // REG_SETF(CRG_DIGPLL, PLL320M_CFG1_REG, ENABLE_PLL320M, 0); + hw_clk_enable_xtal40m(); + + // REG_SETF(CRG_TOP,CLK_CTRL_REG, DIVC_CLK_SEL, 0); // 0: div1, 1: div2 + break; + } + + case SYS_CLK_IS_PLL160M: + { + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL, 2); + break; + } + + case SYS_CLK_IS_PLL137M: + { + // REG_SETF(CRG_DIGPLL, PLL320M_CFG1_REG, ENABLE_PLL320M, 1); + // while(REG_GETF(CRG_DIGPLL, PLL320M_STATUS_REG,PLL320M_PLL_OK)==0); + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL, 3); + break; + } + + case SYS_CLK_IS_PLL106M: + { + // REG_SETF(CRG_DIGPLL, PLL320M_CFG1_REG, ENABLE_PLL320M, 1); + // while(REG_GETF(CRG_DIGPLL, PLL320M_STATUS_REG,PLL320M_PLL_OK)==0); + REG_SETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL, 4); + break; + } + + default: + + /* An invalid clock is requested */ + BSP_CHECK_DEBUG(0); + } +} + +/** + * \brief Deactivate a System clock. + * + * \param[in] clk The clock to deactivate. + */ +__STATIC_FORCEINLINE void hw_clk_disable_sysclk (sys_clk_is_t clk) +{ + switch (clk) + { + case SYS_CLK_IS_XTAL40M: + { + hw_clk_disable_xtal40m(); + + return; + } + + case SYS_CLK_IS_LP: + { + hw_clk_disable_rcx(); + + return; + } + + case SYS_CLK_IS_PLL160M: + { + // TODO: + return; + } + + case SYS_CLK_IS_PLL137M: + { + // TODO: + return; + } + + case SYS_CLK_IS_PLL106M: + { + // TODO: + return; + } + + default: + + /* An invalid clock is requested */ + BSP_CHECK_DEBUG(0); + } +} + +/** + * \brief Check if a System clock is enabled. + * + * \return true if the System clock is enabled, else false. + */ +__STATIC_INLINE bool hw_clk_is_enabled_sysclk (sys_clk_is_t clk) +{ + switch (clk) + { + case SYS_CLK_IS_XTAL40M: + { + return hw_clk_check_xtal40m_status(); + } + + case SYS_CLK_IS_PLL160M: + { + if (REG_GETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL) == 2) + { + return true; + } + + break; + } + + case SYS_CLK_IS_PLL137M: + { + if (REG_GETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL) == 3) + { + return true; + } + + break; + } + + case SYS_CLK_IS_PLL106M: + { + if (REG_GETF(CRG_TOP, CLK_CTRL_REG, PLL_CLK_SEL) == 4) + { + return true; + } + + break; + } + + default: + { + /* An invalid clock is requested */ + BSP_CHECK_DEBUG(0); + break; + } + } + + return false; +} + +/** + * \brief Configure pin to connect an external digital clock. + */ +__STATIC_INLINE void hw_clk_configure_ext32k_pins (void) +{ +#if DEVICE_FPGA +#else + + // GPIO-> P0_23_MODE_REG = 0; +#endif +} + +/** + * \brief Activate a FPLL clock. + * + * \param[in] freq_type The clock to activate. + * \param[in] fpll_mode The clock to activate. + */ +__STATIC_INLINE void hw_clk_enable_fpll (fpll_clk_t freq_type, fpll_mode_t fpll_mode) +{ +#if DEVICE_FPGA +#else + REG_SETF(RTC, LDO_ENABLE_REG, LDO_EN_LDO_PLL1, 1); + REG_SETF(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_EN, 1); + +// REG_SETF(CRG_COM, PLL1_ARM_CTRL_REG, DPLL1_EN, 1); + REG_SETF(CRG_COM, XTAL40M_CTRL_REG, XTAL40M_FPLL_EN, 1); + if (freq_type == DIVN_40M) + { + REG_SETF(FPLL, PLLD_CTRL_REG, FPLL_EN, 1); + REG_SETF(FPLL, PLLD_CTRL_REG, BYPASS_SEL, 1); + + REG_SETF(FPLL, PLLD_CTRL_REG, PFD_CP_EN, 0); + REG_SETF(FPLL, PLLD_CTRL_REG, CLKOUT_EN, 0); + REG_SETF(FPLL, PLLD_CTRL_REG, VCO_EN, 0); + } + else if ((freq_type == FPLL_98M) || (freq_type == FPLL_90M)) + { + #if 1 + + // REG_SETF(FPLL, PLLD_CTRL_REG, FBDIV_SEL,fpll_mode); + REG_SETF(FPLL, PLLD_IRQ_MASK_REG, MIRQ_PLL_LOCK, 1); + REG_SETF(FPLL, PLLD_IRQ_MASK_REG, MIRQ_PLL_LOST_LOCK, 1); + + REG_SETF(FPLL, PLLD_CONFIG_REG, INDIV, 5); + REG_SETF(FPLL, PLLD_CONFIG_REG, OUTDIV, 3); + REG_SETF(FPLL, PLLD_CONFIG_REG, BIAS_HOLD, 0); + if (fpll_mode == FPLL_MODE_NO_IRM) + { + if (freq_type == FPLL_98M) + { + // DIV = 98.304*2 / 5 (freq after input divider)=39.3216, INT = int(DIV) = 39 (0x27), FRAC = (DIV-INT)*2^13 = 2634 (0x0A4A) + REG_SETF(FPLL, PLLD_FBDIV_REG, FBDIV, (0x27 << 13) | (0xA << 8) | (0x4A)); + } + else if (freq_type == FPLL_90M) + { + // DIV = 36.12672, INT = 36 (0x24), FRAC = 1038 (0x040E) + REG_SETF(FPLL, PLLD_FBDIV_REG, FBDIV, (0x24 << 13) | (0x4 << 8) | (0x0E)); + } + } + + REG_SETF(FPLL, PLLD_CTRL_REG, BYPASS_SEL, 1); + REG_SETF(FPLL, PLLD_CTRL_REG, VCO_EN, 1); + REG_SETF(FPLL, PLLD_CTRL_REG, FPLL_EN, 1); + REG_SETF(FPLL, PLLD_CTRL_REG, PFD_CP_EN, 1); + REG_SETF(FPLL, PLLD_CTRL_REG, CLKOUT_EN, 1); + + // Wait 5us +// for(i=0; i<50; i++) {;} +// REG_SETF(FPLL, PLLD_CONFIG_REG, BIAS_HOLD, 1); + + // Wait for flag_lock to go HIGH + while (REG_GETF(FPLL, PLLD_STATUS_REG, STA_PLL_LOCK) == 0) + { + ; + } + + REG_SETF(FPLL, PLLD_CTRL_REG, CLKOUT_EN, 1); + +// jason230810 REG_SETF(FPLL, PLLD_CTRL_REG, BYPASS_SEL, 0); + #else + +// LDO_ENABLE_REG.LDO_EN_LDO_PLL1 = 1 // DPLL & FPLL LDO EN +// XTAL40M_CTRL_REG.XTAL40M_EN = 1 // xtal 40M +// XTAL40M_CTRL_REG.XTAL40M_FPLL_EN =1 // xtal 40M (FPLL path) +// GPIO_CLK_SEL_REG.FPLL98M_OUTPUT_EN =1 // Pad dedicated setting +// PLLD_FBDIV_REG.FBDIV = 0x4EA0E // 39.3142 +// PLLD_CTRL_REG = 0x3E // FPLL EN +// PLLD_CONFIG_REG.OUTDIV = 1 // vco/2 + + if (fpll_mode == FPLL_MODE_NO_IRM) + { + if (freq_type == FPLL_98M) + { + REG_SETF(FPLL, PLLD_FBDIV_REG, FBDIV, 0x4ea4a); + } + else if (freq_type == FPLL_90M) + { + REG_SETF(FPLL, PLLD_FBDIV_REG, FBDIV, 0x4840e); + } + } + + FPLL->PLLD_CTRL_REG = 0x3e; + REG_SETF(FPLL, PLLD_CONFIG_REG, OUTDIV, 3); + while (REG_GETF(FPLL, PLLD_STATUS_REG, STA_PLL_LOCK) == 0) + { + ; + } + #endif + } + return; +#endif +} + +/** + * \brief Deactivate a System clock. + * + * \param[in] clk The clock to deactivate. + */ +__STATIC_INLINE void hw_clk_disable_fpll (sys_clk_is_t clk) +{ + switch (clk) + { + case SYS_CLK_IS_XTAL40M: + { + hw_clk_disable_xtal40m(); + + return; + } + + default: + + /* An invalid clock is requested */ + BSP_CHECK_DEBUG(0); + } +} + +/** + * \brief Configure XTAL40M. + */ +void hw_clk_xtalm_configure(void); + +/** + * \brief Perform XTAL40M RCOSC amplitude temperature compensation. + */ +void hw_clk_xtalm_compensate_amp(void); + +/** + * \brief Update XTAL40M Ready IRQ counter. + * + * \return The difference between the new and the old XTAL40M Ready IRQ counter + * in cycles of 32KHz clocks. + */ +int16_t hw_clk_xtalm_update_rdy_cnt(void); + +/** + * \brief Enable PLL + * + * \details + */ +void pll_on(void); + +/** + * \brief Disable PLL + * + * \details + */ +void pll_off(void); + +/** + * \brief Set Low Power clock. + * + * \param[in] mode The new low power clock. + */ +__STATIC_INLINE void hw_clk_set_lpclk (lp_clk_is_t mode) +{ + GLOBAL_INT_DISABLE(); + switch (mode) + { + case LP_CLK_IS_RCX: + { + hw_clk_lp_set_rcx(); + break; + } + + case LP_CLK_IS_SWCLK: + { + hw_clk_lp_set_swclk(); + break; + } + + case LP_CLK_IS_XTAL32K: + { + hw_clk_lp_set_xtal32k(); + break; + } + + default: + { + BSP_CHECK_DEBUG(0); + break; + } + } + + GLOBAL_INT_RESTORE(); +} + +/** + * \brief Activate a Low Power clock. + * + * \param[in] clk The clock to activate. + */ +__STATIC_INLINE void hw_clk_enable_lpclk (lp_clk_is_t clk) +{ + switch (clk) + { + case LP_CLK_IS_RCX: + { + hw_clk_enable_rcx(); + + return; + } + + case LP_CLK_IS_XTAL32K: + { + hw_clk_enable_xtal32k(); + + return; + } + + case LP_CLK_IS_SWCLK: + { + // Nothing to do for SWCLK LP clock + return; + } + + default: + + /* An invalid clock is requested */ + BSP_CHECK_DEBUG(0); + } +} + +/** + * \brief Deactivate a Low Power clock. + * + * \param[in] clk The clock to deactivate. + */ +__STATIC_INLINE void hw_clk_disable_lpclk (lp_clk_is_t clk) +{ + switch (clk) + { + case LP_CLK_IS_RCX: + { + hw_clk_disable_rcx(); + + return; + } + + case LP_CLK_IS_XTAL32K: + { + hw_clk_disable_xtal32k(); + + return; + } + + case LP_CLK_IS_SWCLK: + { + // Nothing to do for SWCLK LP clock + return; + } + + default: + + /* An invalid clock is requested */ + BSP_CHECK_DEBUG(0); + } +} + +/** + * \brief Enable clock for specific UART channel + * + * \param[in] channel UART channel to activate clock + */ +__STATIC_INLINE void hw_clk_enable_uart_w_clk (uint8_t channel) +{ + CRG_TOP->CLK_AMBA_REG_b.PERI_CLK_ENABLE = 1; + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + switch (channel) + { + case 0: + { + CRG_PER->CLK_COM_REG_b.UART_ENABLE = 1; + break; + } + + case 1: + { + CRG_PER->CLK_COM_REG_b.UART2_ENABLE = 1; + break; + } + + case 2: + { + CRG_PER->CLK_COM_REG_b.UART3_ENABLE = 1; + break; + } + } + + FSP_CRITICAL_SECTION_EXIT; +} + +/** + * \brief Disable clock for specific UART channel + * + * \param[in] channel UART channel to deactivate clock + */ +__STATIC_INLINE void hw_clk_disable_uart_w_clk (uint8_t channel) +{ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + switch (channel) + { + case 0: + { + CRG_PER->CLK_COM_REG_b.UART_ENABLE = 0; + break; + } + + case 1: + { + CRG_PER->CLK_COM_REG_b.UART2_ENABLE = 0; + break; + } + + case 2: + { + CRG_PER->CLK_COM_REG_b.UART3_ENABLE = 0; + break; + } + } + + FSP_CRITICAL_SECTION_EXIT; +} + +/*******************************************************************************************************************//** + * @brief Enable the low-power crystal oscillator. + * + * This function enables the low-power 32kHz crystal oscillator by setting the XTAL_BAT_EN bit in the RTC register. + **********************************************************************************************************************/ +__STATIC_INLINE void bsp_prv_lpclk_xtal_on () +{ + RTC->CLK_XTAL32K_REG_b.XTAL_BAT_EN = 1; +} + +/*******************************************************************************************************************//** + * @brief Enable the low-power oscillator. + * + * This function enables the low-power internal RC oscillator by setting the PDB_OSC_EN bit in the RTC register. + **********************************************************************************************************************/ +__STATIC_INLINE void bsp_prv_lpclk_osc_on () +{ + RTC->CLK_XTAL32K_REG_b.PDB_OSC_EN = 1; +} + +lp_clk_is_t bsp_prv_lpclk_get(); +fsp_err_t bsp_prv_lpclk_select(lp_clk_is_t type); +void bsp_prv_rtc_mirror_init(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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.c new file mode 100644 index 000000000000..32c3eb575473 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.c @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#ifdef UNIT_TESTING + #include "fake_regs.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#define ASCII_3095 (('3' << 24) | ('0' << 16) | ('9' << 8) | '5') /* 0x33303935 = '3' '0' '9' '5' */ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +static uint32_t bsp_prv_chip_revision BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); + +/*******************************************************************************************************************//** + * Check whether we are running on RA6W1 revision A. + * + * @retval true if we are running on RA6W1 revision A, false otherwise. + **********************************************************************************************************************/ +bool bsp_is_chip_revision_a (void) +{ + return bsp_prv_chip_revision == 0; +} + +/*******************************************************************************************************************//** + * Initialize chip revision and check whether we are running on RA6W1 chip. + * + * @retval true if we are running on RA6W1 chip, false otherwise. + **********************************************************************************************************************/ +bool bsp_device_info_init (void) +{ + union + { + uint8_t arr[4]; + uint32_t value; + } device_chip_id; + + /* Initial chip revision is 'A'. Subtract 'A' to get numeric value. */ + bsp_prv_chip_revision = CHIP_VERSION->CHIP_REVISION_REG_b.CHIP_REVISION - 'A'; + + device_chip_id.arr[3] = CHIP_VERSION->CHIP_ID1_REG_b.CHIP_ID1; + device_chip_id.arr[2] = CHIP_VERSION->CHIP_ID2_REG_b.CHIP_ID2; + device_chip_id.arr[1] = CHIP_VERSION->CHIP_ID3_REG_b.CHIP_ID3; + device_chip_id.arr[0] = CHIP_VERSION->CHIP_ID4_REG_b.CHIP_ID4; + + return device_chip_id.value == ASCII_3095; +} + +/** @} (end addtogroup BSP_MCU_PRV) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.h new file mode 100644 index 000000000000..1bf0682cd008 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_device_info.h @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_DEVICE_INFO_RA6W1_H +#define BSP_DEVICE_INFO_RA6W1_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include +#include "bsp_api.h" +#include "bsp_freeze.h" +#include "bsp_dmac.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 (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +bool bsp_is_chip_revision_a(void); +bool bsp_device_info_init(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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dmac.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dmac.h new file mode 100644 index 000000000000..a6f1ac8a536c --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dmac.h @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_DMAC_H +#define BSP_DMAC_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 + **********************************************************************************************************************/ + +/** Channel request trigger */ +typedef enum e_bsp_dmac_trig_ra6w1 +{ + BSP_DMAC_TRIG_SPI1_RX = 0x0, + BSP_DMAC_TRIG_SPI1_TX = 0x1, + BSP_DMAC_TRIG_SPI2_RX = 0x2, + BSP_DMAC_TRIG_SPI2_TX = 0x3, + BSP_DMAC_TRIG_UART1_RX = 0x4, + BSP_DMAC_TRIG_UART1_TX = 0x5, + BSP_DMAC_TRIG_UART2_RX = 0x6, + BSP_DMAC_TRIG_UART2_TX = 0x7, + BSP_DMAC_TRIG_UART3_RX = 0x8, + BSP_DMAC_TRIG_UART3_TX = 0x9, + BSP_DMAC_TRIG_I2C1_RX = 0xA, + BSP_DMAC_TRIG_I2C1_TX = 0xB, + BSP_DMAC_TRIG_I2C2_RX = 0xC, + BSP_DMAC_TRIG_I2C2_TX = 0xD, + BSP_DMAC_TRIG_AUXADC0 = 0xE, + BSP_DMAC_TRIG_AUXADC1 = 0xF, + BSP_DMAC_TRIG_AUXADC2 = 0x10, + BSP_DMAC_TRIG_AUXADC3 = 0x11, + BSP_DMAC_TRIG_SRC_IN = 0x12, + BSP_DMAC_TRIG_SRC_OUT = 0x13, + BSP_DMAC_TRIG_DAI_TX = 0x14, + BSP_DMAC_TRIG_DAI_RX = 0x15, + BSP_DMAC_TRIG_NONE = 0x1F +} bsp_dmac_trig_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************/ /** + * Check whether specified DMA trigger is edge sensitive or not. + * + * @param[in] trigger DMA trigger. + * + * @retval true Trigger is (positive) edge-sensitive. + * @retval false Trigger is level-sensitive. + **********************************************************************************************************************/ +__STATIC_INLINE bool R_BSP_DMAC_IsEdgeSensitiveTrigger (bsp_dmac_trig_t trigger) +{ + FSP_PARAMETER_NOT_USED(trigger); + + return false; +} + +/*******************************************************************************************************************/ /** + * Enable interrupt generation by specified DMA channel. + * + * @param[in] channel DMA channel. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_DMAC_ChannelInterruptsEnable (uint8_t channel) +{ + FSP_CRITICAL_SECTION_DEFINE; + + FSP_CRITICAL_SECTION_ENTER; + DMA->DMA_INT_MASK_REG |= 1U << channel; + FSP_CRITICAL_SECTION_EXIT; +} + +/*******************************************************************************************************************/ /** + * Disable interrupt generation by specified DMA channel. + * + * @param[in] channel DMA channel. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_DMAC_ChannelInterruptsDisable (uint8_t channel) +{ + FSP_CRITICAL_SECTION_DEFINE; + + FSP_CRITICAL_SECTION_ENTER; + DMA->DMA_INT_MASK_REG &= ~(1U << channel); + FSP_CRITICAL_SECTION_EXIT; +} + +/** @} (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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.c new file mode 100644 index 000000000000..2451883fcf16 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.c @@ -0,0 +1,552 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * + * Includes + **********************************************************************************************************************/ +#include +#include + +#include "bsp_dump_mem.h" +#include "sdk_defs.h" + +#if CFG_WIFI +#include "rm_wifi_config.h" +#endif /* CFG_WIFI */ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +#define COLOR_LEN 10 +#define MAX_FAULT 5 + +#if !defined(ARRAY_SIZE) + #define ARRAY_SIZE(x) (long) (sizeof(x) / sizeof(x)[0]) +#endif + +/* Retention Macro definitions */ +#define OOPS_STACK_SIZE 97 +#define OOPS_STACK_STRING_CODE 0XABBADEAD +#define OOPS_STACK_STRING_CHAR_SIZE 80 +#define OOPS_STACK_STRING_UINT_SIZE (OOPS_STACK_STRING_CHAR_SIZE / sizeof(uint32_t)) +#define OOPS_THREAD_SIZE 43 +#define OOPS_FAIL_MARK 0xCAFEBABA +#define OOPS_INIT_MARK 0xDEADBEEF +#define OOPS_STACK_PICS 19 +#define OOPS_STACK_SICS (7 + 6) + +typedef struct st_oops_tag_info +{ + uint32_t tag; + + /* Application Mark */ + uint16_t mark; + + /* Dump Length */ + uint16_t length; + + /* Fault type */ + uint32_t mode; + + /* RTC Time Stamp */ + uint32_t rtc[2]; +} oops_tag_type_t; + +typedef struct st_monitor_info +{ + uint32_t fault_PC; + uint8_t fault_CNT; + uint8_t autoRebootStopFlag; + uint8_t reserved_26; + uint8_t reserved_27; +} monitor_info_t; + +oops_tag_type_t g_bsp_mem_dump_oops_tag BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); + +uint32_t g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_SIZE + 1 + OOPS_STACK_STRING_UINT_SIZE] BSP_PLACE_IN_SECTION( + BSP_SECTION_NOINIT); +uint32_t g_bsp_mem_dump_oops_thread_ctxt[OOPS_THREAD_SIZE] BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); +volatile monitor_info_t g_bsp_mem_dump_continuous_fault_info BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); + +volatile monitor_info_t * g_bsp_mem_dump_monitor_info_ptr = &g_bsp_mem_dump_continuous_fault_info; + +char g_bsp_mem_dump_halt_color[COLOR_LEN]; +char g_bsp_mem_dump_halt_color[COLOR_LEN]; +char g_bsp_mem_dump_clear_color[COLOR_LEN]; + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +static void bsp_save_assert_string(const char * format, ...); +static void bsp_set_stop_auto_reboot(void); +static void bsp_clear_stop_auto_reboot(void); +static void bsp_increase_fault_count(void); +static void bsp_check_fault_pc(uint32_t faultPC); +static void bsp_display_oops_dump_thread_info(void); +static void bsp_print_fault_pc(void); + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +BSP_WEAK_REFERENCE uint16_t BSP_SaveOopsDumpThreadInfo (void) // freeRTOS port +{ + uint16_t info_length = 0; + + return info_length; +} + +/*******************************************************************************************************************//** + * Default implementation of assert for GCC. + **********************************************************************************************************************/ + +void __assert_func (const char * file, int line, const char * func, const char * expr) +{ + const char * filename = strrchr(file, '/') ? strrchr(file, '/') + 1 : file; + + bsp_save_assert_string("%s:%d ASSERT(%s) @%s\n", filename, line, expr, func); + + __BKPT(0); + while (1) + { + /* Do nothing. */ + } +} + +static void bsp_set_stop_auto_reboot (void) +{ + g_bsp_mem_dump_monitor_info_ptr->autoRebootStopFlag = 1; +} + +static void bsp_clear_stop_auto_reboot (void) +{ + g_bsp_mem_dump_monitor_info_ptr->autoRebootStopFlag = 0; +} + +static void bsp_increase_fault_count (void) +{ + ++g_bsp_mem_dump_monitor_info_ptr->fault_CNT; +} + +static void bsp_check_fault_pc (uint32_t faultPC) +{ + bsp_increase_fault_count(); + + if ((BSP_GetFaultCount() >= MAX_FAULT) && (BSP_GetFaultPc() == faultPC)) + { + BSP_SetFaultCount(0); + BSP_SetFaultPc(0); + bsp_set_stop_auto_reboot(); + + return; + } + + if (BSP_GetFaultPc() != faultPC) + { + BSP_SetFaultCount(1); + BSP_SetFaultPc(faultPC); + } + + bsp_clear_stop_auto_reboot(); +} + +static void bsp_save_assert_string (const char * format, ...) +{ + va_list args; + va_start(args, format); + + // Safely format into the global buffer + vsnprintf((char *) (&g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_SIZE + 1]), OOPS_STACK_STRING_CHAR_SIZE, format, + args); + + va_end(args); + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_SIZE] = OOPS_STACK_STRING_CODE; +} + +void BSP_SaveOopsDump (uint32_t * mspfile, uint32_t * pspfile, uint32_t mode) +{ + uint32_t i, dumpaddr; + + memset(g_bsp_mem_dump_oops_stack_ctxt, 0, sizeof(int) * OOPS_STACK_SIZE); + + /* R0-R3 */ + for (i = 0; i < 4; i++) + { + g_bsp_mem_dump_oops_stack_ctxt[i] = mspfile[i]; + } + + /* R4-R11 */ + for (i = 4; i < 12; i++) + { + g_bsp_mem_dump_oops_stack_ctxt[i] = pspfile[i - 4]; + } + + /* R12 */ + g_bsp_mem_dump_oops_stack_ctxt[12] = mspfile[4]; + + /* SP */ + g_bsp_mem_dump_oops_stack_ctxt[13] = (uint32_t) (&(mspfile[8])); + + /* LR */ + g_bsp_mem_dump_oops_stack_ctxt[14] = mspfile[5]; + + /* PC */ + g_bsp_mem_dump_oops_stack_ctxt[15] = mspfile[6]; + + bsp_check_fault_pc(mspfile[6]); + + /* PSR */ + g_bsp_mem_dump_oops_stack_ctxt[16] = mspfile[7]; + + /* EXC_RETURN */ + g_bsp_mem_dump_oops_stack_ctxt[17] = pspfile[8]; + + dumpaddr = g_bsp_mem_dump_oops_stack_ctxt[13]; + + for (i = 0; i < 48; i++) + { + if (dumpaddr <= (uint32_t) (&__ddsc_RAM_END)) + { + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + i] = *((uint32_t *) (dumpaddr)); + dumpaddr = dumpaddr + sizeof(uint32_t); + } + else + { + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + i] = 0; + break; + } + } + + g_bsp_mem_dump_oops_stack_ctxt[18] = i; + + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + 48 + 0] = SCB->SHCSR; + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + 48 + 1] = SCB->CFSR; + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + 48 + 2] = SCB->HFSR; + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + 48 + 3] = SCB->DFSR; + + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + 48 + 4] = SCB->MMFAR; + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + 48 + 5] = SCB->BFAR; + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + 48 + 6] = SCB->AFSR; + + g_bsp_mem_dump_oops_tag.length = sizeof(uint32_t) * (OOPS_STACK_PICS + 48 + OOPS_STACK_SICS); + g_bsp_mem_dump_oops_tag.length += BSP_SaveOopsDumpThreadInfo(); + g_bsp_mem_dump_oops_tag.mode = mode; + + if (g_bsp_mem_dump_oops_tag.tag != OOPS_INIT_MARK) + { + g_bsp_mem_dump_oops_tag.tag = OOPS_FAIL_MARK; + BSP_DisplayOopsDump(NULL, NULL, NULL); + } + else + { + g_bsp_mem_dump_oops_tag.tag = OOPS_FAIL_MARK; + + SWRESET; + } + + for (i = 0; i < 0x10000; i++) + { + __asm__ volatile ( "nop \n"); + } +} + +void BSP_InitOopsData (void) +{ + memset(&g_bsp_mem_dump_oops_tag, 0, sizeof(oops_tag_type_t)); + memset(g_bsp_mem_dump_oops_stack_ctxt, 0, sizeof(int) * OOPS_STACK_SIZE); + g_bsp_mem_dump_oops_tag.tag = OOPS_INIT_MARK; +} + +uint32_t BSP_GetFaultPc (void) +{ + return g_bsp_mem_dump_monitor_info_ptr->fault_PC; +} + +void BSP_SetFaultPc (uint32_t pc) +{ + g_bsp_mem_dump_monitor_info_ptr->fault_PC = pc; +} + +uint8_t BSP_GetFaultCount (void) +{ + return g_bsp_mem_dump_monitor_info_ptr->fault_CNT; +} + +void BSP_SetFaultCount (uint8_t cnt) +{ + g_bsp_mem_dump_monitor_info_ptr->fault_CNT = cnt; +} + +#ifndef TEST_HAS_OWN_EXCEPTION_HDL +void HardFault_HandlerC (unsigned long * exception_args) +{ + (void) exception_args; + + __asm("tst lr, #4 \n" + "ite eq \n" + "mrseq r0, msp \n" + "mrsne r0, psp \n" + "push {r4-r11,lr} \n" + "mov r1, sp \n" + "mov r2, #0 \n" + "bl BSP_SaveOopsDump \n"); + while (1) + { + } +} + +void MemManage_Handler (void) +{ + __asm("tst lr, #4 \n" + "ite eq \n" + "mrseq r0, msp \n" + "mrsne r0, psp \n" + "push {r4-r11,lr} \n" + "mov r1, sp \n" + "mov r2, #1 \n" + "bl BSP_SaveOopsDump \n"); + while (1) + { + } +} + +void BusFault_Handler (void) +{ + __asm("tst lr, #4 \n" + "ite eq \n" + "mrseq r0, msp \n" + "mrsne r0, psp \n" + "push {r4-r11,lr} \n" + "mov r1, sp \n" + "mov r2, #2 \n" + "bl BSP_SaveOopsDump \n"); + while (1) + { + } +} + +void UsageFault_Handler (void) +{ + __asm("tst lr, #4 \n" + "ite eq \n" + "mrseq r0, msp \n" + "mrsne r0, psp \n" + "push {r4-r11,lr} \n" + "mov r1, sp \n" + "mov r2, #3 \n" + "bl BSP_SaveOopsDump \n"); + while (1) + { + } +} + +#endif + +static void bsp_print_fault_pc (void) +{ + printf(g_bsp_mem_dump_halt_color); + printf("\n Stop auto--reboot (Fault_count:%d Fault_PC:0x%lx) \n", BSP_GetFaultCount(), BSP_GetFaultPc()); + printf(g_bsp_mem_dump_clear_color); +} + +static void bsp_display_oops_dump_thread_info (void) +{ + uint32_t i, dumpaddr; + + printf("\n\n Current Thread\n"); + + /* TaskName */ + if (strlen((char *) &g_bsp_mem_dump_oops_thread_ctxt[0]) > 0) + { + printf(g_bsp_mem_dump_halt_color); + printf("\t Thread: %s\r\n", (char *) &g_bsp_mem_dump_oops_thread_ctxt[0]); + printf(g_bsp_mem_dump_clear_color); + printf("\t stack ptr : 0x%lx\n", g_bsp_mem_dump_oops_thread_ctxt[5]); + printf("\t stack base: 0x%lx\n", g_bsp_mem_dump_oops_thread_ctxt[6]); + printf("\t stack end : 0x%lx\n", g_bsp_mem_dump_oops_thread_ctxt[7]); + printf("\t stack high: 0x%lx\n", g_bsp_mem_dump_oops_thread_ctxt[8]); + printf("\t max usage : 0x%lx\n", g_bsp_mem_dump_oops_thread_ctxt[7] - g_bsp_mem_dump_oops_thread_ctxt[5] + 1); + printf("\t suspend : %08lx\n", g_bsp_mem_dump_oops_thread_ctxt[9]); + + printf("\n Thread Stack (%ld)", g_bsp_mem_dump_oops_thread_ctxt[10]); + + dumpaddr = ((uint32_t) &(g_bsp_mem_dump_oops_thread_ctxt[11])); + + for (i = 0; i < g_bsp_mem_dump_oops_thread_ctxt[10]; i++) + { + if (dumpaddr <= (uint32_t) (&__ddsc_RAM_END)) + { + if ((i % 8) == 0) + { + printf("\n [0x%08lx] : ", (g_bsp_mem_dump_oops_thread_ctxt[5] + (i * sizeof(uint32_t)))); + } + + printf("%08lX ", *((uint32_t *) dumpaddr)); + + dumpaddr = dumpaddr + sizeof(uint32_t); + } + else + { + break; + } + } + } +} + +uint32_t * BSP_GetOopsThreadPtr (void) +{ + return &g_bsp_mem_dump_oops_thread_ctxt[0]; +} + +uint16_t BSP_GetOopsThreadSize (void) +{ + return (uint16_t) (sizeof(uint32_t) * OOPS_THREAD_SIZE); +} + +void BSP_DisplayOopsDump (char * halt_color_ptr, char * bold_color_ptr, char * clear_color_ptr) +{ + const char * exception_title[] = {"Hard", "MPU", "BUS", "Usage", "Stack", "Wdog"}; + const char * reg_msg_format = "\t%s :%08x%s"; + const char * regdelimiter[] = + { + "R0 ", "R1 ", + "R2 ", "R3 ","R4 ", "R5 ", "R6 ", "R7 ", + "R8 ", "R9 ","R10", "R11", "R12", "SP ", + "LR ", "PC ","PSR", "EXC" + }; + const char * faultdelimiter[] = + { + "SHCSR", "CFSR ", "HFSR ", "DFSR ", "MMFAR", "BFAR ", "AFSR " + }; + + uint32_t i, dumpaddr; + + if (halt_color_ptr) + { + strncpy(g_bsp_mem_dump_halt_color, halt_color_ptr, COLOR_LEN - 1); + g_bsp_mem_dump_halt_color[COLOR_LEN - 1] = '\0'; + } + else + { + g_bsp_mem_dump_halt_color[0] = '\0'; + } + + if (bold_color_ptr) + { + strncpy(g_bsp_mem_dump_halt_color, bold_color_ptr, COLOR_LEN - 1); + g_bsp_mem_dump_halt_color[COLOR_LEN - 1] = '\0'; + } + else + { + g_bsp_mem_dump_halt_color[0] = '\0'; + } + + if (clear_color_ptr) + { + strncpy(g_bsp_mem_dump_clear_color, clear_color_ptr, COLOR_LEN - 1); + g_bsp_mem_dump_clear_color[COLOR_LEN - 1] = '\0'; + } + else + { + g_bsp_mem_dump_clear_color[0] = '\0'; + } + +#if WIFI_CFG_WATCHDOG_SERVICE_ENABLE + extern volatile uint32_t g_watchdog_service_w_nmi_event_data[9]; + + if (0xDEADBEEFU == g_watchdog_service_w_nmi_event_data[0]) + { + printf(g_bsp_mem_dump_halt_color); + printf("\n [%s Fault Exception]\n", exception_title[5]); + printf(g_bsp_mem_dump_clear_color); + printf("\n Register-Dump\n"); + printf("\tR0 :%08lX, R1 :%08lX, R2 :%08lX, R3 :%08lX\n", + g_watchdog_service_w_nmi_event_data[1], + g_watchdog_service_w_nmi_event_data[2], + g_watchdog_service_w_nmi_event_data[3], + g_watchdog_service_w_nmi_event_data[4]); + + printf("\tR12 :%08lX, LR :%08lX, PC :%08lX, PSR :%08lX\n", + g_watchdog_service_w_nmi_event_data[5], + g_watchdog_service_w_nmi_event_data[6], + g_watchdog_service_w_nmi_event_data[7], + g_watchdog_service_w_nmi_event_data[8]); + + bsp_display_oops_dump_thread_info(); + printf("\n"); + + g_watchdog_service_w_nmi_event_data[0] = 0U; + + return; + } +#endif + + if (g_bsp_mem_dump_oops_tag.tag == OOPS_FAIL_MARK) + { + g_bsp_mem_dump_oops_tag.tag = 0; + } + else + { + return; + } + + printf(g_bsp_mem_dump_halt_color); + printf("\n [%s Fault Exception]\n", exception_title[g_bsp_mem_dump_oops_tag.mode]); + printf(g_bsp_mem_dump_clear_color); + + printf("\n Register-Dump\n"); + for (i = 0; i < ARRAY_SIZE(regdelimiter); i++) + { + printf(reg_msg_format, regdelimiter[i], g_bsp_mem_dump_oops_stack_ctxt[i], ((i % 4 == 3) ? "\n" : ",")); + } + + printf("\n Fault Status\n"); + for (i = 0; i < ARRAY_SIZE(faultdelimiter); i++) + { + printf(reg_msg_format, faultdelimiter[i], g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS + 48 + i], + ((i % 3 == 2) ? "\r\n" : ",")); + } + + printf("\n Stack-Dump (%ld)", g_bsp_mem_dump_oops_stack_ctxt[18]); + dumpaddr = ((uint32_t) &(g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_PICS])); + + for (i = 0; i < g_bsp_mem_dump_oops_stack_ctxt[18]; i++) + { + if (dumpaddr <= (uint32_t) (&__ddsc_RAM_END)) + { + if ((i % 8) == 0) + { + printf("\r\n [0x%08lx] : " + , + (g_bsp_mem_dump_oops_stack_ctxt[13] + (i * sizeof(uint32_t)))); + } + + printf("%08lX ", *((uint32_t *) dumpaddr)); + + dumpaddr = dumpaddr + sizeof(uint32_t); + } + else + { + break; + } + } + + /* Dump thread info */ + bsp_display_oops_dump_thread_info(); + + printf("\n"); + bsp_print_fault_pc(); + printf("\n"); + + if (OOPS_STACK_STRING_CODE == g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_SIZE]) + { + printf("\n Assert at\n"); + printf("\t%s\n", (char *) (&g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_SIZE + 1])); + g_bsp_mem_dump_oops_stack_ctxt[OOPS_STACK_SIZE] = 0; + } +} diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.h new file mode 100644 index 000000000000..a57faec54e94 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_dump_mem.h @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_DUMP_MEM_H +#define BSP_DUMP_MEM_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/* Retention section definitions */ +extern uint32_t __ddsc_RAM_END; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +uint32_t BSP_GetFaultPc(void); +void BSP_SetFaultPc(uint32_t pc); +uint8_t BSP_GetFaultCount(void); +void BSP_SetFaultCount(uint8_t cnt); +void BSP_SaveOopsDump(uint32_t * mspfile, uint32_t * pspfile, uint32_t mode); +uint16_t BSP_SaveOopsDumpThreadInfo(void); +void BSP_InitOopsData(void); +void BSP_DisplayOopsDump(char * halt_color_ptr, char * bold_color_ptr, char * clear_color_ptr); +uint32_t * BSP_GetOopsThreadPtr(void); +uint16_t BSP_GetOopsThreadSize(void); + +#ifndef TEST_HAS_OWN_EXCEPTION_HDL +void HardFault_HandlerC(unsigned long * exception_args); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); + +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_feature.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_feature.h new file mode 100644 index 000000000000..05306b0407c3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_feature.h @@ -0,0 +1,171 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_FEATURE_H +#define BSP_FEATURE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* TODO remove the following code when we finally drop AA chip revision: */ +#ifndef DEVICE_REV_A + #define DEVICE_REV_A ((((1 << 0) << 8) & 0x00000F00)) +#endif +#ifndef DEVICE_REV_B + #define DEVICE_REV_B ((((1 << 1) << 8) & 0x00000F00)) +#endif +#ifndef BSP_DEVICE_REVISION + #define BSP_DEVICE_REVISION DEVICE_REV_B +#endif + +#define BSP_FEATURE_BSP_HAS_ICU (0U) + +/* + * \brief TCS - Trimmed Configuration Script + * + * Enabling this feature the system will always use the trimmed configuration values + * stored by the TCS in OTP + */ +#define BSP_FEATURE_BSP_USE_TCS (1U) + +// TIN-TODO Is this a BSP_FEATURE ? +#define BSP_FEATURE_BLOCK_MEDIA_SPI_W_BLOCK_SIZE (4096U) + +#define BSP_FEATURE_ADC_W_MAX_NUM_CHANNELS (4U) + +#define BSP_FEATURE_CGC_HAS_HCLK_DIV (1U) +#define BSP_FEATURE_CGC_HAS_PCLK_DIV (0U) +#define BSP_FEATURE_CGC_HAS_QCLK_DIV (0U) +#define BSP_FEATURE_CGC_HAS_LP_CLOCK (0U) +#define BSP_FEATURE_CGC_HAS_RCHS (0U) +#define BSP_FEATURE_CGC_HAS_RCLP (0U) +#define BSP_FEATURE_CGC_HAS_RCX (1U) +#define BSP_FEATURE_CGC_HAS_RCX_CONTROL (0U) +#define BSP_FEATURE_CGC_HAS_XTALM_SWITCH (0U) + +// Crypto Features +#define BSP_FEATURE_CRYPTO_HAS_AES (1) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_ECC (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_HASH (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_CC312 (1) +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (1) + +#define BSP_FEATURE_DMAC_W (1) +#define BSP_FEATURE_DMAC_HAS_SHARED_IRQ (1U) +#define BSP_FEATURE_DMAC_MAX_CHANNEL (16U) + +#define BSP_FEATURE_ELC_MISSING (1U) + +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (0) +#define BSP_FEATURE_FLASH_HP_VERSION (0) +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) +#define BSP_FEATURE_FLASH_LP_VERSION (0) +#define BSP_FEATURE_FLASH_IS_INTERNAL (0) + +#define BSP_FEATURE_I2C_VERSION (1) +#define BSP_FEATURE_I2C_VALID_CHANNEL_MASK (0x06U) +#define BSP_FEATURE_I2C_HAS_DEDICATED_IRQS (0) +#define BSP_FEATURE_I2C_HAS_SEPARATE_PD (0) +#define BSP_FEATURE_I2C_IRQ_TRIGGER_EDGE (1) + +// I2S Features +#define BSP_FEATURE_I2S_FIFO_NUM_STAGES (4U) +#define BSP_FEATURE_I2S_VALID_CHANNEL_MASK (1U) + +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0x3FFFFFFFU) + +#define BSP_FEATURE_IO_HAS_LATCHING (0U) +#define BSP_FEATURE_IO_PORT_COUNT (2U) +#define BSP_FEATURE_IO_PORT0_GPIO_COUNT (14U) +#define BSP_FEATURE_IO_PORT1_GPIO_COUNT (18U) +#define BSP_FEATURE_IO_PORT2_GPIO_COUNT (0U) + +/* LPM_B */ +#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY (0) // Feature not available on this MCU +#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (0U) +#define BSP_FEATURE_LPM_DPSIEGR_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_LPM_DPSIER_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_LPM_HAS_DEEP_SLEEP (0U) +#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (0U) +#define BSP_FEATURE_LPM_HAS_DPSBYCR_DEEPCUT (0U) +#define BSP_FEATURE_LPM_HAS_DPSBYCR_DPSBY (0U) +#define BSP_FEATURE_LPM_HAS_DPSBYCR_SRKEEP (0U) +#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 (0U) +#define BSP_FEATURE_LPM_HAS_SNOOZE (0U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0) // Feature not available on this MCU +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0) // Feature not available on this MCU +#define BSP_FEATURE_LPM_HAS_STCONR (0) // Feature not available on this MCU +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x0000009FU) +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x738200FFU) +#define BSP_FEATURE_LPM_STANDBY_MOCO_REQUIRED (0U) + +/* OSPI_W + * RA6W1 has only one channel for OSPI_W + */ +#define BSP_FEATURE_OSPI_W_DEVICE_0_START_ADDRESS (0x2A000000U) +#define BSP_FEATURE_OSPI_W_DEVICE_1_START_ADDRESS (0x0U) /* not supported */ +#define BSP_FEATURE_FLASH_DATA_FLASH_START (BSP_FEATURE_OSPI_W_DEVICE_0_START_ADDRESS | 0x00300000U) + +/* QSPI_W */ +#define BSP_FEATURE_QSPI_DEVICE_START_ADDRESS (0x24000000U) +#define BSP_FEATURE_QSPI_DEVICE_START_ADDRESS_DATA (0x24000000U) +#define BSP_FEATURE_QSPI_MAX_CHANNEL (1U) +#define BSP_FEATURE_QSPI_HAS_DDR_SUPPORT (0U) + +#define BSP_FEATURE_SPI_VALID_CHANNEL_MASK (0x06U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) + +#define BSP_FEATURE_TCS_APPLY (0U) +#define BSP_FEATURE_TCS_SYS_RAM (1U) + +#define BSP_FEATURE_TIM_W_VALID_CHANNEL_MASK (0x1FEU) +#define BSP_FEATURE_TIM_W_NUM_OF_CCM_CHANNELS (0x4U) +#define BSP_FEATURE_TIM_W_HAS_IRQ_PER_CAPTURE_CHANNEL (0x0U) +#define BSP_FEATURE_TIM_W_LINEAR_SRC_DIV_STEP (0x1U) +#define BSP_FEATURE_TIM_W_SUPPORTS_COMPARE_MATCH (0x0U) +#define BSP_FEATURE_TIM_W_SUPPORTS_PAUSE_NATIVELY (0x0U) +#define BSP_FEATURE_TIM_W_SUPPORTS_SEQ_CAPTURES (0x0U) +#define BSP_FEATURE_TIM_W_SUPPORTS_OVERFLOW_UNDERFLOW (0x0U) +#define BSP_FEATURE_TIM_W_SUPPORTS_RESET_NATIVELY (0x0U) + +#define BSP_FEATURE_TRANSFER_HAS_DTC (0) + +#define BSP_FEATURE_UART_W_VALID_CHANNEL_MASK (0x0EU) +#define BSP_FEATURE_UART_W_FIFO_DEPTH (32U) + +#define BSP_FEATURE_WDT_CLOCK_FREQUENCY (100U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_freeze.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_freeze.h new file mode 100644 index 000000000000..9a27519693b2 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_freeze.h @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_FREEZE_RA6W1_H +#define BSP_FREEZE_RA6W1_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 + **********************************************************************************************************************/ + +/** Peripheral to freeze */ +typedef enum e_bsp_freeze_peripheral_ra6w1 +{ + BSP_FREEZE_PERIPHERAL_WKUPTIM = 0, + BSP_FREEZE_PERIPHERAL_SWTIM = 1, + BSP_FREEZE_PERIPHERAL_SWTIM2 = 2, + BSP_FREEZE_PERIPHERAL_SWTIM3 = 3, + BSP_FREEZE_PERIPHERAL_SWTIM4 = 4, + BSP_FREEZE_PERIPHERAL_SWTIM5 = 5, + BSP_FREEZE_PERIPHERAL_SWTIM6 = 6, + BSP_FREEZE_PERIPHERAL_SWTIM7 = 7, + BSP_FREEZE_PERIPHERAL_SWTIM8 = 8, + BSP_FREEZE_PERIPHERAL_SYS_WDOG = 9, + BSP_FREEZE_PERIPHERAL_DMA = 11, + BSP_FREEZE_PERIPHERAL_KDMA = 12, +} bsp_freeze_peripheral_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************/ /** + * Suspend activity of specified peripheral on MCU. + * + * @param[in] peripheral Peripheral to freeze. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PeripheralFreeze (bsp_freeze_peripheral_t peripheral) +{ + CRG_TOP->SET_FREEZE_REG = (uint32_t) (1 << peripheral); +} + +/*******************************************************************************************************************/ /** + * Check whether specified peripheral is frozen or not. + * + * @param[in] peripheral Peripheral to check. + * + * @retval true Peripheral is frozen. + * @retval false Peripheral is active. + **********************************************************************************************************************/ +__STATIC_INLINE bool R_BSP_IsPeripheralFrozen (bsp_freeze_peripheral_t peripheral) +{ + return !!(CRG_TOP->SET_FREEZE_REG & ((uint32_t) (1 << peripheral))); +} + +/*******************************************************************************************************************/ /** + * Resume activity of specified peripheral on MCU. + * + * @param[in] peripheral Peripheral to unfreeze. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PeripheralUnFreeze (bsp_freeze_peripheral_t peripheral) +{ + CRG_TOP->RESET_FREEZE_REG = (uint32_t) (1 << peripheral); +} + +/** @} (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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_init.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_init.c new file mode 100644 index 000000000000..1a7c0021ebb8 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_init.c @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#if BSP_FEATURE_BSP_USE_TCS + #include "bsp_tcs.h" + #include "bsp_otp.h" +#endif +#include +#include +#include "bsp_rand.h" +#ifdef RM_STDIO_W +#include "rm_stdio_w_cfg.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define TRNG_SYS_RETRY_LIMIT (1000) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef void (* bsp_init_func_ptr)(void); + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +extern void R_BSP_WarmStart(bsp_warm_start_event_t event); + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +void bsp_wdt_freeze_cfg(void); +static void ra6w1_SystemInitPostC(void); + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @internal + * @addtogroup BSP_MCU_PRV Internal BSP Documentation + * @ingroup RENESAS_INTERNAL + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Handle WDT Freeze. + * + * WDT is enabled after reset by default. + * In case r_wdog_w module is not included in the project, WDT should be disabled by BSP. + * bsp_wdt_freeze_cfg weak function - will disable WDT in case r_wdog_w module is not included. + * bsp_wdt_freeze_cfg normal function - will do nothing, hence WDT remains enabled, in case r_wdog_w is included. + **********************************************************************************************************************/ +BSP_WEAK_REFERENCE void bsp_wdt_freeze_cfg (void) +{ + CRG_TOP->SET_FREEZE_REG_b.FRZ_SYS_WDOG = 1; +} + +static void ra6w1_SystemInitPostC (void) +{ + /* + * TIN-TODO: This is a weak function that freezes the watchdog. It is redefined in + * r_wdog_w, where it does nothing. I suppose that it is helpful as it allows for test + * runners that do not need to explicitly freeze the watchdog, but from an SDK point of view + * the watchdog is the applications responsibility. The startup code should only refresh it where + * necessary. + *//* If WDT watchdog is not used - freeze it */ + uint32_t s = 0U; + + for (int tries = 0; tries < TRNG_SYS_RETRY_LIMIT; tries++) + { + s = trng_rand() & (uint32_t) HW_ACC_PRNG_SEED_REG_PRNG_SEED_VAL_Msk; + + if (s != 0U) + { + break; + } + } + + bsp_wdt_freeze_cfg(); + + /* Initialize SystemCoreClock variable. */ + SystemCoreClockUpdate(); + +#if BSP_FEATURE_BSP_USE_TCS + + /* enable OTP to read TCS values */ + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + + /* get TCS values */ + bsp_tcs_get_trim_values_from_cs(); + + /* Close OTP */ + bsp_otp_close(); +#endif + +#if defined(CONFIG_RETARGET) || defined(CONFIG_RTT) + /* This is needed to initialize stdout, so that it can be used by putchar (that doesn't initialize stdout, + * contrary to printf). Putchar is needed by the Unity test framework + * This also has the side effect of changing stdout to unbuffered (which seems more reasonable) + */ + setvbuf(stdout, NULL, _IONBF, 0); +#endif + + /* TIN_HACK_WIFI: This was here in fsp-rrq and was removed in fsp-da but did not go anywhere else? + * TODO: the following clock configuration must be removed, see TVR-398 + */ + REG_SETF(CRG_TOP, CLK_AMBA_REG, PERI_CLK_ENABLE, 1); + REG_SETF(CRG_TOP, CLK_AMBA_REG, TIMER_CLK_ENABLE, 1); + + /* Initialize SystemWakeupSource variable. */ + SystemWakeupSourceUpdate(); + +#if !BSP_CFG_OSPI_8_LINES_SUPPORT + + /* Use pins PIN1_00-PIN1_03 as GPIO instead of OQSPI lines. */ + CRG_TOP->CLK_AMBA_REG_b.OQSPI_GPIO_MODE = 1; +#endif + + // TIN-TODO: This does not seem secure at all, since the initial seed is a constant. + + /* Initiate the seed with TRNG */ + if (s == 0U) + { + s = 1U; + } + + srand(s); + + /* Call Post C runtime initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_POST_C); +} + +/* + * Add pointer to ra6w1_SystemInitPostC() in an array that will go in the .init_array section. + * __libc_init_array() (which is called by _start()) calls all function pointers in .init_array. + */ +BSP_PLACE_IN_SECTION(BSP_SECTION_INIT) BSP_ALIGN_VARIABLE(__alignof__(bsp_init_func_ptr)) +static bsp_init_func_ptr ra6w1_init_array_entry[] = +{ + ra6w1_SystemInitPostC, +}; + +/** @} (end addtogroup BSP_MCU_PRV) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io.h new file mode 100644 index 000000000000..7ae4d538da3d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io.h @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2020 - 2026 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_RA6W1_H +#define BSP_IO_RA6W1_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_IO_PXX_SEL_REG(_port) *(&(GPIO->GPIO_SEL_P0_REG) + (_port)) +#define BSP_IO_PXX_SEL1_REG(_port) *(&(GPIO->GPIO_SEL1_P0_REG) + (_port)) +#define BSP_IO_PXX_POL_REG(_port) *(&(GPIO->GPIO_INT_POL_P0_REG) + (_port)) +#define BSP_IO_PXX_INT_STS_REG(_port) *(&(GPIO->GPIO_INT_STS_P0_REG) + (_port)) +#define BSP_IO_PXX_INT_CLR_REG(_port) *(&(GPIO->GPIO_INT_CLR_P0_REG) + (_port)) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Clocks that can be mapped to dedicated BSP_IO */ +typedef enum e_bsp_io_clk_output_ra6w1 +{ + BSP_IO_CLK_XTAL40M_OUT = (GPIO_GPIO_CLK_SEL_REG_XTAL40M_OUTPUT_EN_Msk >> 4), /**< Map clock XTAL40M to dedicated GPIO */ + BSP_IO_CLK_RC10M_OUT = (GPIO_GPIO_CLK_SEL_REG_RC10M_OUTPUT_EN_Msk >> 4), /**< Map clock RC10M to dedicated GPIO */ + BSP_IO_CLK_XTAL32K_OUT = (GPIO_GPIO_CLK_SEL_REG_XTAL32K_OUTPUT_EN_Msk >> 4), /**< Map clock XTAL32K to dedicated GPIO */ + BSP_IO_CLK_OSC32K_OUT = (GPIO_GPIO_CLK_SEL_REG_OSC32K_OUTPUT_EN_Msk >> 4), /**< Map clock OSC32K to dedicated GPIO */ + BSP_IO_CLK_FPLL98M_OUT = (GPIO_GPIO_CLK_SEL_REG_FPLL98M_OUTPUT_EN_Msk >> 4), /**< Map clock FPLL98M to dedicated GPIO */ + BSP_IO_CLK_DPLL480M_OUT = (GPIO_GPIO_CLK_SEL_REG_DPLL480M_OUTPUT_EN_Msk >> 4), /**< Map clock FPLL98M to dedicated GPIO */ + BSP_IO_CLK_MCLK_OUT = (GPIO_GPIO_CLK_SEL_REG_MCLK_OUTPUT_EN_Msk >> 4), /**< Map clock MCLK to dedicated GPIO */ + BSP_IO_CLK_NONE_OUT = 0, +} bsp_io_clk_output_t; + +/** Clocks that can be mapped to GPIO function FUNC_CLOCK */ +typedef enum e_bsp_io_clk_func_ra6w1 +{ + BSP_IO_CLK_XTAL40M_FUNC = 1, /**< Map clock XTAL40M to GPIO function FUNC_CLOCK */ + BSP_IO_CLK_RC10M_FUNC = 2, /**< Map clock RC10M to GPIO function FUNC_CLOCK */ + BSP_IO_CLK_XTAL32K_FUNC = 3, /**< Map clock XTAL32K to GPIO function FUNC_CLOCK */ + BSP_IO_CLK_OSC32K_FUNC = 4, /**< Map clock OSC32K to GPIO function FUNC_CLOCK */ + BSP_IO_CLK_FPLL98M_FUNC = 5, /**< Map clock FPLL98M to GPIO function FUNC_CLOCK */ + BSP_IO_CLK_DPLL480M_FUNC = 6, /**< Map clock DPLL480M to GPIO function FUNC_CLOCK */ + BSP_IO_CLK_DIVN_FUNC = 7, /**< Map clock DIVn to GPIO function FUNC_CLOCK */ +} bsp_io_clk_func_t; + +/** @} (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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io_isolation.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io_isolation.c new file mode 100644 index 000000000000..59ea0bf1ff91 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io_isolation.c @@ -0,0 +1,266 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_io_isolation.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define RTM_RETENTION_IO_ADDR (dg_configBOOTER_RTM_ADDR + 0x60) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +bsp_io_retained_t * g_retention_gpio = (bsp_io_retained_t *) RTM_RETENTION_IO_ADDR; + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +__STATIC_INLINE uint32_t bsp_check_gpio_retention_domain (bsp_io_port_pin_t pin, uint32_t * domain) +{ + if (pin <= BSP_IO_PORT_00_PIN_03) + { + *domain |= IO_RETENTION_VBAT; + } + else if ((pin >= BSP_IO_PORT_00_PIN_04) && (pin <= BSP_IO_PORT_00_PIN_07)) + { + *domain |= IO_RETENTION_DIO1_1; + } + else if ((pin >= BSP_IO_PORT_00_PIN_08) && (pin <= BSP_IO_PORT_00_PIN_13)) + { + *domain |= IO_RETENTION_DIO1_2; + } + else if ((pin >= BSP_IO_PORT_01_PIN_00) && (pin <= BSP_IO_PORT_01_PIN_09)) + { + *domain |= IO_RETENTION_FDIO; + } + else if ((pin >= BSP_IO_PORT_01_PIN_10) && (pin <= BSP_IO_PORT_01_PIN_15)) + { + *domain |= IO_RETENTION_DIO2; + } + + return true; +} + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +__STATIC_INLINE void bsp_pio_function_set (bsp_io_port_pin_t pin, bsp_io_retained_type_t type) +{ + switch (type) + { + case BSP_IO_REATAINED_INPUT: + { + R_BSP_PinCfg(pin, GPIO_W_CFG_PERIPHERAL_PIN | GPIO_W_CFG_PORT_DIRECTION_INPUT); + break; + } + + case BSP_IO_REATAINED_INPUT_PULLUP: + { + R_BSP_PinCfg(pin, GPIO_W_CFG_PERIPHERAL_PIN | GPIO_W_CFG_PORT_DIRECTION_INPUT | GPIO_W_CFG_PULLUP_ENABLE); + break; + } + + case BSP_IO_REATAINED_INPUT_PULLDOWN: + { + R_BSP_PinCfg(pin, GPIO_W_CFG_PERIPHERAL_PIN | GPIO_W_CFG_PORT_DIRECTION_INPUT | GPIO_W_CFG_PULLDOWN_ENABLE); + break; + } + + case BSP_IO_REATAINED_OUTPUT_HIGH: + { + R_BSP_PinCfg(pin, GPIO_W_CFG_PERIPHERAL_PIN | GPIO_W_CFG_PORT_DIRECTION_OUTPUT); + R_BSP_PinWrite(pin, BSP_IO_LEVEL_HIGH); + break; + } + + case BSP_IO_REATAINED_OUTPUT_LOW: + { + R_BSP_PinCfg(pin, GPIO_W_CFG_PERIPHERAL_PIN | GPIO_W_CFG_PORT_DIRECTION_OUTPUT); + R_BSP_PinWrite(pin, BSP_IO_LEVEL_LOW); + break; + } + + default: + { + break; + } + } +} + +static void r_bsp_RetainedIo_config_pin_from_ret (uint32_t pin, uint8_t port) +{ + uint8_t pin_id = (uint8_t) pin & BSP_IO_PIN_BITS; + + if (port == 0) + { + R_BSP_PinCfg(pin, (g_retention_gpio->pio0[pin_id] & ~(1U << 15))); + R_BSP_PinWrite((bsp_io_port_pin_t)pin, + (uint32_t)g_retention_gpio->pio0[pin_id] >> 15 ? BSP_IO_LEVEL_HIGH : BSP_IO_LEVEL_LOW); + } + else + { + R_BSP_PinCfg(pin, (g_retention_gpio->pio1[pin_id] & ~(1U << 15))); + R_BSP_PinWrite((bsp_io_port_pin_t)pin, + (uint32_t)g_retention_gpio->pio1[pin_id] >> 15 ? BSP_IO_LEVEL_HIGH : BSP_IO_LEVEL_LOW); + } +} + +/*******************************************************************************************************************//** + * This function release setting retain pio and recovery pio status by setting user + * + * @param [in] clear clear retention information in retain memory. + * @return true/false + **********************************************************************************************************************/ +void R_BSP_RetainedIoRecovery (uint16_t clear) +{ + uint32_t pin; + uint32_t pin_id = 0; + + /* Loop through the PORT0 */ + for (pin = BSP_IO_PORT_00_PIN_00; pin <= BSP_IO_PORT_00_PIN_13; pin++) + { + pin_id = (uint8_t) pin & BSP_IO_PIN_BITS; + + if ((g_retention_gpio->pio0[pin_id] >= BSP_IO_REATAINED_INPUT) && + (g_retention_gpio->pio0[pin_id] <= BSP_IO_REATAINED_OUTPUT_LOW)) + { + bsp_pio_function_set((bsp_io_port_pin_t) pin, (bsp_io_retained_type_t) g_retention_gpio->pio0[pin_id]); + } + else if (g_retention_gpio->pio0[pin_id] != BSP_IO_REATAINED_RESERVED_STATUS && g_retention_gpio->pio0[pin_id]) + { + /* Restore the pin mode and state and saved again as retain */ + r_bsp_RetainedIo_config_pin_from_ret(pin, 0); + R_BSP_RetainedIoSet(pin); + } + else + { + /* Restore the pin mode and state */ + r_bsp_RetainedIo_config_pin_from_ret(pin, 0); + } + + if (clear) + { + g_retention_gpio->pio0[pin_id] = BSP_IO_REATAINED_UNUSED; + } + } + + /* Loop through the PORT1 */ + for (pin = BSP_IO_PORT_01_PIN_00; pin <= BSP_IO_PORT_01_PIN_15; pin++) + { + pin_id = (uint8_t) pin & BSP_IO_PIN_BITS; + + if ((g_retention_gpio->pio1[pin_id] >= BSP_IO_REATAINED_INPUT) && + (g_retention_gpio->pio1[pin_id] <= BSP_IO_REATAINED_OUTPUT_LOW)) + { + bsp_pio_function_set((bsp_io_port_pin_t) pin, (bsp_io_retained_type_t) g_retention_gpio->pio1[pin_id]); + } + else if (g_retention_gpio->pio1[pin_id] != BSP_IO_REATAINED_RESERVED_STATUS && g_retention_gpio->pio1[pin_id]) + { + /* Restore the pin mode and state and saved again as retain */ + r_bsp_RetainedIo_config_pin_from_ret(pin, 1); + R_BSP_RetainedIoSet(pin); + } + else + { + /* Restore the pin mode and state */ + r_bsp_RetainedIo_config_pin_from_ret(pin, 1); + } + + if (clear) + { + g_retention_gpio->pio1[pin_id] = BSP_IO_REATAINED_UNUSED; + } + } + + RTC->RTM_CONTROL_REG_b.RTM_CTRL_IO_RETEN_CTRL = 0; +} + +/*******************************************************************************************************************//** + * This function execute to retain GPIO as using hw_gpio_retention_pin_set. + * + * @return true/false + **********************************************************************************************************************/ +bool R_BSP_RetainedIoExecute (void) +{ + uint32_t pin; + uint16_t pin_id; + uint32_t domain = 0; + + for (pin = BSP_IO_PORT_00_PIN_00; pin <= BSP_IO_PORT_00_PIN_13; pin++) + { + pin_id = (uint8_t) pin & BSP_IO_PIN_BITS; + + if (g_retention_gpio->pio0[pin_id] == BSP_IO_REATAINED_RESERVED_STATUS) + { + bsp_check_gpio_retention_domain((bsp_io_port_pin_t)pin, &domain); + g_retention_gpio->pio0[pin_id] = (uint16_t) (BSP_IO_PXX_MODE_REG(BSP_IO_PORT_00, pin_id) | (R_BSP_PinRead((bsp_io_port_pin_t)pin) << 15)); + } + else if (g_retention_gpio->pio0[pin_id] >= BSP_IO_REATAINED_INPUT && g_retention_gpio->pio0[pin_id] <= BSP_IO_REATAINED_OUTPUT_LOW) + { + /* For legacy compatible define */ + bsp_pio_function_set((bsp_io_port_pin_t) pin, (bsp_io_retained_type_t) g_retention_gpio->pio0[pin_id]); + bsp_check_gpio_retention_domain((bsp_io_port_pin_t) pin, &domain); + } + else + { + g_retention_gpio->pio0[pin_id] = (uint16_t) (BSP_IO_PXX_MODE_REG(BSP_IO_PORT_00, pin_id) | (R_BSP_PinRead((bsp_io_port_pin_t)pin) << 15)); + } + } + + for (pin = BSP_IO_PORT_01_PIN_00; pin <= BSP_IO_PORT_01_PIN_15; pin++) + { + pin_id = (uint8_t) pin & BSP_IO_PIN_BITS; + + if (g_retention_gpio->pio1[pin_id] == BSP_IO_REATAINED_RESERVED_STATUS) + { + bsp_check_gpio_retention_domain((bsp_io_port_pin_t)pin, &domain); + g_retention_gpio->pio1[pin_id] = (uint16_t) (BSP_IO_PXX_MODE_REG(BSP_IO_PORT_01, pin_id) | (R_BSP_PinRead((bsp_io_port_pin_t)pin) << 15)); + } + else if (g_retention_gpio->pio1[pin_id] >= BSP_IO_REATAINED_INPUT && g_retention_gpio->pio1[pin_id] <= BSP_IO_REATAINED_OUTPUT_LOW) + { + /* For legacy compatible define */ + bsp_pio_function_set((bsp_io_port_pin_t) pin, (bsp_io_retained_type_t) g_retention_gpio->pio1[pin_id]); + bsp_check_gpio_retention_domain((bsp_io_port_pin_t) pin, &domain); + } + else + { + g_retention_gpio->pio1[pin_id] = (uint16_t) (BSP_IO_PXX_MODE_REG(BSP_IO_PORT_01, pin_id) | (R_BSP_PinRead((bsp_io_port_pin_t)pin) << 15)); + } + } + + RTC->RTM_CONTROL_REG_b.RTM_CTRL_IO_RETEN_CTRL = domain & IO_RETENTION_MSK; + + return true; +} + +void R_BSP_RetainedIoClear (void) +{ + memset(g_retention_gpio, 0, sizeof(bsp_io_retained_t)); +} + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io_isolation.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io_isolation.h new file mode 100644 index 000000000000..e17448a5f23a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_io_isolation.h @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +#ifndef BSP_IO_ISOLATION_H +#define BSP_IO_ISOLATION_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "config/bsp_memory_defaults_ra6w1.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/* + * Retention io is adjusted on a domain basis. + * Therefore, find the block of the pin for which retention-io is specified and assign retention to that domain. + * + * IO_RETENTION_VBAT contains the XTAL32k port, so it cannot be retained. + * IO_RETENTION_FDIO cannot be retained during FLASH-XIP + */ +#define IO_RETENTION_VBAT (0x10) ///< P0_00 ~ P0_03 +#define IO_RETENTION_FDIO (0x08) ///< P1_00 ~ P1_09 +#define IO_RETENTION_DIO2 (0x04) ///< P1_10 ~ P1_15 +#define IO_RETENTION_DIO1_2 (0x02) ///< P0_08 ~ P0_13 +#define IO_RETENTION_DIO1_1 (0x01) ///< P0_04 ~ P0_07 + +/* All execpt VBAT and FDIO */ +#define IO_RETENTION_MSK (IO_RETENTION_DIO2 | IO_RETENTION_DIO1_2 | IO_RETENTION_DIO1_1) + +typedef enum e_retained_type +{ + BSP_IO_REATAINED_UNUSED = 0x0, + BSP_IO_REATAINED_INPUT = 0x6f, + BSP_IO_REATAINED_INPUT_PULLUP, + BSP_IO_REATAINED_INPUT_PULLDOWN, + BSP_IO_REATAINED_OUTPUT_HIGH, + BSP_IO_REATAINED_OUTPUT_LOW, + BSP_IO_REATAINED_RESERVED_STATUS = 0xff, +} bsp_io_retained_type_t; + +typedef struct st_io_retained +{ + uint16_t pio0[16]; + uint16_t pio1[16]; +} bsp_io_retained_t; + +extern bsp_io_retained_t * g_retention_gpio; + +/*******************************************************************************************************************//** + * This function keeps the GPIO pin type during sleep. + * Save the io-state in retention memory before sleep. so that the io-state before sleep is maintained when waking up. + * + * @param[in] pin the GPIO pin + * + * @return true/false + **********************************************************************************************************************/ +__STATIC_INLINE bool R_BSP_RetainedIoSet (bsp_io_port_pin_t pin) +{ + uint32_t pin_id = (uint8_t) pin & BSP_IO_PIN_BITS; + uint32_t port = ((uint16_t) pin) >> BSP_IO_PORT_OFFSET; + + if (port == BSP_IO_PORT_00) + { + g_retention_gpio->pio0[pin_id] = BSP_IO_REATAINED_RESERVED_STATUS; + } + else if (port == BSP_IO_PORT_01) + { + g_retention_gpio->pio1[pin_id] = BSP_IO_REATAINED_RESERVED_STATUS; + } + + return true; +} + +/*******************************************************************************************************************//** + * This function determines which pin will keeping IO status during sleep. + * The PIN and its status are saved in retention memory so that the specified io-state is maintained when waking up. + * + * @param[in] pin the GPIO pin + * @param[in] type type of the GPIO PIN + * + * @return true/false + **********************************************************************************************************************/ +__STATIC_INLINE bool R_BSP_RetainedIoStatusSet (bsp_io_port_pin_t pin, bsp_io_retained_type_t type) +{ + uint32_t pin_id = (uint8_t) pin & BSP_IO_PIN_BITS; + uint32_t port = ((uint16_t) pin) >> BSP_IO_PORT_OFFSET; + + if (port == BSP_IO_PORT_00) + { + g_retention_gpio->pio0[pin_id] = type; + } + else if (port == BSP_IO_PORT_01) + { + g_retention_gpio->pio1[pin_id] = type; + } + + return true; +} + +void R_BSP_RetainedIoRecovery(uint16_t clear); + +bool R_BSP_RetainedIoExecute(); + +void R_BSP_RetainedIoClear(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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_linker.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_linker.c new file mode 100644 index 000000000000..aad81131ddd3 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_linker.c @@ -0,0 +1,21 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#include "bsp_api.h" + +/* UNCRUSTIFY-OFF */ + +/* boot loaded applications cannot set ofs registers (only do so in the boot loader) */ +#ifndef BSP_BOOTLOADED_APPLICATION +/** configuration register output to sections */ +#endif // BSP_BOOTLOADED_APPLICATION + +/******************************/ +/* the init tables are located in bsp_linker_info.h */ +#define BSP_LINKER_C +#include "bsp_linker_info.h" + +/* UNCRUSTIFY-ON */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_mcu_info.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_mcu_info.h new file mode 100644 index 000000000000..9e4585bff8bd --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_mcu_info.h @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_MCU_INFO_H +#define BSP_MCU_INFO_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP MCU Specific Includes. */ +#include "bsp_feature.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.c new file mode 100644 index 000000000000..e07be18e5eaa --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.c @@ -0,0 +1,397 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#ifdef UNIT_TESTING + #include "fake_regs.h" +#endif + +#include "bsp_otp.h" + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +static const uint32_t g_tim1[] = +{ + /* Default 40MHz */ + (39 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_1US_Pos) | + (0 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_20NS_Pos) | + (3 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_RD_Pos) | + (0x09 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_CS_Pos) | + (0x09 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_CSP_Pos), + + /* 80MHz */ + (80 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_1US_Pos) | + (1 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_20NS_Pos) | + (8 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_CC_T_RD_Pos) | + (0x09 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_CS_Pos) | + (0x09 << OTPC_OTPC_TIM1_REG_OTPC_TIM1_US_T_CSP_Pos), +}; + +/*******************************************************************************************************************//** + * Set OTP cell timing parameters. + * + * @param[in] clk_speed OTPC clock speed. + **********************************************************************************************************************/ +__STATIC_FORCEINLINE void bsp_otpc_set_speed (bsp_otpc_clk_freq_t clk_speed) +{ + OTPC->OTPC_TIM1_REG = g_tim1[clk_speed]; +} + +/*******************************************************************************************************************//** + * Get OTP cell address. + * + * @param[in] cell_offset OTP cell offset. + * @return OTP cell address. + **********************************************************************************************************************/ +__STATIC_FORCEINLINE volatile uint32_t * bsp_prv_otpc_addr (uint32_t cell_offset) +{ + return (volatile uint32_t *) (MEMORY_OTP_BASE + (4 * cell_offset)); +} + +/*******************************************************************************************************************//** + * Verify data stored in OTP. + * + * @param[in] p_data A pointer to the data that is expected to be stored in the OTP. + * It shall be at least of (num_words * 4) bytes long. + * @param[in] cell_offset OTP cell offset where data is expected to be stored. + * @param[in] num_words Number of words to verify. + * @param[in] mode OTP mode + **********************************************************************************************************************/ +static bool bsp_otp_read_verif (const uint32_t * p_data, uint32_t cell_offset, uint32_t num_words, bsp_otpc_mode_t mode) +{ + bsp_otp_mode_set(mode); + + for (uint32_t i = 0; i < num_words; i++) + { + if (*p_data != *bsp_prv_otpc_addr(cell_offset)) + { + return false; + } + + cell_offset++; + p_data++; + } + + return true; +} + +#ifdef UNIT_TESTING + +BSP_WEAK_REFERENCE void bsp_prv_otp_testable_busy_loop_hook (uintptr_t reg, uint32_t param) +{ + /* Do nothing */ + FSP_PARAMETER_NOT_USED(reg); + FSP_PARAMETER_NOT_USED(param); +} + +#endif + +/*******************************************************************************************************************//** + * Set OTP mode. + * + * @param[in] mode The new OTP mode. + **********************************************************************************************************************/ +__STATIC_FORCEINLINE void bsp_prv_otp_mode_set (bsp_otpc_mode_t mode) +{ + /* Change mode only if new mode is different than the old one */ + if (mode != OTPC->OTPC_MODE_REG_b.OTPC_MODE_MODE) + { + OTPC->OTPC_MODE_REG_b.OTPC_MODE_MODE = mode; + } +} + +/*******************************************************************************************************************//** + * Wait for OTP mode to be applied. + **********************************************************************************************************************/ +static void bsp_prv_otp_mode_change_wait (void) +{ + while (0 == OTPC->OTPC_STAT_REG_b.OTPC_STAT_MRDY) + { +#ifdef UNIT_TESTING + bsp_prv_otp_testable_busy_loop_hook((uintptr_t) &OTPC->OTPC_STAT_REG, OTPC_OTPC_STAT_REG_OTPC_STAT_MRDY_Pos); +#endif + } +} + +/*******************************************************************************************************************//** + * Set OTP mode and wait for it to be applied. + * + * @param[in] mode The new OTP mode. + **********************************************************************************************************************/ +__STATIC_FORCEINLINE void bsp_prv_otp_mode_wait_until_set (bsp_otpc_mode_t mode) +{ + bsp_prv_otp_mode_set(mode); + bsp_prv_otp_mode_change_wait(); +} + +/*******************************************************************************************************************//** + * Wait for OTP programming to finish. + **********************************************************************************************************************/ +__STATIC_FORCEINLINE void bsp_otpc_wait_while_busy_programming (void) +{ + while (!OTPC->OTPC_STAT_REG_b.OTPC_STAT_PRDY) + { + ; + } +} + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Initialize the OTP controller. + * + * @note Among other things, it enables the clock of the OTP controller. + * TODO this shall not be the case, see WIFISWTIN-1591. + **********************************************************************************************************************/ +void bsp_otp_init (void) +{ + uint32_t lock; + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + while (CC312->CC312_NVM_IS_IDLE_REG_b.CC312_NVM_IS_IDLE_STATUS != 1) + { + ; + } + + /* Check PLL clock */ + if (CRG_TOP->CLK_CTRL_REG_b.PLL_PERI_ENABLE == 1) + { + bsp_otpc_set_speed(BSP_OTPC_CLK_FREQ_80MHz); + } + else + { + bsp_otpc_set_speed(BSP_OTPC_CLK_FREQ_40MHz); + } + + /* Default read mode */ + bsp_otp_mode_set(BSP_OTP_MODE_READ); + + /* Read out OTP lock bit first without below read out, it can not write to the OTP */ + lock = *bsp_prv_otpc_addr(511); + FSP_PARAMETER_NOT_USED(lock); + + FSP_CRITICAL_SECTION_EXIT; +} + +/*******************************************************************************************************************//** + * Set OTP timing for the given sysclk frequency. + * + * @param [in] sysclk_freq_MHz The target sysclk frequency, in MHz. + * + * @note Only specific frequencies are supported, depending on the device. + * TODO this function shall be updated/deleted, see WIFISWTIN-1591. + **********************************************************************************************************************/ +void bsp_otp_timings_set (uint32_t sysclk_freq_MHz) +{ + switch (sysclk_freq_MHz) + { + case 40: + { + bsp_otpc_set_speed(BSP_OTPC_CLK_FREQ_40MHz); + break; + } + + case 80: + { + bsp_otpc_set_speed(BSP_OTPC_CLK_FREQ_80MHz); + break; + } + + case 160: + { + /* TODO implement */ + break; + } + + default: + { + BSP_CHECK_DEBUG(0); + } + } +} + +/*******************************************************************************************************************//** + * Set OTP mode and wait for the change to finish. + * + * @param [in] mode The new OTP mode. + **********************************************************************************************************************/ +void bsp_otp_mode_set (uint32_t mode) +{ + bsp_prv_otp_mode_wait_until_set(mode); +} + +/*******************************************************************************************************************//** + * Read word from OTP. + * + * @param[in] cell_offset OTP cell offset. + * @return word read from OTP. + **********************************************************************************************************************/ +uint32_t bsp_otp_word_read (uint32_t cell_offset) +{ + bsp_otp_mode_set(BSP_OTP_MODE_READ); + + return *bsp_prv_otpc_addr(cell_offset); +} + +/*******************************************************************************************************************//** + * Read data from OTP. + * + * @param[out] p_data A pointer to the buffer to store OTP data into. + * It shall be at least of (num_words * 4) bytes long. + * @param[in] cell_offset OTP cell offset to start reading from. + * @param[in] num_words Number of words to read from OTP. + **********************************************************************************************************************/ +void bsp_otp_read (uint32_t * p_data, uint32_t cell_offset, uint32_t num_words) +{ + bsp_otp_mode_set(BSP_OTP_MODE_READ); + + for (uint32_t i = 0; i < num_words; i++) + { + *p_data = *bsp_prv_otpc_addr(cell_offset + i); + p_data++; + } +} + +/*******************************************************************************************************************//** + * Program word to OTP. + * + * @param[in] data A word to be programmed to OTP. + * @param[in] cell_offset OTP cell offset to start programming into. + **********************************************************************************************************************/ +uint32_t bsp_otp_word_prog (uint32_t data, uint32_t cell_offset) +{ + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + *bsp_prv_otpc_addr(cell_offset) = data; + bsp_otpc_wait_while_busy_programming(); + + return bsp_otp_word_read(cell_offset); +} + +/*******************************************************************************************************************//** + * Program data to OTP. + * + * @param[in] p_data A pointer to the data to be programmed to OTP. + * It shall be at least of (num_words * 4) bytes long. + * @param[in] cell_offset OTP cell offset to start programming into. + * @param[in] num_words Number of words to program to OTP. + **********************************************************************************************************************/ +void bsp_otp_prog (const uint32_t * p_data, uint32_t cell_offset, uint32_t num_words) +{ + uint32_t i; + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + + for (i = 0; i < num_words; i++) + { + *bsp_prv_otpc_addr(cell_offset + i) = *p_data++; + bsp_otpc_wait_while_busy_programming(); + } +} + +/*******************************************************************************************************************//** + * Program data to OTP and verify it has been programmed successfully. + * + * @param[in] p_data A pointer to the data to be programmed to OTP. + * It shall be at least of (num_words * 4) bytes long. + * @param[in] cell_offset OTP cell offset to start programming into. + * @param[in] num_words Number of words to program to OTP. + **********************************************************************************************************************/ +bool bsp_otp_prog_and_verify (const uint32_t * p_data, uint32_t cell_offset, uint32_t num_words) +{ + bsp_otp_prog(p_data, cell_offset, num_words); + + if (!bsp_otp_read_verif(p_data, cell_offset, num_words, BSP_OTP_MODE_PVFY)) + { + return false; + } + + if (!bsp_otp_read_verif(p_data, cell_offset, num_words, BSP_OTP_MODE_RINI)) + { + return false; + } + + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + + return true; +} + +/*******************************************************************************************************************//** + * Lock OTP cell region. + * + * @param[in] cell_region OTP cell region to lock. + * @return OTP lock region > 0 on success, 0 on failure (invalid cell_region). + **********************************************************************************************************************/ +uint32_t bsp_otp_lock (uint8_t cell_region) +{ + uint32_t otp_lock_region; + + if (cell_region > 30) + { + return 0; + } + + otp_lock_region = 0x01 << (cell_region); + bsp_otp_prog(&otp_lock_region, BSP_OTP_LOCK_OFFSET, 1); + + return bsp_otp_get_lock_region(); +} + +/*******************************************************************************************************************//** + * Get OTP lock region. + * + * @return OTP lock region > 0. + **********************************************************************************************************************/ +uint32_t bsp_otp_get_lock_region (void) +{ + return bsp_otp_word_read(BSP_OTP_LOCK_OFFSET); +} + +/*******************************************************************************************************************//** + * Put OTP controller in standby mode and disable it. + **********************************************************************************************************************/ +void bsp_otp_close (void) +{ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + bsp_prv_otp_mode_wait_until_set(BSP_OTP_MODE_DSTBY); + + FSP_CRITICAL_SECTION_EXIT; +} + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.h new file mode 100644 index 000000000000..83e5c5642993 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_otp.h @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_OTP_RA6W1_H +#define BSP_OTP_RA6W1_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#ifdef UNIT_TESTING + #include "fake_regs.h" +#endif + +/** 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_OTP_CELL_NUM (0x1FF) /* Max number of OTP cells, each cell size is 4 bytes last offset is used for OTP lock */ +#define BSP_OTP_LOCK_OFFSET (0x1FF) /* Max number of OTP cells, each cell size is 4 bytes last offset is used for OTP lock */ +#define MEMORY_OTP_BASE 0x400F2000UL +#define MEMORY_OTP_END 0x400F2800UL + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** OTP Controller modes */ +typedef enum e_bsp_otpc_mode +{ + BSP_OTP_MODE_DSTBY = 0, /**< OTP cell is powered on LDO is inactive*/ + BSP_OTP_MODE_STBY = 1, /**< OTP cell and LDO are powered on, chip select is deactivated*/ + BSP_OTP_MODE_READ = 2, /**< OTP cell can be read*/ + BSP_OTP_MODE_PROG = 3, /**< OTP cell can be programmed*/ + BSP_OTP_MODE_PVFY = 4, /**< OTP cell can be read in PVFY margin read mode*/ + BSP_OTP_MODE_RINI = 5 /**< OTP cell can be read in RINI margin read mode*/ +} bsp_otpc_mode_t; + +/** System clock frequency in MHz */ +typedef enum e_bsp_otpc_clk_freq +{ + BSP_OTPC_CLK_FREQ_40MHz = 0, + BSP_OTPC_CLK_FREQ_80MHz = 1, +} bsp_otpc_clk_freq_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +uint32_t bsp_otp_word_read(uint32_t cell_offset); +void bsp_otp_read(uint32_t * p_data, uint32_t cell_offset, uint32_t num_words); +uint32_t bsp_otp_word_prog(uint32_t data, uint32_t cell_offset); +void bsp_otp_prog(const uint32_t * p_data, uint32_t cell_offset, uint32_t num_words); +bool bsp_otp_prog_and_verify(const uint32_t * p_data, uint32_t cell_offset, uint32_t num_words); +uint32_t bsp_otp_lock(uint8_t cell_region); +uint32_t bsp_otp_get_lock_region(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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_override.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_override.h new file mode 100644 index 000000000000..2fc00aee4a43 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_override.h @@ -0,0 +1,178 @@ +#ifndef BSP_OVERRIDE_H +#define BSP_OVERRIDE_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Define overrides required for this MCU. */ +#define BSP_OVERRIDE_TIMER_MODE_T +#define BSP_OVERRIDE_TIMER_EVENT_T +#define BSP_OVERRIDE_TIMER_SOURCE_DIV_T + +// #define BSP_OVERRIDE_LPM_STANDBY_WAKE_SOURCE_T +#define BSP_OVERRIDE_LPM_DEEP_STANDBY_WAKE_SOURCE_T +#define BSP_OVERRIDE_LPM_SNOOZE_REQUEST_T +#define BSP_OVERRIDE_LPM_SNOOZE_END_T +#define BSP_OVERRIDE_LPM_SNOOZE_CANCEL_T +#define BSP_OVERRIDE_ADC_INCLUDE + +#define BSP_OVERRIDE_ADC_EVENT_T + +/** ADC callback event definitions */ +typedef enum e_adc_event +{ + ADC_EVENT_SCAN_COMPLETE, ///< Normal/Group A scan complete + ADC_EVENT_SCAN_COMPLETE_GROUP_B, ///< Group B scan complete + ADC_EVENT_SCAN_COMPLETE_GROUP_C, ///< Group C scan complete + ADC_EVENT_CALIBRATION_COMPLETE, ///< Calibration complete + ADC_EVENT_CONVERSION_COMPLETE, ///< Conversion complete + ADC_EVENT_CALIBRATION_REQUEST, ///< Calibration requested + ADC_EVENT_CONVERSION_ERROR, ///< Scan error + ADC_EVENT_OVERFLOW, ///< Overflow occurred + ADC_EVENT_LIMIT_CLIP, ///< Limiter clipping occurred + ADC_EVENT_FIFO_READ_REQUEST, ///< FIFO read requested + ADC_EVENT_FIFO_OVERFLOW, ///< FIFO overflow occurred + ADC_EVENT_THD_UNDER, ///< Conversion result was below the threshold + ADC_EVENT_THD_OVER, ///< Conversion result exceeded the threshold +} adc_event_t; + +#define BSP_OVERRIDE_ADC_RESOLUTION_T + +/** ADC data resolution definitions */ +typedef enum e_adc_resolution +{ + ADC_RESOLUTION_12_BIT = 0, ///< 12 bit resolution + ADC_RESOLUTION_10_BIT = 1, ///< 10 bit resolution + ADC_RESOLUTION_7_BIT = 2, ///< 7 bit resolution + ADC_RESOLUTION_4_BIT = 3, ///< 4 bit resolution +} adc_resolution_t; + +#define BSP_OVERRIDE_ADC_INFO_T + +/** ADC Information Structure for Transfer Interface */ +typedef struct st_adc_info +{ + void * p_address; ///< The address to start reading the data from + uint32_t length; ///< The total number of transfers to read +} adc_info_t; + +#define BSP_OVERRIDE_WDT_TIMEOUT_T + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Options to configure pin functions */ +typedef enum e_gpio_w_cfg_options +{ + /* PUPD */ + GPIO_W_CFG_PERIPHERAL_PIN = 0x00000000, ///< Enables pin to operate as a peripheral pin + GPIO_W_CFG_PULLDOWN_ENABLE = 0x00000200, ///< Enables pull down + GPIO_W_CFG_PULLUP_ENABLE = 0x00000100, ///< Enables pull up + GPIO_W_CFG_PORT_DIRECTION_INPUT = 0x00000000, ///< Sets the pin direction to input + GPIO_W_CFG_PORT_DIRECTION_OUTPUT = 0x00000300, ///< Sets the pin direction to output + + /* PPOD */ + GPIO_W_CFG_OPEN_DRAIN_ENABLE = 0x00000700, ///< Enables open-drain output + + /* PAD input selection */ + GPIO_W_CFG_SCHMITT_TRIG_ENABLE = 0x00000800, ///< Enables Schmitt trigger for input pin + + /* Drive Strength */ + GPIO_W_CFG_DRV_2mA = 0x00000000, ///< 2mA + GPIO_W_CFG_DRV_4mA = 0x00001000, ///< 4mA + GPIO_W_CFG_DRV_8mA = 0x00002000, ///< 8mA + GPIO_W_CFG_DRV_14mA = 0x00003000, ///< 14mA + + /* Standard PAD slew rate control */ + GPIO_W_CFG_SLW_FAST = 0x00000000, ///< Fast + GPIO_W_CFG_SLW_SLOW = 0x00004000, ///< Slow + + /* Standard PAD Parametric Output control, parametric inverted data */ + + // TIN-TODO: Most probably the name of this field was copy pasted from the corresponding RA enum & needs to be changed to match the actual functionality of the corresponding register field. + GPIO_W_CFG_ANALOG_ENABLE = 0x00008000, ///< Enabled + + /* PIN LEVEL */ + GPIO_W_CFG_PORT_OUTPUT_LOW = 0x00000000, ///< Sets the pin level to low + GPIO_W_CFG_PORT_OUTPUT_HIGH = 0x00400000, ///< Sets the pin level to high + + /* GPIO CFG */ + GPIO_W_CFG_RETENTION = 0x20000000, ///< The pin should not float during sleep + GPIO_W_CFG_IRQ_ENABLE = 0x40000000, ///< Enables IRQ +} gpio_w_cfg_options_t; + +typedef uint32_t wdt_timeout_t; + +/** Timer operational modes */ +typedef enum e_timer_mode +{ + TIMER_MODE_PERIODIC, ///< Timer restarts after period elapses. + TIMER_MODE_ONE_SHOT, ///< Timer stops after period elapses. + TIMER_MODE_PWM, ///< Timer generates square-wave PWM output. + TIMER_MODE_EDGE_DETECT, ///< Timer asynchronously counting up edges. +} timer_mode_t; + +/** Events that can trigger a callback function */ +typedef enum e_timer_event +{ + TIMER_EVENT_CYCLE_END, ///< Requested timer delay has expired or timer has wrapped around + TIMER_EVENT_PULSE_CNT_CYCLE_END, ///< Requested number of pulses were triggered + TIMER_EVENT_SEQUENTIAL_CAPTURE_CYCLE_END, ///< Requested number of captures were triggered + TIMER_EVENT_OVERFLOW, ///< Timer overflow event (counter reached 32-bit value) + TIMER_EVENT_UNDERFLOW, ///< Timer underflow event (counter went under zero (0) value) + TIMER_EVENT_CAPTURE_A, ///< A capture has occurred on signal A + TIMER_EVENT_CAPTURE_B, ///< A capture has occurred on signal B + TIMER_EVENT_CAPTURE_C, ///< A capture has occurred on signal C + TIMER_EVENT_CAPTURE_D, ///< A capture has occurred on signal D + TIMER_EVENT_CAPTURE_E, ///< A capture has occurred on signal E + TIMER_EVENT_CAPTURE_F, ///< A capture has occurred on signal F + TIMER_EVENT_CAPTURE_G, ///< A capture has occurred on signal G + TIMER_EVENT_CAPTURE_H, ///< A capture has occurred on signal H + TIMER_EVENT_COMPARE_A, ///< A compare has occurred on signal A + TIMER_EVENT_COMPARE_B, ///< A compare has occurred on signal B + TIMER_EVENT_COMPARE_C, ///< A compare has occurred on signal C + TIMER_EVENT_COMPARE_D, ///< A compare has occurred on signal D + TIMER_EVENT_COMPARE_E, ///< A compare has occurred on signal E + TIMER_EVENT_COMPARE_F, ///< A compare has occurred on signal F + TIMER_EVENT_COMPARE_G, ///< A compare has occurred on signal G + TIMER_EVENT_COMPARE_H, ///< A compare has occurred on signal H +} timer_event_t; + +typedef enum e_timer_source_div +{ + TIMER_SOURCE_DIV_1 = 0, ///< Timer clock source divided by 1 + TIMER_SOURCE_DIV_2 = 1, ///< Timer clock source divided by 2 + TIMER_SOURCE_DIV_3 = 2, ///< Timer clock source divided by 3 + TIMER_SOURCE_DIV_4 = 3, ///< Timer clock source divided by 4 + TIMER_SOURCE_DIV_5 = 4, ///< Timer clock source divided by 5 + TIMER_SOURCE_DIV_6 = 5, ///< Timer clock source divided by 6 + TIMER_SOURCE_DIV_7 = 6, ///< Timer clock source divided by 7 + TIMER_SOURCE_DIV_8 = 7, ///< Timer clock source divided by 8 + TIMER_SOURCE_DIV_9 = 8, ///< Timer clock source divided by 9 + TIMER_SOURCE_DIV_10 = 9, ///< Timer clock source divided by 10 + TIMER_SOURCE_DIV_11 = 10, ///< Timer clock source divided by 11 + TIMER_SOURCE_DIV_12 = 11, ///< Timer clock source divided by 12 + TIMER_SOURCE_DIV_13 = 12, ///< Timer clock source divided by 13 + TIMER_SOURCE_DIV_14 = 13, ///< Timer clock source divided by 14 + TIMER_SOURCE_DIV_15 = 14, ///< Timer clock source divided by 15 + TIMER_SOURCE_DIV_16 = 15, ///< Timer clock source divided by 16 + TIMER_SOURCE_DIV_17 = 16, ///< Timer clock source divided by 17 + TIMER_SOURCE_DIV_18 = 17, ///< Timer clock source divided by 18 + TIMER_SOURCE_DIV_19 = 18, ///< Timer clock source divided by 19 + TIMER_SOURCE_DIV_20 = 19, ///< Timer clock source divided by 20 + TIMER_SOURCE_DIV_21 = 20, ///< Timer clock source divided by 21 + TIMER_SOURCE_DIV_22 = 21, ///< Timer clock source divided by 22 + TIMER_SOURCE_DIV_23 = 22, ///< Timer clock source divided by 23 + TIMER_SOURCE_DIV_24 = 23, ///< Timer clock source divided by 24 + TIMER_SOURCE_DIV_25 = 24, ///< Timer clock source divided by 25 + TIMER_SOURCE_DIV_26 = 25, ///< Timer clock source divided by 26 + TIMER_SOURCE_DIV_27 = 26, ///< Timer clock source divided by 27 + TIMER_SOURCE_DIV_28 = 27, ///< Timer clock source divided by 28 + TIMER_SOURCE_DIV_29 = 28, ///< Timer clock source divided by 29 + TIMER_SOURCE_DIV_30 = 29, ///< Timer clock source divided by 30 + TIMER_SOURCE_DIV_31 = 30, ///< Timer clock source divided by 31 + TIMER_SOURCE_DIV_32 = 31, ///< Timer clock source divided by 32 +} timer_source_div_t; +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.c new file mode 100644 index 000000000000..92857531d07d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.c @@ -0,0 +1,493 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "bsp_pd.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/* System Wakeup Source */ +uint32_t SystemCoreWakeupSource BSP_SECTION_EARLY_INIT; + +/* System Wakeup Pin */ +uint32_t SystemCoreWakeupSourcePin BSP_SECTION_EARLY_INIT; + +/* RTC Brown-out and Black-out callback types */ +BSP_RTC_BOD_CALLBACK_TYPE bsp_rtc_brown_callback, bsp_rtc_black_callback; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +void RTC_IF_BLACK_Handler(void); +void RTC_IF_BROWN_Handler(void); + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** + * @brief Get the SLEEP/IS_UP register-field masks of a power domain. + * + * @param [in] power_domain power domain + * @param [out] sleep_mask mask for the power domain's SLEEP status bit + * @param [out] is_up_mask mask for the power domain's IS_UP status bit + * + * @note If \p power_domain is invalid, 0 is returned for both masks + */ +void bsp_prv_pd_masks_get (bsp_power_domain_t power_domain, uint32_t * sleep_mask, uint32_t * is_up_mask) +{ + switch (power_domain) + { + case BSP_PD_PHY: + { + *sleep_mask = CRG_TOP_PMU_CTRL_REG_PHY_SLEEP_Msk; + *is_up_mask = CRG_TOP_SYS_STATUS_REG_PHY_IS_UP_Msk; + break; + } + + case BSP_PD_MAC: + { + *sleep_mask = CRG_TOP_PMU_CTRL_REG_MAC_SLEEP_Msk; + *is_up_mask = CRG_TOP_SYS_STATUS_REG_MAC_IS_UP_Msk; + break; + } + + default: + { + *sleep_mask = 0; + *is_up_mask = 0; + break; + } + } +} + +/*******************************************************************************************************************//** + * Updates the SystemCoreWakeupSource and SystemCoreWakeupSourcePin variables based on the current state + * of the RTC registers. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM void SystemWakeupSourceUpdate (void) +{ + SystemCoreWakeupSource = 0; + SystemCoreWakeupSource = RTC->WAKEUP_SRC_CLR_SIG_REG & 0x7f; + + /* Clear wakeup source */ + RTC->DCDC_CNTL_OFF_REG_b.DCDC_PWR_OFF = 0; + RTC->ENABLE_CTRL_REG_b.SLEEP3_EN = 0; + RTC->ENABLE_CTRL_REG_b.WATCHDOG_OUT_INT_EN = 0; + + if (SystemCoreWakeupSource & 0x30) + { + SystemCoreWakeupSource = (SystemCoreWakeupSource & ~(0x30U)) | BSP_WAKEUP_SOURCE_SENSOR; + } + + SystemCoreWakeupSource |= (RTC->RTM_CONTROL_REG_b.RTM_INFO << 7); + + if (SystemCoreWakeupSource & BSP_WAKEUP_SOURCE_POR) + { + if (!bsp_is_chip_revision_a()) + { + RTC->LDO_ENABLE_REG_b.CTRL_ST_PA_DCDC = 0x18; + } + + SystemCoreWakeupSource = BSP_WAKEUP_SOURCE_POR; + } + + SystemCoreWakeupSourcePin = 0; + SystemCoreWakeupSourcePin = RTC->GPIO_WAKEUP1_REG_b.GPIO_WAKEUP_SRC; +} + +/*******************************************************************************************************************//** + * Gets the wakeup source stored in the SystemCoreWakeupSource variable. + * + * @return The wakeup source. + * + * @note Since the wakeup source may change after booting, the value is stored in SystemCoreWakeupSource during the + * initialization process (through SystemWakeupSourceUpdate), and it is checked as a static value. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM bsp_wakeup_source_mask_t R_BSP_WakeupSourceGet (void) +{ + return (bsp_wakeup_source_mask_t) SystemCoreWakeupSource; +} + +/*******************************************************************************************************************//** + * Clears the specified wakeup source. + * + * @param[in] clear Boolean indicating whether to clear the wakeup source. + **********************************************************************************************************************/ +void R_BSP_WakeupSourceClear (bool clear) +{ + uint32_t regtemp = 0xFE; + if (clear) + { + RTC->WAKEUP_SRC_CLR_SIG_REG = regtemp; + } + + RTC->ENABLE_CTRL_REG &= ~(RTC_ENABLE_CTRL_REG_SLEEP3_EN_Msk | RTC_ENABLE_CTRL_REG_WATCHDOG_OUT_INT_EN_Msk); + RTC->DCDC_CNTL_OFF_REG &= ~(RTC_DCDC_CNTL_OFF_REG_DCDC_PWR_OFF_Msk); +} + +/*******************************************************************************************************************//** + * Gets the wakeup source pin mask stored in the SystemCoreWakeupSourcePin variable. + * + * @return The wakeup pin mask. + * + * @note Since the wakeup pin may change after booting, the value is stored in SystemCoreWakeupSourcePin during the + * initialization process (through SystemWakeupSourceUpdate), and it is checked as a static value. + **********************************************************************************************************************/ +bsp_io_wakeup_pin_t R_BSP_WakeupSourcePinGet (void) +{ + return (bsp_io_wakeup_pin_t) SystemCoreWakeupSourcePin; +} + +/*******************************************************************************************************************//** + * Clears the wakeup source pin mask. + **********************************************************************************************************************/ +void R_BSP_WakeupSourcePinClear (void) +{ + RTC->WAKEUP_SRC_CLR_SIG_REG_b.GPIO_WAKE_UP_DETECT = 1; +} + +/*******************************************************************************************************************//** + * Sets the specified GPIO pin as a wakeup source. + * + * @param[in] pin The GPIO pin to set as a wakeup source. + * @param[in] edge The edge type (active high or active low) for the wakeup source. + **********************************************************************************************************************/ +void R_BSP_WakeupSourcePinSet (bsp_io_wakeup_pin_t pin, bsp_io_wakeup_edge_t edge) +{ + uint32_t temp; + temp = RTC->GPIO_WAKEUP1_REG_b.GPIO_WAKEUP_EN_SEL; + temp |= pin; + RTC->GPIO_WAKEUP1_REG_b.GPIO_WAKEUP_EN_SEL = temp & 0x7FFU; + + temp = RTC->GPIO_WAKEUP0_REG_b.GPIO_WAKEUP_EDGE_INVERSION_SEL; + temp &= ~pin; + temp |= (edge == 0) ? pin : 0; + RTC->GPIO_WAKEUP0_REG_b.GPIO_WAKEUP_EDGE_INVERSION_SEL = temp & 0x7FFU; +} + +/*******************************************************************************************************************//** + * Sets the specified GPIO pin as a wakeup source. + * + * @param[in] pin The GPIO pin to set as a wakeup source. + * @param[in] edge The edge type (active high or active low) for the wakeup source. + **********************************************************************************************************************/ +void R_BSP_WakeupSourcePinSetRetained (bsp_io_wakeup_pin_t pin, bsp_io_wakeup_edge_t edge) +{ + bsp_io_port_pin_t port_pin = bsp_prv_wakeup_pin_to_port_pin(pin); + R_BSP_RetainedIoSet(port_pin); + R_BSP_WakeupSourcePinSet(pin, edge); +} + +/*******************************************************************************************************************//** + * Unsets the specified GPIO pin as a wakeup source. + * + * @param[in] pin The GPIO pin to unset as a wakeup source. + **********************************************************************************************************************/ +void R_BSP_WakeupSourcePinUnSet (bsp_io_wakeup_pin_t pin) +{ + uint32_t temp; + temp = RTC->GPIO_WAKEUP1_REG_b.GPIO_WAKEUP_EN_SEL; + temp &= ~pin; + RTC->GPIO_WAKEUP1_REG_b.GPIO_WAKEUP_EN_SEL = temp & 0x7FFU; +} + +/*******************************************************************************************************************//** + * @brief Convert PORT_PIN to WAKEUP_GPIO + * + * @param[in] port_pin bsp_io_port_pin_t + * + * @return bsp_io_wakeup_pin_t + **********************************************************************************************************************/ +bsp_io_wakeup_pin_t bsp_prv_port_pin_to_wakeup_gpio (bsp_io_port_pin_t port_pin) +{ + if (port_pin == BSP_IO_PORT_00_PIN_00) + { + return BSP_WAKEUP_GPIO_P0_00; + } + else if (port_pin == BSP_IO_PORT_00_PIN_08) + { + return BSP_WAKEUP_GPIO_P0_08; + } + else if (port_pin == BSP_IO_PORT_00_PIN_09) + { + return BSP_WAKEUP_GPIO_P0_09; + } + else if (port_pin == BSP_IO_PORT_00_PIN_10) + { + return BSP_WAKEUP_GPIO_P0_10; + } + else if (port_pin == BSP_IO_PORT_00_PIN_11) + { + return BSP_WAKEUP_GPIO_P0_11; + } + else if (port_pin == BSP_IO_PORT_00_PIN_12) + { + return BSP_WAKEUP_GPIO_P0_12; + } + else if (port_pin == BSP_IO_PORT_00_PIN_13) + { + return BSP_WAKEUP_GPIO_P0_13; + } + else if (port_pin == BSP_IO_PORT_01_PIN_10) + { + return BSP_WAKEUP_GPIO_P1_10; + } + else if (port_pin == BSP_IO_PORT_01_PIN_11) + { + return BSP_WAKEUP_GPIO_P1_11; + } + else if (port_pin == BSP_IO_PORT_01_PIN_12) + { + return BSP_WAKEUP_GPIO_P1_12; + } + else if (port_pin == BSP_IO_PORT_01_PIN_13) + { + return BSP_WAKEUP_GPIO_P1_13; + } + else + { + return 0; + } +} + +/*******************************************************************************************************************//** + * @brief Convert WAKEUP_GPIO to PORT_PIN + * + * @param[in] wakeup_gpio bsp_io_wakeup_pin_t + * + * @return bsp_io_port_pin_t + **********************************************************************************************************************/ +bsp_io_port_pin_t bsp_prv_wakeup_pin_to_port_pin (bsp_io_wakeup_pin_t wakeup_gpio) +{ + if (wakeup_gpio == BSP_WAKEUP_GPIO_P0_00) + { + return BSP_IO_PORT_00_PIN_00; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P0_08) + { + return BSP_IO_PORT_00_PIN_08; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P0_09) + { + return BSP_IO_PORT_00_PIN_09; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P0_10) + { + return BSP_IO_PORT_00_PIN_10; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P0_11) + { + return BSP_IO_PORT_00_PIN_11; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P0_12) + { + return BSP_IO_PORT_00_PIN_12; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P0_13) + { + return BSP_IO_PORT_00_PIN_13; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P1_10) + { + return BSP_IO_PORT_01_PIN_10; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P1_11) + { + return BSP_IO_PORT_01_PIN_11; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P1_12) + { + return BSP_IO_PORT_01_PIN_12; + } + else if (wakeup_gpio == BSP_WAKEUP_GPIO_P1_13) + { + return BSP_IO_PORT_01_PIN_13; + } + else + { + return BSP_IO_PORT_FF_PIN_FF; + } +} + +/*******************************************************************************************************************//** + * Sets the retention flag in the RTC register to indicate that retention memory is being used. + * + * @note During sleep, the RTC register is always on. The software records the status in the RTM_INFO register to + * indicate whether retention memory is being used. When reading the wakeup source, set RTM_INFO to bit 7 to + * check this. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM void R_BSP_RetainedMemFlagSet (void) +{ + RTC->RTM_CONTROL_REG_b.RTM_INFO = 1; +} + +/*******************************************************************************************************************//** + * Clears the retention memory flag in the RTC register. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM void R_BSP_RetainedMemFlagClear (void) +{ + RTC->RTM_CONTROL_REG_b.RTM_INFO = 0; +} + +/*******************************************************************************************************************//** + * Gets the retention memory flag. + * + * @return The retention memory flag. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM uint32_t R_BSP_RetainedMemFlagGet (void) +{ + return RTC->RTM_CONTROL_REG_b.RTM_INFO; +} + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * @brief Gets the sleep ID used when the system enters sleep mode. + * + * @return The sleep ID. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM uint32_t bsp_prv_pd_sleep_id_get (void) +{ + return RTC->RTM_CONTROL_REG_b.RTM_CTRL_PWR_DN_INFO; +} + +/*******************************************************************************************************************//** + * Sets the target wakeup time and sleep ID. + * + * @param[in] sleep_id The sleep ID for which to set the wakeup time. + * @param[in] wakeup_time The target wakeup time. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM void bsp_prv_pd_wakeup_counter_set (uint32_t sleep_id, uint64_t wakeup_time) +{ + RTC->RTM_CONTROL_REG_b.RTM_CTRL_PWR_DN_INFO = sleep_id & 0xf; + RTC->WAKEUP_CNT_1_REG_b.WAKEUP_CNT_1 = (uint32_t) (wakeup_time >> 32) & 0xf; + RTC->WAKEUP_CNT_0_REG_b.WAKEUP_CNT_0 = (uint32_t) (wakeup_time) & 0xffffffff; +} + +/*******************************************************************************************************************//** + * Gets the current value of the wake-up counter, which operates at 32kHz. + * + * @return The current wakeup time, represented as a 64-bit value. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM uint64_t bsp_prv_pd_wakeup_counter_get (void) +{ + uint64_t ret_time; + uint32_t * pret_time = (uint32_t *) &ret_time; + uint32_t temp1, temp2; + + /* Read wakeup counter */ + temp2 = RTC->WAKEUP_CNT_0_REG; + temp1 = RTC->WAKEUP_CNT_1_REG & 0x0f; + + memcpy(pret_time, &temp2, 4); + memcpy(pret_time + 1, &temp1, 4); + + return ret_time; +} + +/*******************************************************************************************************************//** + * @brief Enable RTC brown-out and black-out detection. + * + * This function enables the RTC brown-out and black-out detection circuits and sets the corresponding callback functions. + * + * @param[in] brown_callback The callback function to be called on a brown-out event. + * @param[in] black_callback The callback function to be called on a black-out event. + **********************************************************************************************************************/ +void bsp_rtc_enable_bod (BSP_RTC_BOD_CALLBACK_TYPE brown_callback, BSP_RTC_BOD_CALLBACK_TYPE black_callback) +{ + FSP_PARAMETER_NOT_USED(brown_callback); + FSP_PARAMETER_NOT_USED(black_callback); +#if BSP_DEVICE_REVISION == DEVICE_REV_A + if (brown_callback) + { + bsp_rtc_brown_callback = brown_callback; + } + + if (black_callback) + { + bsp_rtc_black_callback = black_callback; + } + + NVIC_EnableIRQ(RTC_IF_BROWN_IRQn); + NVIC_EnableIRQ(RTC_IF_BLACK_IRQn); + + RTC->BOR_CIRCUIT_REG_b.BR_OUT_CTRL = 0x05; + RTC->BOR_CIRCUIT_REG_b.BL_OUT_CTRL = 0x04; + + RTC->BOR_CIRCUIT_REG_b.BR_OUT_EN = 0x01; + RTC->BOR_CIRCUIT_REG_b.BL_OUT_EN = 0x01; + + RTC->ENABLE_CTRL_REG_b.BROWN_OUT_INT_EN = 0x01; + RTC->ENABLE_CTRL_REG_b.BLACK_OUT_INT_EN = 0x01; +#endif +} + +/*******************************************************************************************************************//** + * @brief Disable RTC brown-out and black-out detection. + * + * This function disables the RTC brown-out and black-out detection circuits. + **********************************************************************************************************************/ +void bsp_rtc_disable_bod (void) +{ + NVIC_DisableIRQ(RTC_IF_BROWN_IRQn); + NVIC_DisableIRQ(RTC_IF_BLACK_IRQn); + + RTC->BOR_CIRCUIT_REG_b.BR_OUT_EN = 0x00; + RTC->BOR_CIRCUIT_REG_b.BL_OUT_EN = 0x00; +} + +/*******************************************************************************************************************//** + * @brief Get the brown-out status. + * + * This function returns the current status of the brown-out detection circuit. + * + * @return The brown-out status. + **********************************************************************************************************************/ +int bsp_rtc_get_brown_out_status (void) +{ + return (int) RTC->BOR_CIRCUIT_REG_b.BR_STATUS_READ; +} + +/*******************************************************************************************************************//** + * @brief RTC black-out interrupt handler. + * + * This function is the interrupt handler for the RTC black-out event. It calls the registered black-out callback function. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM void RTC_IF_BLACK_Handler (void) +{ + if (bsp_rtc_black_callback) + { + bsp_rtc_black_callback(); + } +} + +/*******************************************************************************************************************//** + * @brief RTC brown-out interrupt handler. + * + * This function is the interrupt handler for the RTC brown-out event. It calls the registered brown-out callback function. + **********************************************************************************************************************/ +BSP_PLACE_CODE_IN_RAM void RTC_IF_BROWN_Handler (void) +{ + if (bsp_rtc_brown_callback) + { + bsp_rtc_brown_callback(); + } +} diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.h new file mode 100644 index 000000000000..d012f645a548 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_pd.h @@ -0,0 +1,229 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_PD_RA6W1_H +#define BSP_PD_RA6W1_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "bsp_rtc.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 + **********************************************************************************************************************/ + +/** + * Number of Power Domain IDs defined for this device + */ +#define BSP_PD_ID_COUNT (3) + +/* For retention memory bank*/ +#define RETENTION_MEM_NONE 0x00 +#define RETENTION_MEM_BANK0 0x01 // 0x00180000 ~ 0x00181fff +#define RETENTION_MEM_BANK1 0x02 // 0x00182000 ~ 0x00184000 +#define RETENTION_MEM_BANK2 0x04 // 0x00184000 ~ +#define RETENTION_MEM_BANK_ALL 0x07 // All + +/* Alias name of BSP_WAKEUP_RESET_WITH_RETENTION */ +#define BSP_WAKEUP_RETENTION (BSP_WAKEUP_RESET_WITH_RETENTION) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/* Hardware power domains.*/ +typedef enum e_bsp_power_domain +{ + BSP_PD_AON = 0, ///< Always on power domain + BSP_PD_PHY = 1, ///< PHY power domain + BSP_PD_MAC = 2, ///< MAC power domain +} bsp_power_domain_t; + +/* Wakeup edge for individual pins */ +typedef enum e_bsp_wakeup_edge +{ + BSP_WAKEUP_EDGE_LOW = 0, ///< Low + BSP_WAKEUP_EDGE_HIGH ///< High +} bsp_io_wakeup_edge_t; + +/* Wakeup pins */ +typedef enum e_bsp_wakeup_pin +{ + BSP_WAKEUP_GPIO_P0_00 = (0x01 << 0), + BSP_WAKEUP_GPIO_P0_08 = (0x01 << 1), + BSP_WAKEUP_GPIO_P0_09 = (0x01 << 2), + BSP_WAKEUP_GPIO_P0_10 = (0x01 << 3), + BSP_WAKEUP_GPIO_P0_11 = (0x01 << 4), + BSP_WAKEUP_GPIO_P0_12 = (0x01 << 5), + BSP_WAKEUP_GPIO_P0_13 = (0x01 << 6), + BSP_WAKEUP_GPIO_P1_10 = (0x01 << 7), + BSP_WAKEUP_GPIO_P1_11 = (0x01 << 8), + BSP_WAKEUP_GPIO_P1_12 = (0x01 << 9), + BSP_WAKEUP_GPIO_P1_13 = (0x01 << 10), +} bsp_io_wakeup_pin_t; + +// TIN-TODO: This enum was located in bsp_common and guarded with the same features as the RTC function. +// Consider moving this under a header file of the power manager. + +/* + * The value below consists of a bit mask and the rest is a combination of the corresponding values. + * These values are based on RTC->WAKEUP_SRC_CLR_SIG_REG + * BSP_WAKEUP_RESET 0x00 + * BSP_WAKEUP_SOURCE_GPIO 0x01 + * BSP_WAKEUP_SOURCE_WAKEUP_COUNTER 0x02 + * BSP_WAKEUP_SOURCE_POR 0x04 + * BSP_WAKEUP_SOURCE_WATCHDOG 0x08 + * BSP_WAKEUP_SENSOR 0x10 + * BSP_WAKEUP_PULSE 0x20 + * BSP_WAKEUP_TIMER 0x40 - Only in sleep 4/5 + * + * This value is based on RTC->RTM_INFO, written by software + * BSP_WAKEUP_RESET_WITH_RETENTION 0x80 + */ +typedef enum e_bsp_wakeup_source_mask +{ + BSP_WAKEUP_RESET = 0x00, ///< Internal reset + BSP_WAKEUP_SOURCE_GPIO = 0x01, ///< Boot from GPIO wake up signal + BSP_WAKEUP_SOURCE_WAKEUP_COUNTER = 0x02, ///< Boot from wake up counter + BSP_WAKEUP_GPIO_WAKEUP_COUNTER = 0x03, ///< Boot from wake up counter or GPIO wakeup + BSP_WAKEUP_SOURCE_POR = 0x04, ///< Boot from power on reset + BSP_WAKEUP_SOURCE_POR_GPIO = 0x05, ///< FPGA only + BSP_WAKEUP_SOURCE_WATCHDOG = 0x08, ///< Boot from RTC_watch dog (not cpu watchdog) + BSP_WAKEUP_WATCHDOG_GPIO = 0x09, ///< Boot from watch dog or GPIO wakeup + BSP_WAKEUP_SOURCE_SENSOR = 0x10, ///< Boot from sensor (ADC) + BSP_WAKEUP_SOURCE_PULSE = 0x20, ///< Boot from pulse sensor + + BSP_WAKEUP_SENSOR_GPIO = 0x11, ///< Boot from sensor or GPIO wakeup + BSP_WAKEUP_SENSOR_WAKEUP_COUNTER = 0x12, ///< Boot from sensor or wakeup counter + BSP_WAKEUP_SENSOR_GPIO_COUNTER = 0x13, ///< Boot from sensor or external or wakeup counter + BSP_WAKEUP_SENSOR_WATCHDOG = 0x18, ///< Boot from sensor or RTC watch dog + BSP_WAKEUP_SENSOR_GPIO_WATCHDOG = 0x19, ///< Boot from sensor or GPIO or watch dog + BSP_WAKEUP_RESET_WITH_RETENTION = 0x80, ///< Boot from internal reset and have retention info + BSP_WAKEUP_GPIO_WITH_RETENTION = 0x81, ///< Boot from GPIO and have retention info + BSP_WAKEUP_COUNTER_WITH_RETENTION = 0x82, ///< Boot from counter and have retention info (most common) + BSP_WAKEUP_GPIO_WAKEUP_COUNTER_WITH_RETENTION = 0x83, ///< Boot from GPIO or wakeup counter with retention + BSP_WAKEUP_WATCHDOG_WITH_RETENTION = 0x88, ///< Boot from RTC watch dog with retention + BSP_WAKEUP_WATCHDOG_GPIO_WITH_RETENTION = 0x89, ///< Boot from watch dog or GPIO + BSP_WAKEUP_SENSOR_WITH_RETENTION = 0x90, ///< Boot from sensor with retention + BSP_WAKEUP_SENSOR_GPIO_WITH_RETENTION = 0x91, ///< Boot from sensor or GPIO with retention + BSP_WAKEUP_SENSOR_WAKEUP_COUNTER_WITH_RETENTION = 0x92, ///< Boot from sensor or wakeup counter with retention + BSP_WAKEUP_SENSOR_GPIO_COUNTER_WITH_RETENTION = 0x93, ///< Boot from sensor or GPIO or wakeup counter with retention + BSP_WAKEUP_SENSOR_WATCHDOG_WITH_RETENTION = 0x98, ///< Boot from sensor or watchdog with retention + BSP_WAKEUP_SENSOR_GPIO_WATCHDOG_WITH_RETENTION = 0x99, ///< Boot from sensor or GPIO or watchdog with retention + + BSP_WAKEUP_ALLTIMER_WITH_RETENTION = 0xC2, ///< Boot from rtc, hw & mac-timer and have retention info (most common) + BSP_WAKEUP_HWTIMER_WITH_RETENTION = 0xC0, ///< Boot from hw & mac-timer and have retention info (most common) + + BSP_WAKEUP_SOURCE_UNKNOWN = 0xff, +} bsp_wakeup_source_mask_t; + +typedef uint32_t bsp_wakeup_source_t; + +typedef void (* BSP_RTC_BOD_CALLBACK_TYPE)(void); + +typedef struct +{ + void (* func)(void *); + void * param; +} BSP_RTC_TIME_EXP_CALLBACK_TYPE; + +/* Wakeup edge for individual pins */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/* Used internaly by bsp_pd.c */ +void bsp_prv_pd_masks_get(bsp_power_domain_t power_domain, uint32_t * sleep_mask, uint32_t * is_up_mask); + +/** + * @brief Enable a power domain by clearing its sleep status bit + * + * @param [in] sleep_mask mask for the power domain's SLEEP status bit + * @param [in] is_aon whether the power domain is part of the AON domain group + * + * @note Multiple power domains may be enabled if more than one bits are set in \p sleep_mask + */ +__STATIC_INLINE void bsp_prv_pd_enable (uint32_t sleep_mask, bool is_aon) +{ + FSP_PARAMETER_NOT_USED(is_aon); + + CRG_TOP->PMU_CTRL_REG &= ~sleep_mask; +} + +/** + * @brief Disable a power domain by setting its sleep status bit + * + * @param [in] sleep_mask mask for the power domain's SLEEP status bit + * @param [in] is_aon whether the power domain is part of the AON domain group + * + * @note Multiple power domains may be disabled if more than one bits are set in \p sleep_mask + */ +__STATIC_INLINE void bsp_prv_pd_disable (uint32_t sleep_mask, bool is_aon) +{ + FSP_PARAMETER_NOT_USED(is_aon); + CRG_TOP->PMU_CTRL_REG |= sleep_mask; +} + +/** + * @brief Check if a power domain by checking its is-up status bit + * + * @param [in] is_up_mask mask for the power domain's IS_UP status bit + * + * @return True iff the power domains corresponding to the set bits in \p is_up_mask are up. + * + * @note Multiple power domains may be checked if more than one bits are set in \p is_up_mask + */ +__STATIC_INLINE bool bsp_prv_pd_is_up_check (uint32_t is_up_mask) +{ + return (CRG_TOP->SYS_STATUS_REG & is_up_mask) == is_up_mask; +} + +bsp_wakeup_source_mask_t R_BSP_WakeupSourceGet(void); + +void SystemWakeupSourceUpdate(void); +void R_BSP_WakeupSourceClear(bool clear); + +bsp_io_wakeup_pin_t bsp_prv_port_pin_to_wakeup_gpio(bsp_io_port_pin_t port_pin); +bsp_io_port_pin_t bsp_prv_wakeup_pin_to_port_pin(bsp_io_wakeup_pin_t wakeup_gpio); +bsp_io_wakeup_pin_t R_BSP_WakeupSourcePinGet(void); +void R_BSP_WakeupSourcePinClear(void); +void R_BSP_WakeupSourcePinSet(bsp_io_wakeup_pin_t pin, bsp_io_wakeup_edge_t edge); +void R_BSP_WakeupSourcePinSetRetained(bsp_io_wakeup_pin_t pin, bsp_io_wakeup_edge_t edge); +void R_BSP_WakeupSourcePinUnSet(bsp_io_wakeup_pin_t pin); + +void R_BSP_RetainedMemFlagSet(void); +void R_BSP_RetainedMemFlagClear(void); +uint32_t R_BSP_RetainedMemFlagGet(void); + +void bsp_prv_pd_wakeup_counter_set(uint32_t sleep_id, uint64_t wakeup_time); +uint64_t bsp_prv_pd_wakeup_counter_get(void); +uint32_t bsp_prv_pd_sleep_id_get(void); + +void bsp_rtc_enable_bod(BSP_RTC_BOD_CALLBACK_TYPE brown_callback, BSP_RTC_BOD_CALLBACK_TYPE black_callback); +void bsp_rtc_disable_bod(void); +int bsp_rtc_get_brown_out_status(void); + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** @} (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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.c new file mode 100644 index 000000000000..d3b97e5748d1 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.c @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include +#include +#include + +#include "bsp_api.h" +#include "bsp_rand.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +uint32_t prng_rand (void) +{ + uint32_t old_value, new_value; + + HW_ACC->PRNG_OP_EN_REG = 1U; + old_value = HW_ACC->PRNG_REG_CAL_VAL; + + do + { + HW_ACC->PRNG_REQ_CLR_REG = HW_ACC_PRNG_REQ_CLR_REG_PRNG_REQ_GET_Msk; + new_value = HW_ACC->PRNG_REG_CAL_VAL; + + if ((new_value == 0) && (old_value == 0)) + { + /* Sometimes we hang indefinitely in this do-while loop (new_value is always zero, just as old_value). + * It is reproducible without critical sections for a sequence like: + * + * srand(rand()); + * rand(); + * + * It seems to be a HW design issue. This workaround solves it as far as I can test. + * PRNG has not been revised, so it should behave in the same way for both AA and BA hardware revisions. + * Note: adding busy-wait loops before/after rand()/srand() doesn't seem to help.. + * TODO: + * - How can we confirm that previous PRNG operation is finished and we can issue next one? + */ + HW_ACC->PRNG_REQ_CLR_REG = HW_ACC_PRNG_REQ_CLR_REG_PRNG_REQ_CLR_Msk; + } + } while (new_value == old_value); + + HW_ACC->PRNG_OP_EN_REG = 0; + + return new_value; +} + +uint32_t trng_rand(void) +{ + uint32_t val = 0; + + if (!trng_init_regs()) + { + return 0; + } + + for (int tries = 0; tries < TRNG_RETRY_LIMIT; tries++) + { + if (trng_is_valid()) + { + /* Clear up the interrupt status register */ + CC312->CC312_RNG_ICR_REG = ~0UL; + val = CC312->CC312_EHR_DATA_0_REG; + goto out; + } + + /* Clear interrupt/status and try again */ + CC312->CC312_RNG_ICR_REG = ~0UL; + } + +out: + + /* Disable signal for the random source */ + CC312->CC312_RND_SOURCE_ENABLE_REG = 0; + + /* Disable the HW RNG clock */ + CC312->CC312_RNG_CLK_ENABLE_REG = 0; + + return val; +} + +bool trng_init_regs (void) +{ + int poll_retry_limit = 0; + + /* Reset the RNG block */ + CC312->CC312_RNG_SW_RESET_REG = 0x1; + + do + { + /* enable the HW RNG clock */ + CC312->CC312_RNG_CLK_ENABLE_REG = 1; + + /* Set the number of rng_clk cycles between two consecutive samples. + * If the Von-Neumann is bypassed, the minimum value for sample counter + * must not be less than decimal seventeen - set to 20 dec + */ + CC312->CC312_SAMPLE_CNT1_REG = TRNG_DEF_SAMPLES_CNT; + + if (++poll_retry_limit == TRNG_REG_POLL_RETRY_LIMIT) + { + return false; + } + + /* Enable the HW RNG clock and set sample counter value until it is set correctly */ + } while (CC312->CC312_SAMPLE_CNT1_REG != TRNG_DEF_SAMPLES_CNT); + + /* Set the length of the oscillator ring to longest possible length - 3 */ + CC312->CC312_TRNG_CONFIG_REG_b.CC312_RND_SRC_SEL = 3; + + /* Bypass auto correlate, VNC and CRNGT are not bypassed and kept activated */ + CC312->CC312_TRNG_DEBUG_CONTROL_REG_b.CC312_VNC_BYPASS = 1; + CC312->CC312_TRNG_DEBUG_CONTROL_REG_b.CC312_TRNG_CRNGT_BYPASS = 0; + CC312->CC312_TRNG_DEBUG_CONTROL_REG_b.CC312_AUTO_CORRELATE_BYPASS = 1; + + /* Enable signal for the random source */ + CC312->CC312_RND_SOURCE_ENABLE_REG = 1; + + return true; +} + +bool trng_is_valid (void) +{ + int poll_retry_limit = 0; + + while ((CC312->CC312_TRNG_VALID_REG != 1) && + (CC312->CC312_RNG_ISR_REG_b.CC312_RNG_ISR_EHR_VALID != 1)) + { + if (++poll_retry_limit == TRNG_REG_POLL_RETRY_LIMIT) + { + return false; + } + } + + if (CC312->CC312_RNG_ISR_REG_b.CC312_RNG_ISR_AUTOCORR_ERR != 0) + { + return false; + } + + poll_retry_limit = 0; + + while ((CC312->CC312_EHR_DATA_0_REG == 0x0) || (CC312->CC312_EHR_DATA_0_REG == 0x80000000)) + { + if (++poll_retry_limit == TRNG_REG_POLL_RETRY_LIMIT) + { + return false; + } + } + + return true; +} + +/*******************************************************************************************************************//** + * Implementation of srand() function from standard C library. + * + * @param[in] seed A seed value to use for a new sequence of pseudo-random integers to be returned by rand(). These + * sequences are repeatable by calling srand() with the same seed value. + * + * @note RA6W1 PRNG is using polynomial calculation, which is similar to CRC. Providing the same seed to PRNG after POR + * boot (not SW reset), results in PRNG generating a deterministic sequence (the same pattern). However PRNG seed + * is designed to accumulate the current calculation without resetting the poly calculation. Hence to implement + * proper standard C library srand() semantics, need to use hardware CRC/SHA/AES instead of PRNG. + **********************************************************************************************************************/ +void srand (unsigned seed) +{ + uint32_t prng_seed = (uint32_t) seed & HW_ACC_PRNG_SEED_REG_PRNG_SEED_VAL_Msk; + + /* Seeding prng with a 0 not allowed because: + * - causes constant 0 output from prng + * - causes infinite loop in prng_rand() due to constant 0 output + */ + if (prng_seed == 0U) + { + prng_seed = 1U; + } + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + HW_ACC->PRNG_OP_EN_REG = 1U; + HW_ACC->PRNG_PAR_TYPE_REG = PRNG_PAR_TYPE_32_BITS; + HW_ACC->PRNG_SEED_REG = prng_seed; + HW_ACC->PRNG_REQ_CLR_REG = HW_ACC_PRNG_REQ_CLR_REG_PRNG_REQ_CLR_Msk; + HW_ACC->PRNG_OP_EN_REG = 0U; + FSP_CRITICAL_SECTION_EXIT; +} + +/*******************************************************************************************************************//** + * Implementation of rand() function from standard C library. + * + * @retval a pseudo-random integer in the range 0 to RAND_MAX inclusive. + * @note This function is not reentrant. + **********************************************************************************************************************/ +int rand (void) +{ + return (int) (prng_rand() % (((uint32_t) RAND_MAX) + 1U)); +} diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.h new file mode 100644 index 000000000000..a3f362a867d9 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rand.h @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_RAND_RA6W1_H +#define BSP_RAND_RA6W1_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/** 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 PRNG_PAR_TYPE_32_BITS (2U) +#define TRNG_DEF_SAMPLES_CNT 0X14 +#define TRNG_REG_POLL_RETRY_LIMIT 10000 +#define TRNG_RETRY_LIMIT 8 + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +bool trng_init_regs(void); +bool trng_is_valid(void); +uint32_t prng_rand(void); +uint32_t trng_rand(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/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtc.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtc.h new file mode 100644 index 000000000000..0750f0a54077 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtc.h @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_RTC_RA6W1_H +#define BSP_RTC_RA6W1_H + +#include "bsp_api.h" +#ifdef UNIT_TESTING + #include "fake_regs.h" +#endif +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_PRV_RTC_CLOCK_TO_SEC(clk) (((unsigned long long) clk) >> 15ULL) +#define __uptime() BSP_PRV_RTC_CLOCK_TO_SEC(R_BSP_SystemRtcCountGet()) // Get elapsed time after system power up(for 64bit) + +// TIN-TODO: This macro was located in bsp_common and guarded with the same features as the RTC function. +// Consider moving this under a header file of the power manager. + +/* Alias name of BSP_WAKEUP_RESET_WITH_RETENTION */ +#define BSP_WAKEUP_RETENTION (BSP_WAKEUP_RESET_WITH_RETENTION) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Gets the clock count of RTC. + * + * @return The value of the RTC free running counter. + **********************************************************************************************************************/ +static inline uint64_t R_BSP_SystemRtcCountGet (void) +{ + volatile uint64_t ret_time = 0; + + /* Check RTC register mirror done */ + if (RTC->RTC_IRQ_STATUS_REG_b.RTC_IRQ_STATUS == 0x01) + { + /* faster to access register on rtc thourgh mirror.*/ + ret_time |= RTC->RTC_MR_FRC0_REG; + ret_time |= (uint64_t) (RTC->RTC_MR_FRC1_REG) << 32; + } + else + { + /* direct to access register on rtc */ + ret_time |= RTC->FRC_CNT_0_REG; + ret_time |= (uint64_t) RTC->FRC_CNT_1_REG << 32; + } + + return ret_time; +} + +/*******************************************************************************************************************//** + * Calculate difference between two RTC values. Both values are assumed to be 36 bits wide. + * + * @param [in] from The first 36-bit value. + * @param [in] to The second 36-bit value. + * + * @return The RTC difference between the two values. + **********************************************************************************************************************/ +static inline uint64_t R_BSP_SystemRtcDiff (uint64_t from, uint64_t to) +{ + const int64_t full_range = (1LL << 36); + const int64_t half_range = full_range >> 1; + const int64_t diff = (int64_t) to - (int64_t) from; + + if (diff >= 0) + { + /* 'from' comes after 'to', but it wrapped : 'to' comes after 'from', no wrapping */ + return diff >= half_range ? 0 : (uint64_t) (diff); + } + else + { + /* 'from' comes after 'to', no wrapping : 'to' comes after 'from', but it wrapped */ + return diff >= -half_range ? 0 : (uint64_t) (diff + full_range); + } +} + +/*******************************************************************************************************************//** + * Busy wait function based on the RTC clock. + * + * @param [in] delay_clk The number of RTC clock cycles that this function will block for. + **********************************************************************************************************************/ +static inline void R_BSP_SystemRtcWaitClk (int32_t delay_clk) +{ + uint64_t prev_clk = R_BSP_SystemRtcCountGet(); + do + { + uint64_t curr_clk = R_BSP_SystemRtcCountGet(); + + if (prev_clk != curr_clk) + { + delay_clk--; + prev_clk = curr_clk; + } + } while (delay_clk > 0); +} + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtm.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtm.h new file mode 100644 index 000000000000..5f71f707098d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_rtm.h @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +// TIN-TODO: The definitions were moved here from Tin's bsp_common.h. Consider removing them from here +// and adding them to another header file. + +#ifndef BSP_RTM_RA6W1_H +#define BSP_RTM_RA6W1_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define RTM_TIME_PTR ((time_in_rtm_t *) dg_configAPPSUPP_RTM_ADDR) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/* Temporary global time rtm structure located in parallel to ‘_dpm_flag_in_rtm’ structure, + * till dpm rtm mapping re-order (moving it to a common place) will be done. */ +typedef struct _time_in_rtm +{ + long __timezone; /* timezone */ + unsigned long long systime_offset; /* msec */ + unsigned long long rtc_oldtime; /* msec */ +} time_in_rtm_t; + +/* Support 64bit time */ +typedef unsigned long long __time64_t; +typedef __time64_t ra6w1_time_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.c new file mode 100644 index 000000000000..6498dbcdb086 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.c @@ -0,0 +1,169 @@ +/** + **************************************************************************************** + * + * @file bsp_src.c + * + * @brief Implementation of the Audio Unit SRC Low Level Driver. + * + * Copyright (c) 2016-2020 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ +#include "bsp_src.h" + +#define SRC_CLK 32000 /* SRC_CLK must be 32000 Hz according to design limitation */ + +/** + * \brief Clear the SRC over/underflow indications + * + * \param [in] id identifies SRC1, SRC2 + * \param[in] io Input/Output selection (IN or OUT) + */ +#define HW_SRC_CLEAR_FLOW_ERROR(id, io) \ + while (SRC_IF->APU_SRC_CTRL_REG_b.SRC_ ## io ## _OVFLOW || \ + SRC_IF->APU_SRC_CTRL_REG_b.SRC_ ## io ## _UNFLOW) { \ + SRC_IF->APU_SRC_CTRL_REG_b.SRC_ ## io ## _FLOWCLR = 1; \ + } \ + SRC_IF->APU_SRC_CTRL_REG_b.SRC_ ## io ## _FLOWCLR = 0; + +static uint32_t R_BSP_src_calc_sampling_frequency (uint32_t sample_rate, uint8_t divider, uint8_t * iir_setting) +{ + FSP_ASSERT(divider > 0); + FSP_ASSERT(iir_setting != NULL); + + if (sample_rate > 170000) + { + *iir_setting = 3; + } + else if (sample_rate > 85000) + { + *iir_setting = 1; + } + else + { + *iir_setting = 0; + } + + sample_rate /= (*iir_setting) + 1; + uint64_t sampling_frequency = 4096 * (uint64_t) sample_rate * (uint64_t) divider; + + return (sampling_frequency / 100) & 0xFFFFFF; +} + +void R_BSP_src_init (HW_SRC_ID id, bsp_src_config_t * config) +{ + uint8_t divider = 1; + uint8_t iir_setting; + + config->id = id; + + CRG_APU->APU_SRC_CLK_REG_b.SRC_CLK_DIV = 1; + CRG_APU->APU_AUD_CLK_REG_b.AUD_PCLK_DIV = 1; + + CRG_APU->APU_SRC_CLK_REG_b.SRC_CLK_EN = 0; + CRG_APU->APU_SRC_CLK_REG_b.SRC_CLK_DIV = (uint8_t) (divider & 0x0F); + CRG_APU->APU_SRC_CLK_REG_b.SRC_CLK_EN = 1; + + if (config->in_sample_rate > 0) + { + uint32_t sampling_frequency = R_BSP_src_calc_sampling_frequency(config->in_sample_rate, divider, &iir_setting); + SRC_IF->APU_SRC_IN_FS_REG_b.SRC_IN_FS = (uint32_t) (sampling_frequency & 0xFFFFFF); + SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_DS = (uint8_t) (iir_setting & 0x03); + } + + if (config->out_sample_rate > 0) + { + uint32_t sampling_frequency = R_BSP_src_calc_sampling_frequency(config->out_sample_rate, divider, &iir_setting); + SRC_IF->APU_SRC_OUT_FS_REG_b.SRC_OUT_FS = (uint32_t) (sampling_frequency & 0xFFFFFF); + SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_US = (uint8_t) (iir_setting & 0x03); + } + + ///////////////////////////////////////////// + ///////// CRG_APU + ///////////////////////////////////////////// + + CRG_APU->APU_AUD_CLK_REG_b.AUD_CLK_DIV = 1; + CRG_APU->APU_AUD_CLK_REG_b.AUD_CLK_EN = 1; + + APU_AUD->APU_MAIN_DIV_REG_b.APU_MAIN_DIV_EN = 1; + APU_AUD->APU_MAIN_DIV_REG_b.APU_MAIN_DIV = 1; + + CRG_APU->APU_SRC_CLK_REG_b.SRC_CLK_EN = 1; + + SRC_IF->APU_SRC_CTRL_REG_b.SRC_RESYNC = 1; + + // Clear input data registers + R_BSP_src_write_input(config->id, 1, 0); + R_BSP_src_write_input(config->id, 2, 0); + + HW_SRC_CLEAR_FLOW_ERROR(config->id, IN); + HW_SRC_CLEAR_FLOW_ERROR(config->id, OUT); +} + +BSP_SRC_FLOW_STATUS R_BSP_src_get_flow_status (HW_SRC_ID id, BSP_SRC_DIRECTION direction) +{ + BSP_SRC_FLOW_STATUS status = HW_SRC_FLOW_OK; + FSP_PARAMETER_NOT_USED(id); + + switch (direction) + { + case HW_SRC_IN: + { + if (SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_OVFLOW) + { + status |= HW_SRC_FLOW_OVER; + } + + if (SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_UNFLOW) + { + status |= HW_SRC_FLOW_UNDER; + } + + HW_SRC_CLEAR_FLOW_ERROR(id, IN); + break; + } + + case HW_SRC_OUT: + { + if (SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_OVFLOW) + { + status |= HW_SRC_FLOW_OVER; + } + + if (SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_UNFLOW) + { + status |= HW_SRC_FLOW_UNDER; + } + + HW_SRC_CLEAR_FLOW_ERROR(id, OUT); + break; + } + + default: + { + break; + } + } + + return status; +} diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.h new file mode 100644 index 000000000000..dfa00339d559 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_src.h @@ -0,0 +1,580 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/** + **************************************************************************************** + * + * @file bsp_src.h + * + * @brief Definition of the API for the Audio Unit SRC Low Level Driver. + * + * Copyright (c) 2016-2020 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_SRC_RA6W1_H +#define BSP_SRC_RA6W1_H + +#include +#include +#include "bsp_api.h" + +typedef void * HW_SRC_ID; + +#define HW_SRC1 ((void *) SRC_IF_BASE) + +#define SRC_FIFO_ENABLE (0x1 << 0) +#define SRC_FIFO_ENABLE_CH1_INPUT (0x1 << 10) +#define SRC_FIFO_ENABLE_CH2_INPUT (0x1 << 11) +#define SRC_FIFO_ENABLE_CH1_OUTPUT (0x1 << 26) +#define SRC_FIFO_ENABLE_CH2_OUTPUT (0x1 << 27) + +/** + * \brief Input/Output direction + */ +typedef enum +{ + HW_SRC_IN, /**< SRC input */ + HW_SRC_OUT, /**< SRC output */ +} BSP_SRC_DIRECTION; + +/** + * \brief Flow status + */ +typedef enum +{ + HW_SRC_FLOW_OK = 0, /**< No flow errors */ + HW_SRC_FLOW_OVER, /**< Overflow errors */ + HW_SRC_FLOW_UNDER, /**< Underflow errors */ + HW_SRC_FLOW_OVER_UNDER, /**< Both overflow and underflow errors */ +} BSP_SRC_FLOW_STATUS; + +/** + * \brief Input/Output selection + */ +typedef enum +{ + HW_SRC_PCM = 1, /**< PCM interface */ + HW_SRC_PDM, /**< PDM interface */ + HW_SRC_REGS, /**< SRC registers */ + HW_SRC_FIFO, /**< SRC FIFO */ + HW_SRC_SELECTION_SIZE +} BSP_SRC_SELECTION; + +/** + * \brief SRC sync multiplexer + * + */ +typedef enum +{ + HW_SRC_INPUT_MUX_SRC_IN_REG, /**< SRC IN REG */ + HW_SRC_INPUT_MUX_SRC_OUT_REG, /**< SRC OUT REG */ + HW_SRC_INPUT_MUX_PCM_OUT_REG, /**< set to PCM_OUT_REG */ + HW_SRC_INPUT_MUX_SYNC_DIV, /**< set to SYNC DIV */ + HW_SRCx_MUX_IN_SIZE +} BSP_SRC_SYNC; + +/** + * \brief SRC configuration structure definition + */ +typedef struct +{ + HW_SRC_ID id; /**< identifies SRC */ + uint16_t src_clk; /**< SRC clock in kHz with allowed values (in kHz): + * 128, 160, 200, 250, 256, 320, 400, 500, 640, 800, + * 1000, 1280, 1600, 2000, 3200, 4000, 6400, 8000, 16000, 32000 */ + uint32_t in_sample_rate; /**< Input sampling rate in Hz with allowed values: + * 0, 8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000, 192000 */ + uint32_t out_sample_rate; /**< Input sampling rate in Hz with allowed values: + * 0, 8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000, 192000 */ + BSP_SRC_SELECTION data_input; /**< The SRC input */ + BSP_SRC_SELECTION data_output; /**< The SRC output */ +} bsp_src_config_t; + +/* ************************************************************************* + * + * ENABLE-DISABLE FUNCTIONS + * + * ************************************************************************* */ + +/** + * \brief Enable SRC + * + * \param [in] id identifies SRC1 + */ +__STATIC_INLINE void R_BSP_src_enable (HW_SRC_ID id) +{ + FSP_PARAMETER_NOT_USED(id); + + /* + * The under/overflows that occur due to the reconfiguration can be + * ignored, so we disable under/overflow notifications until + * (SRC_IN_OK == 1 && SRC_OUT_OK == 1). + */ + SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_FLOWCLR = 1; + SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_FLOWCLR = 1; + + SRC_IF->APU_SRC_CTRL_REG_b.SRC_EN = 1; +#if 0 + while (REG_GETF(SRC_IF, APU_SRC_CTRL_REG, SRC_IN_OK) == 0 && + REG_GETF(SRC_IF, APU_SRC_CTRL_REG, SRC_OUT_OK) == 0) + { + ; + } +#endif + while (SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_OK == 0 && + SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_OK == 0) + { + ; + } + + SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_FLOWCLR = 0; + SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_FLOWCLR = 0; +} + +/** + * \brief Disable SRC + * + * \param [in] id identifies SRC1 + */ +__STATIC_INLINE void R_BSP_src_disable (HW_SRC_ID id) +{ + FSP_PARAMETER_NOT_USED(id); + SRC_IF->APU_SRC_CTRL_REG_b.SRC_EN = 0; +} + +/** + * \brief Check if SRC is enabled + * + * \param [in] id identifies SRC1, + * \return + * \retval True if it is enabled + * \retval False if it is disabled + * + */ +__STATIC_INLINE bool R_BSP_src_is_enabled (HW_SRC_ID id) +{ + FSP_PARAMETER_NOT_USED(id); + + return SRC_IF->APU_SRC_CTRL_REG_b.SRC_EN; +} + +/** + * \brief Enable SRC FIFO. FIFO is used to store samples from/to SRC + * + * \param [in] id identifies SRC1 + * \param[in] direction The SRC FIFO direction. + * HW_SRC_IN - FIFO is used to store samples from memory to SRC + * HW_SRC_OUT - FIFO is used to store samples from SRC to memory + */ + +__STATIC_INLINE void R_BSP_src_enable_fifo (HW_SRC_ID id, BSP_SRC_DIRECTION direction) +{ + FSP_PARAMETER_NOT_USED(id); + uint32_t reg_rd = SRC_IF->APU_SRC_FIFO_CTRL_REG_b.FIFO_CTRL; + switch (direction) + { + case HW_SRC_IN: + { + SRC_IF->APU_SRC_FIFO_CTRL_REG_b.FIFO_CTRL = reg_rd | SRC_FIFO_ENABLE | SRC_FIFO_ENABLE_CH1_INPUT | + SRC_FIFO_ENABLE_CH2_INPUT; + SRC_IF->APU_SRC_CTRL_REG_b.SRC_FIFO_IN1_ENABLE = 1; + SRC_IF->APU_SRC_CTRL_REG_b.SRC_FIFO_IN2_ENABLE = 1; + break; + } + + case HW_SRC_OUT: + { + SRC_IF->APU_SRC_FIFO_CTRL_REG_b.FIFO_CTRL = reg_rd | SRC_FIFO_ENABLE | SRC_FIFO_ENABLE_CH1_OUTPUT | + SRC_FIFO_ENABLE_CH2_OUTPUT; + SRC_IF->APU_SRC_CTRL_REG_b.SRC_FIFO_OUT1_ENABLE = 1; + SRC_IF->APU_SRC_CTRL_REG_b.SRC_FIFO_OUT2_ENABLE = 1; + break; + } + + default: + { + break; + } + } +} + +/** + * \brief Disable SRC FIFO. On each SRC request, one sample is serviced. + * + * \param [in] id identifies SRC1 + */ +__STATIC_INLINE void R_BSP_src_disable_fifo (HW_SRC_ID id) +{ + FSP_PARAMETER_NOT_USED(id); + SRC_IF->APU_SRC_FIFO_CTRL_REG_b.FIFO_CTRL = 0; + SRC_IF->APU_SRC_CTRL_REG_b.SRC_FIFO_OUT2_ENABLE = 0; +} + +/** + * \brief Check if SRC FIFO is enabled. FIFO is used to store samples from/to SRC + * + * \param [in] id identifies SRC1 + * \return + * \retval True if it is enabled + * \retval False if it is disabled + */ +__STATIC_INLINE bool R_BSP_src_is_fifo_enabled (HW_SRC_ID id) +{ + FSP_PARAMETER_NOT_USED(id); + FSP_ASSERT(id == HW_SRC1); + + return SRC_IF->APU_SRC_FIFO_CTRL_REG_b.FIFO_CTRL; +} + +/* ************************************************************************* + * + * SET FUNCTIONS + * + * ************************************************************************* */ + +/** + * \brief Set Automatic Conversion mode + * + * \param [in] id identifies SRC1 + * \param[in] direction Input/Output direction of data flow allowed values: + * HW_SRC_IN, HW_SRC_OUT + */ +__STATIC_INLINE void R_BSP_src_set_automode (HW_SRC_ID id, BSP_SRC_DIRECTION direction) +{ + FSP_PARAMETER_NOT_USED(id); + if (direction == HW_SRC_IN) + { + SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_AMODE = 1; + } + else + { + SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_AMODE = 1; + } +} + +/** + * \brief Clear Automatic Conversion mode. Use manual mode + * + * \param [in] id identifies SRC1 + * \param[in] direction Input/Output direction of data flow allowed values: + * HW_SRC_IN, HW_SRC_OUT + */ +__STATIC_INLINE void R_BSP_src_set_manual_mode (HW_SRC_ID id, BSP_SRC_DIRECTION direction) +{ + FSP_PARAMETER_NOT_USED(id); + if (direction == HW_SRC_IN) + { + SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_AMODE = 0; + } + else + { + SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_AMODE = 0; + } +} + +/** + * \brief Set Automatic Conversion mode sync + * + * \param [in] id identifies SRC1 + * \param[in] direction Input/Output direction of data flow allowed values: + * HW_SRC_IN, HW_SRC_OUT + * \param[in] sync SRC Automode sync + */ +__STATIC_INLINE void R_BSP_src_set_automode_sync (HW_SRC_ID id, BSP_SRC_DIRECTION direction, BSP_SRC_SYNC sync) +{ + FSP_PARAMETER_NOT_USED(id); + if (direction == HW_SRC_IN) + { + APU_DSP->APU_SYNC_SRC1IN_SEL_REG_b.SRC1_IN_A_SEL = sync; + } + else + { + APU_DSP->APU_SYNC_SRC1OUT_SEL_REG_b.SRC1_OUT_A_SEL = sync; + } +} + +/** + * \brief Select the SRC mux + * + * \note call this function once SRC interface initialization is done + * + * \param[in] input the SRC input + * \param[in] output the SRC output + * \param[in, out] config the configuration structure of SRC + */ +__STATIC_INLINE void R_BSP_src_select_mux (BSP_SRC_SELECTION input, BSP_SRC_SELECTION output, bsp_src_config_t * config) +{ + uint32_t temp_read; + + config->data_input = input; + + switch (input) + { + case HW_SRC_PDM: + { + SRC_IF->APU_SRC_CTRL_REG_b.SRC_PDM_EN = 1; + break; + } + + case HW_SRC_PCM: + { + SRC_IF->APU_SRC_CTRL_REG_b.SRC_PDM_EN = 0; + temp_read = APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL; + APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL = (uint8_t) (temp_read & ~(0x3UL)); + break; + } + + case HW_SRC_REGS: + { + SRC_IF->APU_SRC_CTRL_REG_b.SRC_PDM_EN = 0; + temp_read = APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL; + APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL = (uint8_t) (temp_read | (0x1 << 0)); + + break; + } + + case HW_SRC_FIFO: + { + SRC_IF->APU_SRC_CTRL_REG_b.SRC_PDM_EN = 0; + temp_read = APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL; + APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL = (uint8_t) ((temp_read | (0x1 << 1)) & ~(0x1UL << 0)); + break; + } + + default: + { + break; + } + } + + switch (output) + { + case HW_SRC_REGS: + { + temp_read = APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL; + APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL = (uint8_t) ((temp_read | (0x1 << 2)) & ~(0x1UL << 3)); + break; + } + + case HW_SRC_FIFO: + { + temp_read = APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL; + APU_DSP->APU_MUX_CTRL_REG_b.APU_DSP_MUX_CTL = (uint8_t) ((temp_read | (0x1 << 3)) & ~(0x1UL << 2)); + break; + } + + default: + { + break; + } + } +} + +/** + * \brief Write data to an input SRC register + * + * \param [in] id identifies SRC1 + * \param[in] stream The input stream (1 or 2) + * \param[in] value The data to be written + */ +__STATIC_INLINE void R_BSP_src_write_input (HW_SRC_ID id, uint8_t stream, uint32_t value) +{ + FSP_PARAMETER_NOT_USED(id); + switch (stream) + { + case 1: + { + SRC_IF->APU_SRC_IN1_REG_b.SRC_IN = value; + break; + } + + case 2: + { + SRC_IF->APU_SRC_IN2_REG_b.SRC_IN = value; + break; + } + + default: + { + break; + } + } +} + +/** + * \brief Write data to an input SRC FIFO register + * + * \param [in] id identifies SRC1 + * \param[in] stream The input stream (1 or 2) + * \param[in] value The data to be written + */ +__STATIC_INLINE void R_BSP_src_write_fifo_input (HW_SRC_ID id, uint8_t stream, uint32_t value) +{ + FSP_PARAMETER_NOT_USED(id); + switch (stream) + { + case 1: + { + SRC_FIFO_IF->APU_SRC_FIFO_IN1_REG_b.SRC_IN = value; + break; + } + + case 2: + { + SRC_FIFO_IF->APU_SRC_FIFO_IN2_REG_b.SRC_IN = value; + break; + } + + default: + { + break; + } + } +} + +/* ************************************************************************* + * + * GET FUNCTIONS + * + * ************************************************************************* */ + +/** + * \brief Get the mode + * + * \param [in] id identifies SRC1 + * \param[in] direction Input/Output direction of data flow allowed values: + * HW_SRC_IN, HW_SRC_OUT + * \return mode + * \retval 0 for manual mode + * \retval 1 for automatic mode + */ +__STATIC_INLINE bool R_BSP_src_is_auto_mode (HW_SRC_ID id, BSP_SRC_DIRECTION direction) +{ + FSP_ASSERT(id == HW_SRC1); + + if (direction == HW_SRC_IN) + { + return SRC_IF->APU_SRC_CTRL_REG_b.SRC_IN_AMODE; + } + else + { + return SRC_IF->APU_SRC_CTRL_REG_b.SRC_OUT_AMODE; + } +} + +/** + * \brief Read data from an output SRC register + * + * \param [in] id identifies SRC1 + * \param[in] stream The output stream (1 or 2) + * + * \return The data read + */ +__STATIC_INLINE uint32_t R_BSP_src_read_output (HW_SRC_ID id, uint8_t stream) +{ + FSP_ASSERT(id == HW_SRC1); + + switch (stream) + { + case 1: + { + return SRC_IF->APU_SRC_OUT1_REG_b.SRC_OUT; + } + + case 2: + { + return SRC_IF->APU_SRC_OUT2_REG_b.SRC_OUT; + } + + default: + FSP_ASSERT(0); + + return 0; + } +} + +/** + * \brief Read data from an output SRC FIFO register + * + * \param [in] id identifies SRC1 + * \param[in] stream The output stream (1 or 2) + * + * \return The data read + */ +__STATIC_INLINE uint32_t R_BSP_src_read_fifo_output (HW_SRC_ID id, uint8_t stream) +{ + FSP_ASSERT(id == HW_SRC1); + + switch (stream) + { + case 1: + { + return SRC_FIFO_IF->APU_SRC_FIFO_OUT1_REG_b.SRC_OUT; + } + + case 2: + { + return SRC_FIFO_IF->APU_SRC_FIFO_OUT2_REG_b.SRC_OUT; + } + + default: + FSP_ASSERT(1); + + return 0; + } +} + +/** + * \brief Check if SRC flow errors have occurred and clear the indication + * + * \param [in] id identifies SRC1 + * \param[in] direction Input/Output direction + * + * \return The flow status + */ +BSP_SRC_FLOW_STATUS R_BSP_src_get_flow_status(HW_SRC_ID id, BSP_SRC_DIRECTION direction); + +/** + * \brief Initialize the SRC + * + * Configure the SRC sampling frequencies, the input down-sampler and output up-sampler IIR filters, + * the conversion modes, the divider of the internally generated clock and enable the clock + * + * \note call R_BSP_src_enable() once SRC interface initialization is done + * + * \param[in] id identifies SRC1 + * \param[out] config configuration structure of SRC + */ +void R_BSP_src_init(HW_SRC_ID id, bsp_src_config_t * config); + +#endif /* BSP_SRC_RA6W1_H */ + +/** + * \} + * \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.c new file mode 100644 index 000000000000..01e3cc98cf74 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.c @@ -0,0 +1,1735 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "bsp_tcs.h" +#include "config/bsp_memory_defaults_ra6w1.h" +#include +#include +#include + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#define OTP_CS_END (0x0000C0 * 4) +#define OTP_CS_SIZE (640) + +#define CS_START_CMD 0xA5A5A5A5 +#define CS_BOOTER_VAL 0xE6000000 + +#define CS_DATA_TYPE_MASK 0xFF000000 +#define CS_DATA_TYPE_FILED 0x80000000 + +#define CS_DATA_VAL 0xE1000000 +#define CS_SDK_VAL 0xE9000000 +#define CS_STX_CONFIG 0xE8000000 // 2 bytes of data follow +#define CS_HW_CFG_VAL 0xEC000000 // 1 byte of data follow +#define CS_MIN_FW_VAL 0xEB000000 +#define CS_DELAYCMD 0xED000000 // 1 byte of data follow +#define CS_CRC_SKIP 0xEE000000 // 1 byte of data follow +#define CS_STOP_CMD 0x00000000 +#define CS_EMPTY_VAL 0xFFFFFFFF + +#define CS_SDK_VAL_GID_MASK 0x000000FF +#define CS_SDK_VAL_LEN_MASK 0x0000FF00 +#define CS_SDK_VAL_SETID_MASK 0x00FF0000 + +#define OTP_CS_ADDRESS 0x00000100 +#define CS_MAX_SIZE (TCS_DATA_SIZE * 4) // 256 entries of 4 bytes + +/* 0x50060F9C value used in booter code */ +#define MAX_REG_ADDR 0x5100155C + +#define EMPTY 0xFF +#define NOT_RETAINED 0 +#define RETAINED 1 + +#define MAX_ATTRIBUTE 20 +#define MAX_DATA_SIZE 100 +#define HEADER_SIZE 0x60 +#define HEADER_STRUCT_SIZE 0x10 +#define SIZE_RETAINED_TCS_ATTRIBUTES (0xFF - HEADER_SIZE) + +#define CS_VALID_PATTERN 0xA5A5 + +#define XTAL_REG 0x400C0204 +#define TCS_TAG_MAC_ADDR 0xe9000221 +#define RENESAS_MAC_UAP_LOWER_MASK 0xff000000 + +#define T2_NULL_DATA_SIZE 0x7 +#define T2_PROGRAM_VER_START 0x21U +#define T2_PROGRAM_VER_END 0x23U + +/** + * The TCS data placed in shared memory + */ +#define SYS_TCS_SHARED (shared_tcs.sys_tcs_shared) +#define SYS_TCS_RETAINED (retained_tcs->sys_tcs_shared) +#define SYS_TCS (current_tcs->sys_tcs_shared) + +/* For fixing T2 production */ +#define TCS_PATCH_BASE 0x75 +#define TCS_PROD_MAC 0xe9000221 +#define TCS_PROD_VER 0xe90001c3 + +#if TCS_INFO + #define INFO_PRINTF(...) printf(__VA_ARGS__) +#else + #define INFO_PRINTF(...) +#endif + +#define SOURCE_DATA_INIT(base, sections) \ + { \ + .base_address = base, \ + .num_sections = FSP_ARRAY_LENGTH(sections), \ + .section_addresses = sections, \ + } + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef struct +{ + uint32_t reg_address; + bool trimmed; +} reg_trimmed_t; + +typedef struct +{ + bsp_tcs_shared_t sys_tcs_shared; +} tcs_t; + +typedef struct +{ + uint32_t base_address; + uint8_t num_sections; + const uint32_t * section_addresses; +} source_data_t; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +static const uint32_t renesas_oui_list[] = {0x749050, 0x7c152d}; + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ +tcs_t * current_tcs; +tcs_t * retained_tcs = (tcs_t *) dg_configTCS_RTM_ADDR; +bsp_tcs_attr_t * retained_tcs_attributes = (bsp_tcs_attr_t *) (dg_configTCS_RTM_ADDR + HEADER_STRUCT_SIZE); +uint32_t * retained_tcs_buffer = (uint32_t *) (dg_configTCS_RTM_ADDR + HEADER_SIZE); + +/** + * Pointer to the TCS data as parser by the TCS parser + * \note This variable is initialized to a value other than zero + * so to be placed in the .data section + */ +uint32_t * tcs_data = (uint32_t *) 0xFFFFFFFF; +bsp_tcs_source_t tcs_source = EMPTY; + +#if BSP_FEATURE_TCS_SYS_RAM +tcs_t shared_tcs; +bsp_tcs_attr_t tcs_attributes[MAX_ATTRIBUTE]; +uint32_t tcs_buffer[MAX_DATA_SIZE]; + +static const uint32_t default_section[] = {0}; +static const uint32_t otp_sections[] = {0, 0x300}; +#endif + +/* Max of array is 52 bytes, current it's 52 bytes (row is 4 bytes, current 13) */ +static const bsp_tcs_attr_t based_on_tcs_attributes[MAX_ATTRIBUTE] = +{ + {BSP_TCS_GROUP_MAC_ADDR, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_NA, + NOT_RETAINED, EMPTY, 0}, + {BSP_TCS_GROUP_SKIP, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_PD_SYS, + NOT_RETAINED, EMPTY, + 0}, + {BSP_TCS_GROUP_PD_SYS, BSP_TCS_TYPE_REG_PAIR, BSP_TCS_DOMAIN_PD_SYS, + NOT_RETAINED, EMPTY, + 0}, + {BSP_TCS_GROUP_PD_ADC, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_PD_COM, + NOT_RETAINED, EMPTY, + 0}, + + {BSP_TCS_GROUP_PD_WIFI_TRIM_RF_HPI, BSP_TCS_TYPE_REG_PAIR, BSP_TCS_DOMAIN_PD_RAD, + RETAINED, EMPTY, + 0}, + {BSP_TCS_GROUP_PD_WIFI_TRIM_LUT, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_PD_RAD, + RETAINED, EMPTY, + 0}, + {BSP_TCS_GROUP_PD_WIFI_TRIM_XTAL, BSP_TCS_TYPE_REG_PAIR, BSP_TCS_DOMAIN_PD_RAD, + RETAINED, EMPTY, + 0}, + + /* Production Test Section */ + {BSP_TCS_GROUP_CHIP_ID, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_NA, + NOT_RETAINED, EMPTY, + 0}, + {BSP_TCS_GROUP_PROD_INFO, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_NA, + NOT_RETAINED, EMPTY, + 0}, + {BSP_TCS_GROUP_PROD_WAFER, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_NA, + NOT_RETAINED, EMPTY, + 0}, + {BSP_TCS_GROUP_TESTPROGRAM_VERSION, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_NA, + NOT_RETAINED, EMPTY, + 0}, + {BSP_TCS_GROUP_PROD_SW_IP, BSP_TCS_TYPE_TRIM_VAL, BSP_TCS_DOMAIN_NA, + NOT_RETAINED, EMPTY, + 0}, + {0, BSP_TCS_TYPE_RESERVED, 0, + 0, 0, + 0} +}; /* GID 18 */ + +#if BSP_FEATURE_TCS_SYS_RAM +static const bsp_tcs_source_t tcs_parsing_order[] = +{ + BSP_TCS_OTP, + BSP_TCS_OQSPI, + #if (USE_TCS_NVMS == 1) + #ifdef MEMORY_NVMS_OTP_ADDRESS + BSP_TCS_NVMS, + #endif /* MEMORY_NVMS_OTP_ADDRESS */ + #endif /* USE_TCS_NVMS == 1*/ +}; + +static const source_data_t source_data[] = +{ + /* TCS_OTP */ + SOURCE_DATA_INIT(MEMORY_OTP_BASE + OTP_CS_ADDRESS, otp_sections), + + /* TCS_OQSPI */ + SOURCE_DATA_INIT(MEMORY_OQSPIC_S_BASE, default_section), +}; + +static const uint32_t zero_parttern[7] = {0, }; +#endif + +/*********************************************************************************************************************** + * Private functions + **********************************************************************************************************************/ +static uint32_t bsp_mac_reverse (register uint32_t x) +{ + x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1)); + x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2)); + + return ((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4); +} + +static bool bsp_mac_is_renesas_oui (uint32_t upper_mac, uint32_t lower_mac) +{ + uint8_t idx = 0; + + for (idx = 0; idx < sizeof(renesas_oui_list) / sizeof(renesas_oui_list[0]); ++idx) + { + uint32_t rev_oui = bsp_mac_reverse(renesas_oui_list[idx]); + + if ((upper_mac == (rev_oui >> 8)) && + ((lower_mac & RENESAS_MAC_UAP_LOWER_MASK) >> 24 == (rev_oui & 0xFF))) + { + return true; + } + } + + return false; +} + +static uint16_t bsp_based_attributes_size (void) +{ + return sizeof(based_on_tcs_attributes) / sizeof(based_on_tcs_attributes[0]); +} + +static uint16_t bsp_based_gid_to_idx (uint16_t gid) +{ + uint16_t i; + for (i = 0; i < sizeof(based_on_tcs_attributes) / sizeof(based_on_tcs_attributes[0]); i++) + { + if (gid == based_on_tcs_attributes[i].value_gid) + { + return i; + } + } + + return --i; +} + +static uint16_t bsp_tcs_gid_to_idx (uint16_t gid) +{ + uint16_t i; + for (i = 0; i < SYS_TCS.tcs_attributes_size; i++) + { + if (gid == SYS_TCS.tcs_attributes[i].value_gid) + { + return i; + } + } + + return --i; +} + +#if BSP_FEATURE_TCS_SYS_RAM +static uint16_t bsp_retained_gid_to_idx (uint16_t gid) +{ + uint16_t i; + for (i = 0; i < SYS_TCS_RETAINED.tcs_attributes_size; i++) + { + if (gid == SYS_TCS_RETAINED.tcs_attributes[i].value_gid) + { + return i; + } + } + + return --i; +} + +static bsp_tcs_type_t bsp_tcs_get_value_type (bsp_tcs_gid_t gid) +{ + BSP_CHECK_DEBUG(gid < BSP_TCS_GROUP_MAX); + + if (bsp_tcs_gid_to_idx(gid) == (SYS_TCS.tcs_attributes_size - 1)) + { + return BSP_TCS_TYPE_RESERVED; + } + + return SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].value_type; +} + +static bool bsp_tcs_set_tcs (bsp_tcs_gid_t gid, uint32_t is_set) +{ + if (is_set) + { + if (bsp_based_gid_to_idx(gid) == (bsp_based_attributes_size() - 1)) + { + current_tcs = &shared_tcs; + + return false; + } + + if (based_on_tcs_attributes[bsp_based_gid_to_idx(gid)].is_retained == false) + { + #if BSP_FEATURE_TCS_SYS_RAM + current_tcs = &shared_tcs; + #else + current_tcs = retained_tcs; + #endif + } + else + { + current_tcs = retained_tcs; + } + } + else + { + #if BSP_FEATURE_TCS_SYS_RAM + current_tcs = &shared_tcs; + tcs_data = SYS_TCS_SHARED.tcs_data; + #endif + } + + if (SYS_TCS.cs_valid != CS_VALID_PATTERN) + { + return false; + } + + return true; +} + +static void init_tcs_attributes_array (void) +{ + memset(tcs_buffer, 0, sizeof(tcs_buffer)); + + memcpy(tcs_attributes, based_on_tcs_attributes, sizeof(based_on_tcs_attributes)); + SYS_TCS_SHARED.tcs_data = tcs_buffer; + SYS_TCS_SHARED.tcs_attributes = tcs_attributes; + + memset(retained_tcs_buffer, 0, SIZE_RETAINED_TCS_ATTRIBUTES); + + SYS_TCS_RETAINED.tcs_data = retained_tcs_buffer; + SYS_TCS_RETAINED.tcs_attributes = retained_tcs_attributes; +} + +static uint32_t fetch_tcs_entry (bsp_tcs_source_t source, uint32_t address) +{ + uint32_t cs_value = CS_EMPTY_VAL; + + if (source < FSP_ARRAY_LENGTH(source_data)) + { + cs_value = *((uint32_t *) ((uint32_t) source_data[source].base_address + address)); + } + + return cs_value; +} + +#endif + +static void store_tcs (uint32_t address, uint8_t gid_len, bsp_tcs_source_t source, bool reverse) +{ + int i = 0; + uint16_t index; + BSP_CHECK_DEBUG(tcs_data); + + /* Address --> GID header */ + uint32_t value = fetch_tcs_entry(source, address); + bsp_tcs_gid_t gid = (uint8_t) (value & CS_SDK_VAL_GID_MASK); + + if (gid >= BSP_TCS_GROUP_MAX) + { + return; + } + + if (bsp_tcs_gid_to_idx(gid) == (SYS_TCS.tcs_attributes_size - 1)) + { + return; + } + + bsp_tcs_type_t type = bsp_tcs_get_value_type(gid); + + if (type == BSP_TCS_TYPE_TRIM_VAL) + { + /* BSP_TCS_TYPE_TRIM_VAL could have different sizes during parsing + * it is acceptable multiple instances with same GID to have different sizes, + * only the newest will be finally stored. We cannot identify the newest but + * at least the ones that fit will be stored until the newest is parsed + */ + if (gid_len != SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size) + { + return; + } + } + + /* Start of storing TCS entries */ + index = SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].start; + + /* For BSP_TCS_TYPE_REG_PAIR search tcs_data to find empty slot + * For BSP_TCS_TYPE_TRIM_VAL fragmentation is not supported and always the newest entries are stored + */ + if (type == BSP_TCS_TYPE_REG_PAIR) + { + uint16_t gid_start = index; + uint8_t gid_size = SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size; + + /* Search tcs_data to find empty slot */ + while (tcs_data[index] != 0) + { + /* Check if the index is inside the allocated space in tcs_data[] for this GID */ + BSP_CHECK_DEBUG(index < (gid_start + gid_size)); + if (index >= (gid_start + gid_size)) + { + return; + } + + /* Go to next register address */ + index += 2; + } + } + + while (i < gid_len) /* 4 bytes entries */ + { + address += 4; + if (reverse == true) + { + tcs_data[index] = bsp_mac_reverse(fetch_tcs_entry(source, address)); + } + else + { + tcs_data[index] = fetch_tcs_entry(source, address); + } + + index++; + i++; + } +} + +/* The calculated size in bytes, that is the number + * of entries * sizeof(int) + * returns the size in bytes + */ +static uint16_t get_size_of_cs (bsp_tcs_source_t source) +{ + uint32_t value = 0; + uint32_t address = 0; + uint16_t max_size = CS_MAX_SIZE; + uint16_t size = 0; + uint32_t i; + + for (i = 0; i < source_data[source].num_sections; i++) + { + address = source_data[source].section_addresses[i]; + if ((value = fetch_tcs_entry(source, address)) != CS_START_CMD) + { + /* This section does not contain CS */ + continue; + } + + /* Check next entry */ + address += 4; + while (address < max_size) + { + value = fetch_tcs_entry(source, address); + + if ((value == CS_STOP_CMD) || (value == CS_EMPTY_VAL)) + { + /* End of CS */ + break; + } + else if (value <= MAX_REG_ADDR) + { + /* Address value pair parsed by bootrom, skip this value */ + if (value == XTAL_REG) + { + SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(BSP_TCS_GROUP_PD_WIFI_TRIM_XTAL)].size = 2; + } + + address += 0x4; + } + else if (((value & CS_DATA_TYPE_MASK) > CS_DATA_TYPE_FILED) && ((value & CS_DATA_TYPE_MASK) < CS_DATA_VAL)) + { + address += 0x4; + address += 0x4; + } + else if (((value & CS_DATA_TYPE_MASK) == CS_BOOTER_VAL) || ((value & CS_DATA_TYPE_MASK) == CS_STX_CONFIG) || + (value == CS_MIN_FW_VAL)) + { + address += 0x4; + } + else if ((value & CS_DATA_TYPE_MASK) == CS_SDK_VAL) + { + /* SDK value */ + uint8_t tcs_len = (value & CS_SDK_VAL_LEN_MASK) >> 8; + bsp_tcs_gid_t gid = (uint8_t) (value & CS_SDK_VAL_GID_MASK); + uint8_t setid = (value & CS_SDK_VAL_SETID_MASK) >> 16; + + /* Skip next tcs values. */ + + if ((gid >= BSP_TCS_GROUP_MAX) || (setid != 0x00)) + { + /* Skip this entry */ + address += tcs_len * 4; + address += 0x4; + continue; + } + + if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_TRIM_VAL) + { + /*always keep the last found size */ + if (SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size != tcs_len) + { + uint32_t tmp_dest[10]; + for (i = 0; i < 10; i++) + { + tmp_dest[i] = fetch_tcs_entry(source, address + (i * 4)); + } + + if (((tmp_dest[1] >= T2_PROGRAM_VER_START)) && (tmp_dest[9] == TCS_TAG_MAC_ADDR)) + { + /* H/W workaround T2 production */ + if (tmp_dest[2] == XTAL_REG) + { + SYS_TCS_SHARED.tcs_attributes + [bsp_tcs_gid_to_idx(BSP_TCS_GROUP_PD_WIFI_TRIM_XTAL)].size = 2; + } + + if (!memcmp(tmp_dest + 2, zero_parttern, 7 * sizeof(uint32_t)) || + !memcmp(tmp_dest + 4, zero_parttern, 5 * sizeof(uint32_t))) + { + tcs_len += T2_NULL_DATA_SIZE; + } + } + + /* Update with new size */ + size -= (uint16_t) (4 * SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size); + size += (uint16_t) (4 + tcs_len); + SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size = tcs_len & 0xf; + } + + address += tcs_len * 4; // Skip next tcs values. + } + else if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_REG_PAIR) + { + /* Check that BSP_TCS_TYPE_REG_PAIR values are of an even number */ + if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_REG_PAIR) + { + BSP_CHECK_DEBUG((tcs_len & 0x01) == 0); + } + + /* Size should be in bytes */ + size += (uint16_t) (4 * tcs_len); + SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size += tcs_len; + address += tcs_len * 4; // Skip next tcs values. + } + else if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_HPI_REG_PAIR) + { + /* Size should be in bytes */ + size += (uint16_t) (4 * tcs_len); + SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size += tcs_len; + address += tcs_len * 4; // Skip next tcs values. + } + else + { + address += tcs_len * 4; + } + } + + /* Go to next word this value is not related to TCS */ + address += 0x4; + } + } + + return size; +} + +static void store_cs_attributes (bsp_tcs_source_t source, uint16_t size) +{ + uint32_t value = 0; + uint32_t index = 0; + uint32_t address; + uint32_t i; + + for (i = 0; i < source_data[source].num_sections; i++) + { + address = source_data[source].section_addresses[i]; + if ((value = fetch_tcs_entry(source, address)) != CS_START_CMD) + { + /* This section does not contain CS */ + continue; + } + + address += 4; + + while (address < size) + { + value = fetch_tcs_entry(source, address); + + if ((value == CS_STOP_CMD) || (value == CS_EMPTY_VAL)) + { + /* End of CS */ + break; + } + else if (value <= MAX_REG_ADDR) + { + /* Address - value pair */ + if (value == XTAL_REG) + { + index = + SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(BSP_TCS_GROUP_PD_WIFI_TRIM_XTAL)].start; + tcs_data[index] = fetch_tcs_entry(source, address); + tcs_data[index + 1] = fetch_tcs_entry(source, address + 4); + } + + address += 0x4; + } + else if (((value & CS_DATA_TYPE_MASK) > CS_DATA_TYPE_FILED) && ((value & CS_DATA_TYPE_MASK) < CS_DATA_VAL)) + { + address += 0x4; + address += 0x4; + } + else if ((value == CS_BOOTER_VAL) || (value == CS_MIN_FW_VAL) || + ((value & CS_DATA_TYPE_MASK) == CS_STX_CONFIG)) + { + /* Skip booter value and minimun FW version value */ + address += 0x4; + } + else if ((value & CS_DATA_TYPE_MASK) == CS_SDK_VAL) + { + /* SDK value */ + uint8_t gid_len = (value & CS_SDK_VAL_LEN_MASK) >> 8; + uint8_t setid = (value & CS_SDK_VAL_SETID_MASK) >> 16; + bsp_tcs_gid_t gid = (uint8_t) (value & CS_SDK_VAL_GID_MASK); + uint32_t tmp_dest[10]; + uint32_t tmp_address = address + 4; + + if (gid == BSP_TCS_GROUP_TESTPROGRAM_VERSION) + { + for (i = 0; i < 10; i++) + { + tmp_dest[i] = fetch_tcs_entry(source, address + (i * 4)); + } + + if (((tmp_dest[1] >= T2_PROGRAM_VER_START)) && (tmp_dest[9] == TCS_TAG_MAC_ADDR)) + { + /* H/W workaround T2 production */ + if (tmp_dest[2] == XTAL_REG) + { + index = + SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(BSP_TCS_GROUP_PD_WIFI_TRIM_XTAL)].start; + tcs_data[index] = tmp_dest[2]; + tcs_data[index + 1] = tmp_dest[3]; + } + + if (!memcmp(tmp_dest + 2, zero_parttern, 7 * sizeof(uint32_t)) || + !memcmp(tmp_dest + 4, zero_parttern, 5 * sizeof(uint32_t))) + { + gid_len += T2_NULL_DATA_SIZE; + } + } + + store_tcs(address, gid_len, source, 0); + } + else if (gid == BSP_TCS_GROUP_MAC_ADDR) + { + tmp_dest[0] = fetch_tcs_entry(source, tmp_address); + tmp_dest[1] = fetch_tcs_entry(source, tmp_address + 4); + if ((gid == BSP_TCS_GROUP_MAC_ADDR) && bsp_mac_is_renesas_oui(tmp_dest[1], tmp_dest[0])) + { + store_tcs(address, gid_len, source, 1); + } + else + { + store_tcs(address, gid_len, source, 0); + } + } + else if (setid == 0x00) + { + /* store entries with SET ID 0x00 */ + store_tcs(address, gid_len, source, 0); + } + + /* Skip next tcs values. */ + address += gid_len * 4; + } + + /* Advance address by 4 bytes */ + address += 0x4; + } + } +} + +static bool bsp_tcs_get_item_in_otp_cs (const uint32_t item, uint32_t * dest, uint16_t * size) +{ + volatile bsp_tcs_source_t source = BSP_TCS_OTP; + volatile uint32_t address, tmp_address; + volatile uint32_t value = 0; + volatile uint16_t max_size = CS_MAX_SIZE; + volatile uint32_t i, e; + volatile bool ret = false; + + *size = 0; + for (i = 0; i < source_data[source].num_sections; i++) + { + address = source_data[source].section_addresses[i]; + value = fetch_tcs_entry(source, address); + if (value != CS_START_CMD) + { + continue; + } + + address += 0x4; + + while (address < max_size) + { + value = fetch_tcs_entry(source, address); + if ((value == CS_STOP_CMD) || (value == CS_EMPTY_VAL)) + { + /* End of CS */ + break; + } + else if (value <= MAX_REG_ADDR) + { + /* Address - value pair */ + if (item == value) + { + *dest = fetch_tcs_entry(source, address + 4); + *size = 1; + } + + /* Skip value entry */ + address += 0x4; + } + else if (((value & CS_DATA_TYPE_MASK) > CS_DATA_TYPE_FILED) && ((value & CS_DATA_TYPE_MASK) < CS_DATA_VAL)) + { + address += 0x4; + address += 0x4; + } + else if (((value & CS_DATA_TYPE_MASK) == CS_BOOTER_VAL) || ((value & CS_DATA_TYPE_MASK) == CS_STX_CONFIG) || + (value == CS_MIN_FW_VAL)) + { + address += 0x4; + } + else if ((value & CS_DATA_TYPE_MASK) == CS_SDK_VAL) + { + uint8_t tcs_len = (value & CS_SDK_VAL_LEN_MASK) >> 8; + bsp_tcs_gid_t gid = (uint8_t) (value & CS_SDK_VAL_GID_MASK); + uint8_t setid = (value & CS_SDK_VAL_SETID_MASK) >> 16; + uint32_t tmp_dest[10]; + + if ((item > MAX_REG_ADDR) && (gid == (item & CS_SDK_VAL_GID_MASK))) + { + tmp_address = address + 4; + *size = tcs_len; + if (gid == BSP_TCS_GROUP_MAC_ADDR) + { + tmp_dest[0] = fetch_tcs_entry(source, tmp_address); + tmp_dest[1] = fetch_tcs_entry(source, tmp_address + 4); + if (bsp_mac_is_renesas_oui(tmp_dest[1], tmp_dest[0])) + { + for (e = 0; e < tcs_len; e++) + { + dest[e] = bsp_mac_reverse(fetch_tcs_entry(source, tmp_address + e * 4)); + } + } + else + { + for (e = 0; e < tcs_len; e++) + { + dest[e] = fetch_tcs_entry(source, tmp_address + e * 4); + } + } + } + else + { + for (e = 0; e < tcs_len; e++) + { + dest[e] = fetch_tcs_entry(source, tmp_address + e * 4); + } + } + } + + if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_TRIM_VAL) + { + if (gid == BSP_TCS_GROUP_TESTPROGRAM_VERSION) + { + for (i = 0; i < 10; i++) + { + tmp_dest[i] = fetch_tcs_entry(source, address + (i * 4)); + } + + if (((tmp_dest[1] >= T2_PROGRAM_VER_START)) && (tmp_dest[9] == TCS_TAG_MAC_ADDR)) + { + /* H/W workaround T2 production */ + if (tmp_dest[2] == XTAL_REG) + { + dest[0] = tmp_dest[3]; + } + + if (!memcmp(tmp_dest + 2, zero_parttern, 7 * sizeof(uint32_t)) || + !memcmp(tmp_dest + 4, zero_parttern, 5 * sizeof(uint32_t))) + { + tcs_len += T2_NULL_DATA_SIZE; + } + } + } + + address += tcs_len * 4; // Skip next tcs values + } + else if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_REG_PAIR) + { + if ((item > MAX_REG_ADDR) && (gid == (item & CS_SDK_VAL_GID_MASK))) + { + address += tcs_len * 4; // Skip next tcs values. + } + else + { + tmp_address = address + 4; + for (e = 0; e < tcs_len / 2; e += 2) + { + value = fetch_tcs_entry(source, tmp_address + e * 4); + if (item == value) + { + *dest = fetch_tcs_entry(source, tmp_address + e * 4 + 1); + *size = 1; + } + } + + address += tcs_len * 4; // Skip next tcs values. + } + } + else if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_HPI_REG_PAIR) + { + address += tcs_len * 4; // Skip next tcs values. + } + else + { + address += tcs_len * 4; // Skip next tcs values. + } + + if ((gid >= BSP_TCS_GROUP_MAX) || (setid != 0x00)) + { + address += 0x4; // Skip this entry + continue; + } + } + + address += 0x4; // advance address by 4 bytes + } + + ret = true; + } + + return ret; +} + +static uint32_t bsp_tcs_get_otp_size (uint16_t * size, uint32_t item, uint16_t * item_count) +{ + uint32_t value = 0; + uint32_t address = 0; + uint32_t i = 0; + uint16_t max_size = CS_MAX_SIZE; + + *size = 0; + *item_count = 0; + + address = source_data[BSP_TCS_OTP].section_addresses[0]; + if ((value = fetch_tcs_entry(BSP_TCS_OTP, address)) != CS_START_CMD) + { + + // This section does not contain CS + return 0; + } + + /* Check next entry */ + address += 4; + while (address < max_size) + { + value = fetch_tcs_entry(BSP_TCS_OTP, address); + + if ((value == CS_STOP_CMD) || (value == CS_EMPTY_VAL)) + { + /* End of CS */ + break; + } + + if (value <= MAX_REG_ADDR) + { + /* Address-value pair parsed by bootrom, skip this value */ + address += 0x4; + if (item == value) + { + (*item_count)++; + } + } + else if (((value & CS_DATA_TYPE_MASK) > CS_DATA_TYPE_FILED) && ((value & CS_DATA_TYPE_MASK) < CS_DATA_VAL)) + { + address += 0x4; + address += 0x4; + } + else if (((value & CS_DATA_TYPE_MASK) == CS_BOOTER_VAL) || ((value & CS_DATA_TYPE_MASK) == CS_STX_CONFIG) || + (value == CS_MIN_FW_VAL)) + { + address += 0x4; + } + else if ((value & CS_DATA_TYPE_MASK) == CS_SDK_VAL) + { + uint8_t tcs_len = (value & CS_SDK_VAL_LEN_MASK) >> 8; + bsp_tcs_gid_t gid = (uint8_t) (value & CS_SDK_VAL_GID_MASK); + uint8_t setid = (value & CS_SDK_VAL_SETID_MASK) >> 16; + uint32_t tmp_address = 0; + uint32_t e = 0; + + if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_TRIM_VAL) + { + uint32_t tmp_dest[10]; + for (i = 0; i < 10; i++) + { + tmp_dest[i] = fetch_tcs_entry(BSP_TCS_OTP, address + (i * 4)); + } + + if (((tmp_dest[1] >= T2_PROGRAM_VER_START)) && (tmp_dest[9] == TCS_TAG_MAC_ADDR)) + { + /* H/W workaround T2 production */ + if (!memcmp(tmp_dest + 2, zero_parttern, 7 * sizeof(uint32_t)) || + !memcmp(tmp_dest + 4, zero_parttern, 5 * sizeof(uint32_t))) + { + tcs_len += T2_NULL_DATA_SIZE; + } + } + + address += tcs_len * 4; // Skip next tcs values. + } + else if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_REG_PAIR) + { + for (e = 0; e < tcs_len / 2; e += 2) + { + value = fetch_tcs_entry(BSP_TCS_OTP, tmp_address + e * 4); + if (item == value) + { + fetch_tcs_entry(BSP_TCS_OTP, tmp_address + e * 4 + 1); + (*item_count)++; + } + } + + address += tcs_len * 4; // Skip next tcs values. + } + else if (bsp_tcs_get_value_type(gid) == BSP_TCS_TYPE_HPI_REG_PAIR) + { + address += tcs_len * 4; // Skip next tcs values. + } + else + { + address += tcs_len * 4; // Skip next tcs values. + } + + if ((item > MAX_REG_ADDR) && (gid == (item & CS_SDK_VAL_GID_MASK))) + { + (*item_count)++; + } + + if ((gid >= BSP_TCS_GROUP_MAX) || (setid != 0x00)) + { + address += 0x4; // Skip this entry + continue; + } + } + + /* Go to next word this value is not related to TCS */ + address += 0x4; + } + + *size = (uint16_t) address; + + return true; +} + +static bool t2_production_patch (void) +{ + uint32_t src[15] = {0, }; + uint32_t result = 0; + const uint32_t fix_blank1[2] = {0xe9000602, 0x0}; + const uint32_t fix_blank2[2] = {0xe9000402, 0x0}; + + /* Read OTP data */ + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + bsp_otp_read(src, TCS_PATCH_BASE, 15); + + /* Enter programming mode */ + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + + if ((src[9] != TCS_PROD_MAC) || (src[0] != TCS_PROD_VER)) + { + goto exit; + } + + /* Check conditions and apply patch */ + if (!memcmp(src + 2, zero_parttern, 7 * sizeof(uint32_t))) + { + bsp_otp_prog((uint32_t *) fix_blank1, TCS_PATCH_BASE + 2, 1); + printf("-fix1 success\r\n"); + } + else if (!memcmp(src + 4, zero_parttern, 5 * sizeof(uint32_t))) + { + bsp_otp_prog((uint32_t *) fix_blank2, TCS_PATCH_BASE + 4, 1); + printf("-fix2 success\r\n"); + } + else + { + result = false; + printf("-fix fail\r\n"); + } + +exit: + bsp_otp_mode_set(BSP_OTP_MODE_READ); + bsp_otp_close(); + + return result; +} + +static bool bsp_tcs_read_item (uint32_t item, uint32_t * dest) +{ + uint16_t item_size = 0; + + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + if (item > MAX_REG_ADDR) + { + bsp_tcs_get_item_in_otp_cs(item, dest, &item_size); + + if (item_size > 0) + { + return true; + } + else + { + return false; + } + } + else + { + bsp_tcs_get_item_in_otp_cs(item, dest, &item_size); + if (item_size > 0) + { + return true; + } + else + { + return false; + } + } +} + +static bool bsp_tcs_write_item (uint32_t item, uint32_t * dest, uint32_t word_size, check_option_t check_option) +{ + uint16_t otp_size = 0, size = 0; + uint16_t item_write_count; + uint32_t cs_start[2] = {CS_START_CMD, 0}; + uint32_t tmp_dest[30]; + uint32_t i; + bool ret = 0; + + if (word_size > 30) + { + return false; + } + + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + + switch (check_option) + { + case CHECK_OPTION_FORCE: + { + /* Force write */ + bsp_tcs_get_otp_size(&otp_size, item, &item_write_count); + if (otp_size == 0) + { + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + bsp_otp_prog(cs_start, (OTP_CS_ADDRESS / 4) + otp_size / 4, 1); + bsp_otp_prog(&item, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 1, 1); + bsp_otp_prog(dest, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 2, word_size); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + bsp_otp_close(); + ret = true; + } + else if (otp_size < (OTP_CS_SIZE - ((word_size + 1) * 4))) + { + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + bsp_otp_prog(&item, (OTP_CS_ADDRESS / 4) + otp_size / 4, 1); + bsp_otp_prog(dest, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 1, word_size); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + ret = true; + } + else + { + INFO_PRINTF("[TCS] Over size otp \r\n"); + ret = false; + } + + break; + } + + case CHECK_OPTION_EMPTY: + { + /* Write if only empty, success if write, */ + bsp_tcs_get_otp_size(&otp_size, item, &item_write_count); + if (otp_size == 0) + { + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + bsp_otp_prog(cs_start, (OTP_CS_ADDRESS / 4) + otp_size / 4, 1); + bsp_otp_prog(&item, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 1, 1); + bsp_otp_prog(dest, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 2, word_size); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + bsp_otp_close(); + ret = true; + } + else if ((otp_size < (OTP_CS_SIZE - ((word_size + 1) * 4))) && (item_write_count == 0)) + { + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + bsp_otp_prog(&item, (OTP_CS_ADDRESS / 4) + otp_size / 4, 1); + bsp_otp_prog(dest, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 1, word_size); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + ret = true; + } + else + { + ret = false; + } + + break; + } + + case CHECK_OPTION_DIFFERENT: + { + /* Write if different success if write to compare between existing mac and new mac */ + bsp_tcs_get_otp_size(&otp_size, item, &item_write_count); + bsp_tcs_get_item_in_otp_cs(item, tmp_dest, &size); + if (otp_size == 0) + { + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + bsp_otp_prog(cs_start, (OTP_CS_ADDRESS / 4) + otp_size / 4, 1); + bsp_otp_prog(&item, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 1, 1); + bsp_otp_prog(dest, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 2, word_size); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + bsp_otp_close(); + ret = true; + } + else if (memcmp(tmp_dest, dest, word_size * 4) == 0) + { + ret = false; + } + else if ((otp_size < (OTP_CS_SIZE - ((word_size + 1) * 4)))) + { + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + bsp_otp_prog(&item, (OTP_CS_ADDRESS / 4) + otp_size / 4, 1); + bsp_otp_prog(dest, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 1, word_size); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + ret = true; + } + else + { + ret = false; + } + + break; + } + + case CHECK_OPTION_SKIP_EXISTS: + { + /* Skip if already written */ + bsp_tcs_get_otp_size(&otp_size, item, &item_write_count); + if (otp_size == 0) + { + ret = false; + } + else if ((item_write_count > 0)) + { + ret = true; + } + else if ((otp_size < (OTP_CS_SIZE - ((word_size + 1) * 4))) && (item_write_count == 0)) + { + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + bsp_otp_prog(&item, (OTP_CS_ADDRESS / 4) + otp_size / 4, 1); + bsp_otp_prog(dest, (OTP_CS_ADDRESS / 4) + otp_size / 4 + 1, word_size); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + ret = true; + } + else + { + ret = false; + } + + break; + } + + default: + { + /* For only test */ + bsp_tcs_get_otp_size(&otp_size, item, &item_write_count); + bsp_tcs_get_item_in_otp_cs(item, tmp_dest, &size); + INFO_PRINTF( + "\t[TCS] -skip write item otp_size:%x(%d), item_write_count:%x, item:%lx, dest:%d, word_size:%lx\r\n", + otp_size / 4, + otp_size / 4, + item_write_count, + item, + (int) dest, + word_size); + INFO_PRINTF("\t[TCS] read: tmp_data -"); + + for (i = 0; i < word_size; i++) + { + INFO_PRINTF("%08lx,", tmp_dest[i]); + } + + INFO_PRINTF("\r\n"); + + ret = true; + break; + } + } + + bsp_tcs_get_otp_size(&otp_size, item, &item_write_count); + + bsp_otp_close(); + + return ret; +} + +/*********************************************************************************************************************** + * Exported global functions + **********************************************************************************************************************/ +void bsp_tcs_get_trim_values_from_cs (void) +{ + uint16_t size; + bsp_tcs_source_t source; + uint32_t value = CS_STOP_CMD; + uint8_t count = 0; + uint32_t i, j; + uint8_t gid_offset = 0; + uint16_t gid = 0; + +#if (BSP_FEATURE_BSP_USE_TCS == 0) + + return; +#endif + + init_tcs_attributes_array(); + + for (i = 0; i < FSP_ARRAY_LENGTH(tcs_parsing_order); i++) + { + source = tcs_parsing_order[i]; + + for (j = 0; j < source_data[source].num_sections; j++) + { + uint32_t address = source_data[source].section_addresses[j]; + if ((value = fetch_tcs_entry(source, address)) != CS_START_CMD) + { + continue; + } + else + { + break; + } + } + + if (value == CS_START_CMD) + { + break; + } + + tcs_source = source; + } + + if (value != CS_START_CMD) + { + + /* No CS found */ + return; + } + + current_tcs = &shared_tcs; + SYS_TCS_SHARED.tcs_attributes_size = sizeof(based_on_tcs_attributes) / sizeof(based_on_tcs_attributes[0]); + + size = get_size_of_cs(source); + + /* The calculated size in bytes, taking into account that one entry is 4 bytes */ + BSP_CHECK_DEBUG(size < CS_MAX_SIZE); + + /* Static allocation for tcs_data */ + tcs_data = SYS_TCS_SHARED.tcs_data; + + /* Convert sizes to offsets in the tcs table and + * set the sizes of the GID attributes */ + gid_offset = 0; + for (gid = 0; gid < BSP_TCS_GROUP_MAX; gid++) + { + if (SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size != 0) + { + SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(gid)].start = gid_offset; + gid_offset += SYS_TCS_SHARED.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size; + } + } + + /* store the tcs_data used size*/ + SYS_TCS_SHARED.tcs_data_size = gid_offset; + store_cs_attributes(source, CS_MAX_SIZE); + + /* Static allocation for tcs_data */ + current_tcs = retained_tcs; + tcs_data = SYS_TCS_RETAINED.tcs_data; + + for (i = 0; i < SYS_TCS_SHARED.tcs_attributes_size; i++) + { + if (SYS_TCS_SHARED.tcs_attributes[i].is_retained == RETAINED) + { + memcpy(&SYS_TCS_RETAINED.tcs_attributes[count], &SYS_TCS_SHARED.tcs_attributes[i], sizeof(bsp_tcs_attr_t)); + count++; + } + } + + memset(&SYS_TCS_RETAINED.tcs_attributes[count], 0, sizeof(bsp_tcs_attr_t)); + SYS_TCS_RETAINED.tcs_attributes_size = count + 1; + + /* Convert sizes to offsets in the tcs table and + * set the sizes of the GID attributes */ + gid_offset = 0; + for (gid = 0; gid < BSP_TCS_GROUP_MAX; gid++) + { + if ((SYS_TCS_RETAINED.tcs_attributes[bsp_retained_gid_to_idx(gid)].is_retained == RETAINED) && + (SYS_TCS_RETAINED.tcs_attributes[bsp_retained_gid_to_idx(gid)].size != 0)) + { + SYS_TCS_RETAINED.tcs_attributes[bsp_retained_gid_to_idx(gid)].start = gid_offset; + gid_offset += SYS_TCS_RETAINED.tcs_attributes[bsp_retained_gid_to_idx(gid)].size; + } + } + + /* store the tcs_data used size*/ + SYS_TCS_RETAINED.tcs_data_size = gid_offset; + store_cs_attributes(source, CS_MAX_SIZE); + + current_tcs = &shared_tcs; + tcs_data = SYS_TCS_SHARED.tcs_data; + SYS_TCS_RETAINED.cs_valid = CS_VALID_PATTERN; + SYS_TCS_SHARED.cs_valid = CS_VALID_PATTERN; +} + +void bsp_tcs_get_custom_values (bsp_tcs_gid_t gid, uint32_t ** values, uint8_t * size) +{ + if (bsp_based_gid_to_idx(gid) == (bsp_based_attributes_size() - 1)) + { + return; + } + + if (!bsp_tcs_set_tcs(gid, true)) + { + return; + } + + BSP_CHECK_DEBUG(gid < BSP_TCS_GROUP_MAX); + BSP_CHECK_DEBUG(SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].value_type == BSP_TCS_TYPE_TRIM_VAL); + + if (SYS_TCS.tcs_data == NULL) + { + + /* TCS is not initialize */ + return; + } + + if (size == NULL) + { + + /* size is mandatory */ + return; + } + + *size = SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size; + + if (values) + { + if (*size == 0) + { + *values = NULL; + } + else + { + /* if size is not zero then start is different than EMPTY for this GID + * so CS parsing for TCS data is done and TCS_DATA is valid */ + *values = &SYS_TCS.tcs_data[SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].start]; + } + } + + bsp_tcs_set_tcs(gid, false); +} + +bool bsp_tcs_apply_custom_values (bsp_tcs_gid_t gid, bsp_tcs_custom_values_cb cb, void * user_data) +{ + uint32_t * values = NULL; + uint8_t size = 0; + + if (bsp_based_gid_to_idx(gid) == (bsp_based_attributes_size() - 1)) + { + return false; + } + + if (based_on_tcs_attributes[bsp_based_gid_to_idx(gid)].is_retained == false) + { + current_tcs = &shared_tcs; + } + else + { + current_tcs = retained_tcs; + } + + if (SYS_TCS.cs_valid != CS_VALID_PATTERN) + { + return false; + } + + if (SYS_TCS.tcs_data == NULL) + { + return false; + } + + if (cb) + { + bsp_tcs_get_custom_values(gid, &values, &size); + if (size != 0) + { + cb(gid, user_data, values, size); + } + else + { + return false; + } + } + + current_tcs = &shared_tcs; + tcs_data = SYS_TCS_SHARED.tcs_data; + + return true; +} + +bool bsp_tcs_apply_reg_pairs (bsp_tcs_gid_t gid) +{ + if (bsp_based_gid_to_idx(gid) == bsp_based_attributes_size() - 1) + { + return false; + } + + if (based_on_tcs_attributes[bsp_based_gid_to_idx(gid)].is_retained == false) + { + current_tcs = &shared_tcs; + } + else + { + current_tcs = retained_tcs; + } + + if (SYS_TCS.cs_valid != CS_VALID_PATTERN) + { + return false; + } + + if (SYS_TCS.tcs_data == NULL) + { + return false; + } + + BSP_CHECK_DEBUG(gid < BSP_TCS_GROUP_MAX); + BSP_CHECK_DEBUG(SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].value_type == BSP_TCS_TYPE_REG_PAIR || + SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].value_type == BSP_TCS_TYPE_HPI_REG_PAIR); + + uint8_t start = SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].start; + int size = (int) SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].size; + + if (size == 0) + { + return false; + } + + if (SYS_TCS.tcs_attributes[bsp_tcs_gid_to_idx(gid)].value_type == BSP_TCS_TYPE_REG_PAIR) + { + while (size > 0) + { + if ((SYS_TCS.tcs_data[start]) != 0) + { + *(volatile uint32_t *) SYS_TCS.tcs_data[start] = SYS_TCS.tcs_data[start + 1]; + } + + size -= 2; + start += 2; + } + } + + current_tcs = &shared_tcs; + tcs_data = SYS_TCS_SHARED.tcs_data; + + return true; +} + +#if TCS_INFO +void bsp_tcs_info_printf (bool match) +{ + FSP_PARAMETER_NOT_USED(match); + uint32_t i, e, dest = 0; + uint16_t item_count = 0, size = 0, word_size = 0; + static const char * tcs_type[] = + { + "TYPE_TRIM_VAL", + "TYPE_REG_PAIR", + "TYPE_HPI_REG_PAIR", + "TYPE_RESERVE" + }; + static const char * tcs_domain[] = + { + "SYS_TCS_DOMAIN_PD_SYS", + "SYS_TCS_DOMAIN_PD_COM", + "SYS_TCS_DOMAIN_PD_MEM", + "SYS_TCS_DOMAIN_PD_TMR", + "SYS_TCS_DOMAIN_PD_PER", + "SYS_TCS_DOMAIN_PD_RAD", + "SYS_TCS_DOMAIN_PD_SYN", + "SYS_TCS_DOMAIN_NA" + }; + + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + bsp_tcs_get_trim_values_from_cs(); + current_tcs = &shared_tcs; + for (i = 0; i < sizeof(based_on_tcs_attributes) / sizeof(based_on_tcs_attributes[0]); i++) + { + if (SYS_TCS.tcs_attributes[i].size > 0) + { + INFO_PRINTF("Group ID = %x, TYPE = %s, domain = %s, RETAINED %ud\r\n", + SYS_TCS.tcs_attributes[i].value_gid, + tcs_type[SYS_TCS.tcs_attributes[i].value_type], + tcs_domain[SYS_TCS.tcs_attributes[i].value_domain], + SYS_TCS.tcs_attributes[i].is_retained); + if (SYS_TCS.tcs_attributes[i].value_type == BSP_TCS_TYPE_REG_PAIR) + { + for (e = 0; e < SYS_TCS.tcs_attributes[i].size; e += 2) + { + INFO_PRINTF("%08lx - %08lx", + SYS_TCS.tcs_data[SYS_TCS.tcs_attributes[i].start + e], + SYS_TCS.tcs_data[SYS_TCS.tcs_attributes[i].start + e + 1]); + INFO_PRINTF(" : matched %d(%lx)\r\n", + *(volatile uint32_t *) SYS_TCS.tcs_data[SYS_TCS.tcs_attributes[i].start + e] == + SYS_TCS.tcs_data[SYS_TCS.tcs_attributes[i].start + e + 1], + *(volatile uint32_t *) SYS_TCS.tcs_data[SYS_TCS.tcs_attributes[i].start + e]); + } + } + else + { + for (e = 0; e < SYS_TCS.tcs_attributes[i].size; e++) + { + INFO_PRINTF("%08lx\r\n", SYS_TCS.tcs_data[SYS_TCS.tcs_attributes[i].start + e]); + } + } + } + } + + INFO_PRINTF("\r\n - INFO \r\n"); + bsp_tcs_get_item_in_otp_cs(XTAL_REG, &dest, &word_size); + INFO_PRINTF("XTAL40M_CTRL_REG(0x400c0204) = %lx\r\n", dest); + bsp_tcs_get_otp_size(&size, XTAL_REG, &item_count); + INFO_PRINTF("OTP Start Address: 0x400f2100, top =%x(%d), otp size = %x(%d), \r\n", (OTP_CS_ADDRESS + size) / 4, + (OTP_CS_ADDRESS + size) / 4, size / 4, size / 4); + + INFO_PRINTF("\r\n - RAW DATA \r\n"); + for (i = 0; i < (uint32_t) (size / 4 + 1); i++) + { + INFO_PRINTF("%08lx, ", *(volatile uint32_t *) (MEMORY_OTP_BASE + OTP_CS_ADDRESS + i * 4)); + if ((i % 4 == 3) && (i != 0)) + { + INFO_PRINTF("\r\n"); + } + } + + INFO_PRINTF("\r\n"); +} + +#endif + +bool bsp_tcs_otp_read_xtal (uint32_t * dest) +{ + return bsp_tcs_read_item(XTAL_REG, dest); +} + +bool bsp_tcs_otp_write_xtal (uint32_t * dest, check_option_t check_option) +{ + *dest = ((*dest & 0xff0000) | 0x76f); + + return bsp_tcs_write_item(XTAL_REG, dest, 1, check_option); +} + +bool bsp_tcs_otp_read_mac (uint32_t * mac) +{ + return bsp_tcs_read_item(BSP_TCS_GROUP_MAC_ADDR | (2 << 8) | (CS_SDK_VAL), mac); +} + +bool bsp_tcs_otp_write_mac (uint32_t * mac, check_option_t check_option) +{ + return bsp_tcs_write_item(BSP_TCS_GROUP_MAC_ADDR | (2 << 8) | (CS_SDK_VAL), mac, 2, check_option); +} + +uint16_t bsp_tcs_otp_mac_cnt (void) +{ + uint16_t otp_size = 0; + uint16_t item_write_count; + + bsp_tcs_get_otp_size(&otp_size, BSP_TCS_GROUP_MAC_ADDR | (2 << 8) | (CS_SDK_VAL), &item_write_count); + + return item_write_count; +} + +uint32_t bsp_tcs_read_timestamp (void) +{ + uint8_t size; + uint32_t * cs_timestamp_ptr = NULL; + + bsp_tcs_get_custom_values(BSP_TCS_GROUP_PROD_INFO, &cs_timestamp_ptr, &size); + if (size == 0) + { + return 0; + } + + return cs_timestamp_ptr[1]; +} + +uint32_t bsp_tcs_read_program_version (void) +{ + uint8_t size; + uint32_t * cs_program_version_ptr = NULL; + + bsp_tcs_get_custom_values(BSP_TCS_GROUP_TESTPROGRAM_VERSION, &cs_program_version_ptr, &size); + if (size == 0) + { + return 0; + } + + return *cs_program_version_ptr; +} + +uint32_t bsp_tcs_read_wafer (void) +{ + uint8_t size; + uint32_t * cs_wafer_ptr = NULL; + bsp_tcs_get_custom_values(BSP_TCS_GROUP_PROD_WAFER, &cs_wafer_ptr, &size); + if (size == 0) + { + return 0; + } + + return *cs_wafer_ptr; +} + +bool bsp_tcs_otp_add (uint32_t * dest, uint32_t word_size) +{ + uint16_t otp_size = 0; + uint16_t item_write_count; + uint32_t cs_start[2] = {CS_START_CMD, 0}; + bool ret = 0; + + if (!dest || (word_size == 0) || (word_size > 30)) + { + return false; + } + + bsp_otp_init(); + bsp_otp_mode_set(BSP_OTP_MODE_READ); + bsp_tcs_get_otp_size(&otp_size, 0, &item_write_count); + + if (otp_size == 0) + { + t2_production_patch(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + + /* First write - need to write start pattern */ + uint32_t write_offset = (OTP_CS_ADDRESS / 4); + bsp_otp_prog(cs_start, write_offset, 1); + bsp_otp_prog(dest, write_offset + 1, word_size); + + ret = true; + } + else if (otp_size < (OTP_CS_SIZE - (word_size * 4))) + { + t2_production_patch(); + bsp_otp_mode_set(BSP_OTP_MODE_PROG); + + uint32_t write_offset = (OTP_CS_ADDRESS / 4) + otp_size / 4;; + bsp_otp_prog(dest, write_offset, word_size); + ret = true; + } + else + { + INFO_PRINTF("[TCS] Over size otp \r\n"); + ret = false; + } + + bsp_otp_mode_set(BSP_OTP_MODE_READ); + bsp_otp_close(); + + return ret; +} + +void bsp_tcs_custom_values_system_cb (bsp_tcs_gid_t gid, void * user_data, uint32_t * val, uint8_t len) +{ + FSP_PARAMETER_NOT_USED(gid); + FSP_PARAMETER_NOT_USED(user_data); + FSP_PARAMETER_NOT_USED(val); + FSP_PARAMETER_NOT_USED(len); +} diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.h new file mode 100644 index 000000000000..ed26beaf0aee --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/bsp_tcs.h @@ -0,0 +1,346 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_TCS_RA6W1_H +#define BSP_TCS_RA6W1_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define TCS_ATTRIBUTE_SIZE 20 +#define TCS_DATA_SIZE 200 /**< max number of entries in words (4 bytes). */ +#define GID_EMPTY 0x1FF + +/* + * Reset values of trimmed registers + */ +#define DEFAULT_CHARGER_TEST_CTRL_REG 0x00001F28 + +/* + * OTP Memory + */ +#define MEMORY_OTP_BASE 0x400F2000UL +#define MEMORY_OTP_END 0x400F2800UL + +/* + * OQSPI AHB-C(ode) bus (cached). Accesses through this bus + * are restricted according to CACHE_FLASH_REG. + */ +#define MEMORY_OQSPIC_BASE (0x0A000000) // before (0x19000000UL) +#define MEMORY_OQSPIC_END (0x0DFFFFFF) // before (0x1D000000UL) + +#define MEMORY_OQSPIC_SIZE (MEMORY_OQSPIC_END - MEMORY_OQSPIC_BASE) + +/* + * OQSPI AHB-S(ystem) bus (Not cached). Accesses through this bus + * are not affected by CACHE_FLASH_REG. + */ +#define MEMORY_OQSPIC_S_BASE (0x2A000000) // before (0x3A000000UL) +#define MEMORY_OQSPIC_S_END (0x2DFFFFFF) // before (0x3E000000UL) + +/* + * QSPI AHB-C(ode) bus (cached). Accesses through this bus + * are restricted according to CACHE_FLASH_REG. + */ +#define MEMORY_QSPIF_BASE (0x24000000UL) +#define MEMORY_QSPIF_END (MEMORY_QSPIF_BASE + 0x4000000UL) + +/* + * QSPI Data + */ +#define MEMORY_QSPID_BASE (0x24000000UL) +#define MEMORY_QSPID_END (0x28000000UL) +#define MEMORY_QSPID_SIZE (MEMORY_QSPID_END - MEMORY_QSPID_BASE) + +/* + * DCACHE controller + */ +#define MEMORY_DCACHE_BASE (0x21014000UL) +#define MEMORY_DCACHE_SIZE (0x2000UL) +#define MEMORY_DCACHE_END (MEMORY_DCACHE_BASE + MEMORY_DCACHE_SIZE) + +#define TCS_INFO 1 + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** + * @enum bsp_tcs_type_t + * @brief custom TCS value type. + */ +typedef enum +{ + BSP_TCS_TYPE_TRIM_VAL = 0, /**< trimmed value */ + BSP_TCS_TYPE_REG_PAIR = 1, /**< register pair value */ + BSP_TCS_TYPE_HPI_REG_PAIR = 2, + BSP_TCS_TYPE_RESERVED = 3, +} bsp_tcs_type_t; + +/** + * @enum bsp_tcs_domain_t + * @brief power domain of each TCS group. + */ +typedef enum +{ + BSP_TCS_DOMAIN_PD_SYS = 0, /**< System power domain */ + BSP_TCS_DOMAIN_PD_COM, /**< Communication power domain */ + BSP_TCS_DOMAIN_PD_MEM, /**< Memory power domain */ + BSP_TCS_DOMAIN_PD_TMR, /**< Timers power domain */ + BSP_TCS_DOMAIN_PD_PER, /**< Peripherals power domain */ + BSP_TCS_DOMAIN_PD_RAD, /**< Radio power domain */ + BSP_TCS_DOMAIN_PD_SYNTH, /**< Synth power domain */ + BSP_TCS_DOMAIN_NA /**< No power domain */ +} bsp_tcs_domain_t; + +/** + * @enum bsp_tcs_gid_t + * @brief the configured group ids. + */ +typedef enum +{ + BSP_TCS_GROUP_RESERVED = 0x0, + BSP_TCS_GROUP_COMMON = 0x1, + BSP_TCS_GROUP_SKIP = 0x2, + + /* Power Domains Section */ + BSP_TCS_GROUP_PD_SYS = 0x20, + BSP_TCS_GROUP_MAC_ADDR = 0x21, + BSP_TCS_GROUP_PD_ADC = 0x22, + BSP_TCS_GROUP_PD_WIFI_TRIM_RF_HPI = 0x81, + BSP_TCS_GROUP_PD_WIFI_TRIM_TX_HPI = 0x82, + BSP_TCS_GROUP_PD_WIFI_TRIM_DCORE = 0x80, + BSP_TCS_GROUP_PD_WIFI_TRIM_LUT = 0x83, + BSP_TCS_GROUP_PD_WIFI_TRIM_TXIQ = 0x84, + BSP_TCS_GROUP_PD_WIFI_TRIM_XTAL = 0x90, + + /* System Section */ + BSP_TCS_GROUP_BD_ADDR = 0x20, /**< BD_ADDR group id */ + + /* Production Test Section */ + BSP_TCS_GROUP_CHIP_ID = 0xC0, /**< CHIP_ID group id */ + BSP_TCS_GROUP_PROD_INFO = 0xC1, /**< PROD_INFO group id */ + BSP_TCS_GROUP_PROD_WAFER = 0xC2, /**< PROD_WAFER group id */ + BSP_TCS_GROUP_TESTPROGRAM_VERSION = 0xC3, /**< TESTPROGRAM_VERSION group id */ + BSP_TCS_GROUP_PROD_SW_IP = 0xC4, /**< PROD_SW_IP group id */ + + BSP_TCS_GROUP_MAX = 0xE0 /**< Maximum supported group id */ +} bsp_tcs_gid_t; + +/** + * @struct bsp_tcs_source_t + * @brief Parsing order for the configuration script + */ +typedef enum +{ + BSP_TCS_OTP = 0, /* CS in OTP */ + BSP_TCS_OQSPI, /* CS in Flash */ + BSP_TCS_QSPI, /* CS in QSPI Flash */ + BSP_TCS_NVMS, /* CS in NVMS */ +} bsp_tcs_source_t; + +typedef enum e_check_option +{ + CHECK_OPTION_FORCE = 0, ///< Force write + CHECK_OPTION_EMPTY = 1, ///< Write if only empty item. + CHECK_OPTION_DIFFERENT = 2, ///< Write if only different item. + CHECK_OPTION_SKIP_EXISTS = 3, ///< Skip if already written +} check_option_t; + +/** + * @struct bsp_tcs_attr_t + * @brief attributes per custom value group id + */ +typedef struct +{ + uint32_t value_gid : 8; /* bsp_tcs_gid_t */ + uint32_t value_type : 2; /* bsp_tcs_type_t - < TCS entry type */ + uint32_t value_domain : 4; /* bsp_tcs_domain_t */ + uint32_t is_retained : 2; + uint32_t start : 8; /* < TCS entry start position */ + uint32_t size : 8; /* < TCS entry type size in words */ +} bsp_tcs_attr_t; + +/** + * @struct bsp_tcs_shared_t + * @brief This structure is used to hold the TCS shared-memory data in specific order + * to prevent compiler optimization when building for both (SYSCPU and CMAC) CPUs. + */ +typedef struct +{ + uint32_t * tcs_data; /*!< The CS data as read by the TCS parser */ + uint8_t tcs_data_size; /*!< Number of words in the tcs_data */ + uint8_t tcs_attributes_size; + bsp_tcs_attr_t * tcs_attributes; /*!< The TCS attributes */ + uint16_t cs_otp_program_version; /*!< The version of the CS as described by the BSP_TCS_GROUP_TESTPROGRAM_VERSION attribute*/ + uint16_t cs_valid; +} bsp_tcs_shared_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** + * @brief TCS custom trim values callback + * @param[in] values_group the TCS group id custom trim values belong to + * @param[in] user_data user specific data + * @param[in] values custom trim values + * @param[in] size the number of the custom trim values + */ +typedef void (* bsp_tcs_custom_values_cb)(bsp_tcs_gid_t values_group, void * user_data, uint32_t * values, + uint8_t size); + +/** + * @brief retrieve the TCS values from CS located in OTP or flash and then store + * TCS register pair address, value and/or custom value custom_trim_value in the Global TCS array + */ +void bsp_tcs_get_trim_values_from_cs(void); + +/** + * @brief Reads the timestamp from the parsed CS + * + * @returns The timestamp value. The function returns 0 in case timestamp does not exist in the CS + */ +uint32_t bsp_tcs_read_timestamp(void); + +/** + * @brief Reads the program version from the parsed CS + * + * @returns The version number. The function returns 0 in case version does not exist in the CS\n + * Example: 01000501 The program revision is 1.00.05.01 + */ +uint32_t bsp_tcs_read_program_version(void); + +/** + * @brief Reads the Wafer position from the parsed CS + * + * @returns The wafer position. The function returns 0 in case wafer does not exist in the CS\n + * B2: Wafer number B1: Y coord B0: X coord. if this is QFN or BGA, it is 0. + */ +uint32_t bsp_tcs_read_wafer(void); + +/** + * @brief Get register value pairs contained in a group id of the TCS array + * @param[in] gid the group id + * @param[out] values the pointer to the start of the register pair values + * @param[out] size the number of the register pair values + * + * @warning if size is zero then values is not a valid pointer. size should have been + * initialized to zero + */ +void bsp_tcs_get_reg_pairs(bsp_tcs_gid_t gid, uint32_t ** values, uint8_t * size); + +/** + * @brief Get the custom_trim_values per gid + * + * @param[in] gid the TCS group id of the requested custom trim values + * @param[out] values the pointer to the start of the custom trim values + * @param[out] size the number of the custom trim values + * + * @warning if size is zero then there are no custom trim values for this gid, + * values points to invalid data. size should have been initialized to zero + */ +void bsp_tcs_get_custom_values(bsp_tcs_gid_t gid, uint32_t ** values, uint8_t * size); + +/** + * @brief Apply the register value pairs contained in a group id of the TCS array. + * @param [in] gid the group id + */ +bool bsp_tcs_apply_reg_pairs(bsp_tcs_gid_t gid); + +/** + * @brief handles the custom_trim_values per gid according to callback + * + * @param[in] gid the TCS group id of custom trim values to apply + * @param[in] cb the callback that applies the custom trim values + * @param[in] user_data the argument to callback function + * + * @warning callback is called only if custom trim values are configured + */ +bool bsp_tcs_apply_custom_values(bsp_tcs_gid_t gid, bsp_tcs_custom_values_cb cb, void * user_data); + +/** + * @brief Retrieve the configured group ids belong to a specific power domain + * + * @param[in] domain the power domain + * @param[out] gids pointer to the array which will filled with the group ids. + * @param[in] size the length of the gids + * The last valid entry in the array is before BSP_TCS_GROUP_RESERVED which marks the end. + */ +void bsp_tcs_get_gid_per_domain(bsp_tcs_domain_t domain, uint8_t * gids, uint8_t size); + +/** + * @brief handles the custom_trim_values per gid according to callback + * + * @param[in] gid the TCS group id of custom trim values to apply + * @param[in] user_data the argument to callback function + * @param[in] val pointer to the returned values + * @param[in] len size of returned values (bytes) + * + * @warning callback is called only if custom trim values are configured + */ +void bsp_tcs_custom_values_system_cb(bsp_tcs_gid_t gid, void * user_data, uint32_t * val, uint8_t len); + +/** + * @brief Read XTAL_REG value on TCS + * + * @param[out] dest XTAL regiter value + */ +bool bsp_tcs_otp_read_xtal(uint32_t * dest); + +/** + * @brief Write XTAL_REG value on TCS + * + * @param[in] dest XTAL regiter value + * @param[in] check_option TCS written check option + */ +bool bsp_tcs_otp_write_xtal(uint32_t * dest, check_option_t check_option); + +/** + * @brief Read MAC address on TCS + * + * @param[out] mac MAC address array - uint32_t mac[2] + */ +bool bsp_tcs_otp_read_mac(uint32_t * mac); + +/** + * @brief Write MAC address on TCS + * + * @param[in] mac MAC address array -uint32_t mac[2] + * @param[in] check_option TCS written check option + */ +bool bsp_tcs_otp_write_mac(uint32_t * mac, check_option_t check_option); + +/** + * @brief Read MAC written count on TCS + * + * @return the number of MAC written count + */ +uint16_t bsp_tcs_otp_mac_cnt(void); + +/** + * @brief Add data to TCS (Trim Calibration Section) on OTP + * + * @param[in] dest Pointer to data array to be added to TCS + * @param[in] word_size Size of data in 32-bit words + * + * @return true if data was successfully added to TCS + * @return false if addition failed + * + * @note This function adds the provided data to the TCS of OTP area. + * The data must be aligned to 32-bit words. + */ +bool bsp_tcs_otp_add(uint32_t * dest, uint32_t word_size); + +#if TCS_INFO +void bsp_tcs_info_printf(bool match); + +#endif +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/clib.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/clib.h new file mode 100644 index 000000000000..a4be4bd32cad --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/clib.h @@ -0,0 +1,125 @@ +/** + **************************************************************************************** + * + * @file clib.h + * + * @brief C Library + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __clib_h__ +#define __clib_h__ + +#include + +#include "bsp_api.h" +#include "bsp_sflash_map_ra6w1.h" + +__STATIC_INLINE unsigned char toint (char c) +{ + unsigned char rslt; + + if ((c >= '0') && (c <= '9')) + { + rslt = (c - '0'); + } + else if ((c >= 'a') && (c <= 'f')) + { + rslt = (c - 'a' + (unsigned char) 10); + } + else if ((c >= 'A') && (c <= 'F')) + { + rslt = (c - 'A' + (unsigned char) 10); + } + else + { + rslt = (unsigned char) 0; + } + + return rslt; +} + +__STATIC_INLINE unsigned int htoi (char * s) +{ + unsigned int sum = 0; + + while ((*s >= '0') && (*s <= 'f')) + { + sum = sum * 16 + toint(*s++); + } + + return sum; +} + +__STATIC_INLINE int btoi (char * s) +{ + short sum = 0; + + while ((*s >= '0') && (*s <= '1')) + { + sum = (short) (sum * 2 + toint(*s++)); + } + + return sum; +} + +__STATIC_INLINE unsigned int ctoi (char * s) +{ + unsigned int sum = 0; + + while ((*s >= '0') && (*s <= '9')) + { + sum = sum * 10 + toint(*s++); + } + + return sum; +} + +__STATIC_INLINE int stoi (char * s) +{ + int sum = 0, sign; + + if (*s == '-') + { + sign = -1; + s++; + } + else + { + sign = 1; + } + + while (*s) + { + sum = sum * 10 + toint(*s++); + } + + sum = sign * sum; + + return sum; +} + +#endif /* __clib_h__ */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/common_compile_opt.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/common_compile_opt.h new file mode 100644 index 000000000000..07763511ea36 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/common_compile_opt.h @@ -0,0 +1,41 @@ +/** + **************************************************************************************** + * + * @file common_compile_opt.h + * + * @brief Define for common system features + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __COMMON_COMPILE_OPT__ +#define __RA6WX_COMPILE_OPT__ + +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wsign-conversion" + +#endif // __COMMON_COMPILE_OPT__ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/common_def.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/common_def.h new file mode 100644 index 000000000000..bbd7b3636024 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/common_def.h @@ -0,0 +1,764 @@ +/** + **************************************************************************************** + * + * @file common_def.h + * + * @brief Define for common variables for SDK + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __COMMON_DEF_H__ + #define __COMMON_DEF_H__ + + #include "FreeRTOS.h" + #include "sdk_defs.h" + #ifdef RM_STDIO_W + #include "rm_stdio_w_cfg.h" + #endif + #ifdef RM_MAP_PERSISTANT_W + #include "rm_map_persistant_w.h" + #endif + + #define NVR_MAGIC_CODE 0x7E7EBEAF + #define NVR_KEY_MAGIC_CODE "INIT_MAGIC" + + #define NVR_KEY_SETUP_MODE "SETUP_MODE" + + #define NVR_KEY_SYSMODE ENV_SYS_MODE + + #define NVR_KEY_PROFILE_0 "N0_Profile" + #define NVR_KEY_PROFILE_1 "N1_Profile" + + #define NVR_KEY_SSID_0 "N0_ssid" + #define NVR_KEY_SSID_1 "N1_ssid" + #define NVR_KEY_MODE_0 "N0_mode" + #define NVR_KEY_MODE_1 "N1_mode" + #define NVR_KEY_NETMODE_0 "0:NETMODE" + #define NVR_KEY_NETMODE_1 "1:NETMODE" + #define NVR_KEY_COUNTRY_CODE "country_code" + #define NVR_KEY_IPADDR_0 "0:IP_Address" + #define NVR_KEY_IPADDR_1 "1:IP_Address" + #define NVR_KEY_NETMASK_0 "0:NETMASK" + #define NVR_KEY_NETMASK_1 "1:NETMASK" + #define NVR_KEY_GATEWAY_0 "0:GATEWAY" + #define NVR_KEY_GATEWAY_1 "1:GATEWAY" + #define NVR_KEY_DNSSVR_0 "0:DNSSVR" + #define NVR_KEY_DNSSVR_0_2ND "0:DNSSVR2" + #define NVR_KEY_DNSSVR_1 "1:DNSSVR" + #define NVR_KEY_DHCPD "USEDHCPD" + #define NVR_KEY_DHCPD_IPCNT "DHCPD_IPCNT" + + #define NVR_KEY_DHCP_S_IP "1:DHCPD_S_IP" + #define NVR_KEY_DHCP_E_IP "1:DHCPD_E_IP" + #define NVR_KEY_DHCP_TIME "1:DHCPD_TIME" + #define NVR_KEY_DHCP_DNS_IP "1:DHCPD_DNS" + #define NVR_KEY_DHCP_RESP_DELAY "1:DHCPD_RESP_DELAY" + + #define NVR_KEY_DPM_MODE "dpm_mode" + #define NVR_KEY_DPM_KEEPALIVE_TIME "DPM_KEEPALIVE" + #define NVR_KEY_DPM_USER_WAKEUP_TIME "DPM_USER_WU_TIME" + #define NVR_KEY_DPM_TIM_WAKEUP_TIME "DPM_TIM_WU_TIME" + #define NVR_KEY_DPM_AB_WF_CONN_RETRY "DPM_AB_WIFI_CONN_RETRY_CNT" + #define NVR_KEY_DPM_ABNORM_STOP "dpm_abnorm_stop" + #define NVR_KEY_DPM_IP_CONDITION "dpm_ip_condition" + + #define WIFI_CONN_WAIT_NAME "DPM_AB_WIFI_CONN_WAIT" + #define DHCP_RSP_WAIT_NAME "DPM_AB_DHCP_RSP_WAIT" + #define ARP_RSP_WAIT_NAME "DPM_AB_ARP_RSP_WAIT" + #define UNKNOWN_DPM_FAIL_WAIT_NAME "DPM_AB_DPM_FAIL_WAIT" + #define WIFI_CONN_RETRY_CNT_NAME "DPM_AB_WIFI_CONN_RETRY_CNT" + +/* + * For DPM abnormal functions ... + */ + #define DPM_ABNORM_WIFI_CONN_WAIT 0 + #define DPM_ABNORM_DHCP_RSP_WAIT 1 + #define DPM_ABNORM_ARP_RSP_WAIT 2 + #define DPM_ABNORM_DPM_FAIL_WAIT 3 + #define DPM_ABNORM_DPM_WIFI_RETRY_CNT 4 + + #define NVR_UART2_MONITOR_DISABLE "UART2_MONITOR_DISABLE" + + #define NVR_KEY_DL_CLI_PERIOD "dl_cli_period" + #define NVR_KEY_DL_SVC_SVR_IP "dl_svc_svr_ip" + + #define NVR_KEY_IPERF_C "USEIPERF" + + #define NVR_KEY_CoAP "USECoAP" + #define NVR_KEY_HTTP_S "USEHTTPServer" + #define NVR_KEY_ICMP_S "USEICMPServer" + #define NVR_KEY_ICMP_C "USEICMPClient" + #define NVR_KEY_ACS "USEACS" + #define NVR_KEY_SNTP_C "SNTP_RUN_FLAG" + #define NVR_KEY_DHCP_C "USEDHCPClient" + #define NVR_KEY_CHANNEL "N1_frequency" + #define NVR_KEY_PROACTKEY_C "N1_proActKeyCaching" + + #define NVR_KEY_SNTP_SERVER_DOMAIN "SNTP_SVR" + #define NVR_KEY_SNTP_SERVER_DOMAIN_1 "SNTP_SVR_1" + #define NVR_KEY_SNTP_SERVER_DOMAIN_2 "SNTP_SVR_2" + #define NVR_KEY_SNTP_SYNC_PERIOD "SNTP_PERIOD" + + #define NVR_KEY_TIMEZONE "TZONE" + #define NVR_KEY_OTA_UPDATE "OTA_Update" + #define NVR_KEY_OTA_TIMEOUT "OTA_op_timeout" + #define NVR_KEY_OTA_UP_SVR_DOMAIN "OTA_Svr_Domain" + #define NVR_KEY_OTA_UP_SVR_IP "OTA_Svr_IP" + #define NVR_KEY_OTA_PTIM "OTA_ptim" + #define NVR_KEY_OTA_RAMLIB "OTA_rlib" + #define NVR_KEY_OTA_RTOS "OTA_rtos" + #define NVR_KEY_OTA_INDOOR "OTA_indoor" + #define NVR_KEY_OTA_OUTDOOR "OTA_outdoor" + + #define NVR_KEY_OTA_UPDATE_PERIOD "OTA_Period" + #define NVR_KEY_WLANMODE_0 "N0_wifi_mode" + #define NVR_KEY_WLANMODE_1 "N1_wifi_mode" + + #define NVR_KEY_AUTH_TYPE_0 "N0_key_mgmt" + #define NVR_KEY_ENC_TYPE_0 "N0_pairwise" + + #define NVR_KEY_WEPTYPE_0 "N0_wep_type" /* need del */ + #define NVR_KEY_WEPINDEX_0 "N0_wep_tx_keyidx" /* chg */ + #define NVR_KEY_WEPKEYTYPE_0 "N0_wepkey_type" /* need del */ + #define NVR_KEY_WEPKEY64_0 "N0_wep_key" /* need del */ + #define NVR_KEY_WEPKEY128_0 "N0_wep_key" /* need del */ + #define NVR_KEY_WEPKEY_0 "N0_wep_key" /* chg */ + #define NVR_KEY_WEPKEY0_0 "N0_wep_key0" /* chg */ + #define NVR_KEY_WEPKEY1_0 "N0_wep_key1" /* chg */ + #define NVR_KEY_WEPKEY2_0 "N0_wep_key2" /* chg */ + #define NVR_KEY_WEPKEY3_0 "N0_wep_key3" /* chg */ + + #define NVR_KEY_ENCKEY_0 "N0_psk" + +// for __SUPPORT_FAST_CONN_SLEEP_12__ + #define NVR_KEY_PSK_RAW_0 "N0_PSK_RAW_KEY" + + #define NVR_KEY_PROTO_0 "N0_proto" + #define NVR_KEY_SAE_PASS_0 "N0_sae_password" + #define NVR_KEY_PMF_0 "N0_ieee80211w" + + #define NVR_KEY_AUTH_TYPE_1 "N1_key_mgmt" + #define NVR_KEY_ENC_TYPE_1 "N1_pairwise" + + #define NVR_KEY_WEPTYPE_1 "N1_wep_type" /* need del */ + #define NVR_KEY_WEPINDEX_1 "N1_wep_tx_keyidx" /* chg */ + #define NVR_KEY_WEPKEYTYPE_1 "N1_wepkey_type" /* need del */ + #define NVR_KEY_WEPKEY64_1 "N1_wep_key" /* need del */ + #define NVR_KEY_WEPKEY128_1 "N1_wep_key" /* need del */ + #define NVR_KEY_WEPKEY_1 "N1_wep_key" /* chg */ + #define NVR_KEY_WEPKEY0_1 "N1_wep_key0" /* chg */ + #define NVR_KEY_WEPKEY1_1 "N1_wep_key1" /* chg */ + #define NVR_KEY_WEPKEY2_1 "N1_wep_key2" /* chg */ + #define NVR_KEY_WEPKEY3_1 "N1_wep_key3" /* chg */ + + #define NVR_KEY_ENCKEY_1 "N1_psk" + #define NVR_KEY_PROTO_1 "N1_proto" + + #define NVR_KEY_SAE_PASS_1 "N1_sae_password" + #define NVR_KEY_PMF_1 "N1_ieee80211w" + #define NVR_KEY_GROUP_0 "N0_group" + #define NVR_KEY_GROUP_1 "N1_group" + + #define NVR_KEY_P2P_GO "P2P_GO" + #define NVR_KEY_P2P_DEV_NAME "dev_name" + #define NVR_KEY_P2P_LISTEN_CH "p2p_listen_channel" + #define NVR_KEY_P2P_GO_INTENT "p2p_go_intent" + #define NVR_KEY_P2P_GO_OP_CH "p2p_oper_channel" + +// for __SUPPORT_FAST_CONN_SLEEP_12__ + #define NVR_KEY_FST_CONNECT "N0_FST_CONNECT" /* Station Only */ + +// for __SUPPORT_ASSOC_CHANNEL__ + #define NVR_KEY_ASSOC_CH "N0_ASSOC_CH" /* Station Only */ + + #define NVR_KEY_VOL_UID "VOL_UID" + + #define NVR_KEY_DBG_TXPWR "DBG_TXPWR_L" + #define NVR_KEY_DBG_TXPWR_2G_OFDM "DBG_TXPWR_L_2GO" + #define NVR_KEY_DBG_TXPWR_2G_DSSS "DBG_TXPWR_L_2GD" + #define NVR_KEY_DBG_TXPWR_5G_PWR "DBG_TXPWR_L_5GP" + #define NVR_KEY_DBG_TXPWR_5G_FLAG "DBG_TXPWR_L_5GF" + + #define NVR_KEY_PWR_CTRL "pwr_ctrl_grade" + #define NVR_KEY_PWR_CTRL_SAME_IDX_TBL "SAME_PWR_IDX_VAL" /* same index value table */ + + #define CLI_DELIMIT_TAB "\t" + + #define ENABLE_DHCP_CLIENT DHCPCLIENT + #define ENABLE_STATIC_IP STATIC_IP + + #define CHANNEL_1_FREQ 2412 + #define CHANNEL_2_FREQ 2417 + #define CHANNEL_3_FREQ 2422 + #define CHANNEL_4_FREQ 2427 + #define CHANNEL_5_FREQ 2432 + #define CHANNEL_6_FREQ 2437 + #define CHANNEL_7_FREQ 2442 + #define CHANNEL_8_FREQ 2447 + #define CHANNEL_9_FREQ 2452 + #define CHANNEL_10_FREQ 2457 + #define CHANNEL_11_FREQ 2462 + #define CHANNEL_12_FREQ 2467 + #define CHANNEL_13_FREQ 2472 + #define CHANNEL_14_FREQ 2484 + + #define MODE_AUTH_OPEN_STR "NONE" + #define MODE_AUTH_WEP_STR "????" + #define MODE_AUTH_WPA_PSK_STR "WPA-PSK" + #define MODE_AUTH_WPA2_PSK_STR "?????" + #define MODE_AUTH_WPA_AUTO_PSK_STR "??????" + + #define proto_WPA "WPA" + #define proto_RSN "RSN" + #define proto_WPA2 "WPA2" + #define proto_OSEN "OSEN" + + #define key_mgmt_WPA_PSK "WPA-PSK" + #define key_mgmt_WPA_EAP "WPA-EAP" + #define key_mgmt_IEEE8021X "IEEE8021X" + #define key_mgmt_NONE "????" + #define key_mgmt_WPA_NONE "WPA-NONE" + #define key_mgmt_FT_PSK "FT-PSK" + #define key_mgmt_FT_EAP "FT-EAP" + #define key_mgmt_WPA_PSK_SHA256 "WPA-PSK-SHA256" + #define key_mgmt_WPA_EAP_SHA256 "WPA-EAP-SHA256" + #define key_mgmt_WPS "WPS" + #define key_mgmt_WPA3_OWE "OWE" + #define key_mgmt_WPA3_SAE "SAE" + #define key_mgmt_WPA_PSK_WPA3_SAE "WPA-PSK SAE" + #define key_mgmt_WPA3_ENT192B "WPA-EAP-SUITE-B-192" + + #define pairwise_CCMP "CCMP" + #define pairwise_TKIP "TKIP" + #define pairwise_GCMP_256 "GCMP-256" + #define group_TKIP_CCMP "TKIP WEP104 WEP40" + + #define MODE_11BGN 0 + #define MODE_11GN 1 + #define MODE_11BG 2 + #define MODE_11N 3 + #define MODE_11G 4 + #define MODE_11B 5 + + #define MODE_AUTH_OPEN 0 + #define MODE_AUTH_WEP 1 + #define MODE_AUTH_WPA_PSK 2 + #define MODE_AUTH_WPA2_PSK 3 + #define MODE_AUTH_WPA_AUTO_PSK 4 + + #define MODE_WEP_64 0 + #define MODE_WEP_128 1 + + #define MODE_WEP_TYPE_ASCII 0 + #define MODE_WEP_TYPE_HEXA 1 + + #define MODE_WEP_INDEX0 0 + #define MODE_WEP_INDEX1 1 + #define MODE_WEP_INDEX2 2 + #define MODE_WEP_INDEX3 3 + + #define MODE_ENC_TKIP 0 + #define MODE_ENC_AES 1 + #define MODE_ENC_AUTO 2 + + #define MODE_ENABLE 1 + #define MODE_DISABLE 0 + + #define SNTPCLINET_ENABLE 1 + #define SNTPCLINET_DISABLE 0 + + #define VIRTUAL_DEV0 0 + #define VIRTUAL_DEV1 1 + #define VIRTUAL_DEV2 2 + #define VIRTUAL_DEV3 3 + +/****************************/ +/*** Default value/string ***/ +/****************************/ + #define DFLT_SYSMODE WIFI_DEVICE_MODE_EXT_AP + #define DFLT_WLANMODE MODE_11BGN + #define DFLT_MODE_AUTH MODE_AUTH_OPEN + #define DFLT_MODE_AUTH_STR MODE_AUTH_OPEN_STR + #define DFLT_MODE_WEP MODE_WEP_128 + #define DFLT_MODE_WEP_TYPE MODE_WEP_TYPE_ASCII + #define DFLT_MODE_WEP_INDEX MODE_WEP_INDEX3 + #define DFLT_MODE_ENC MODE_ENC_AUTO + + #define DFLT_NETMODE_0 DEFAULT_NETMODE_WLAN0 + #define DFLT_NETMODE_1 DEFAULT_NETMODE_WLAN1 + #define DFLT_DHCP_S_LEASE_IP_CNT DEFAULT_DHCP_LEASE_COUNT + #define DFLT_DHCP_S_LEASE_IP_CNT_MAX MAX_DHCP_LEASE_COUNT + #define DFLT_DHCP_S_LEASE_TIME DEFAULT_DHCP_SERVER_LEASE_TIME + #define DFLT_DHCP_S_LEASE_TIME_MAX MAX_DHCP_SERVER_LEASE_TIME + #define DFLT_DHCP_S_LEASE_TIME_MIN MIN_DHCP_SERVER_LEASE_TIME + #define DFLT_HTTP_SERVER_PORT DEFAULT_HTTP_SERVER_PORT + #define DFLT_AP_IP DEFAULT_IPADDR_WLAN1 + #define DFLT_AP_SUBNET DEFAULT_SUBNET_WLAN1 + #define DFLT_AP_GW DEFAULT_GATEWAY_WLAN1 + #define DFLT_AP_DNS DEFAULT_DNS_WLAN1 + #define DFLT_STA_IP DEFAULT_IPADDR_WLAN0 + #define DFLT_STA_SUBNET DEFAULT_SUBNET_WLAN0 + #define DFLT_STA_GW DEFAULT_GATEWAY_WLAN0 + #define DFLT_STA_DNS DEFAULT_DNS_WLAN0 + + #define DFLT_AP_SSID "\"RA6W1\"" + #define DFLT_STA_SSID "\"RA6W1\"" + + #define DFLT_P2P_DEV_NAME "RA6W1" + #define DFLT_P2P_LISTEN_CH 1 + #define DFLT_P2P_GO_INTENT 3 + #define DFLT_P2P_GO_OP_CH 1 + #define DFLT_P2P_GO MODE_DISABLE + + #define DFLT_DHCP_S_S_IP "10.0.0.2" + #define DFLT_DHCP_S_E_IP "10.0.0.11" + #define DFLT_DHCP_S_DNS_IP "8.8.8.8" + + #define DFLT_AP_COUNTRY_CODE "KR" + #define DFLT_STA_COUNTRY_CODE "KR" + #define DFLT_AP_ACS MODE_DISABLE + #define DFLT_AP_DHCP_S MODE_ENABLE + #define DFLT_DHCP_C MODE_ENABLE + #define DFLT_AP_FREQ CHANNEL_1_FREQ + #define DFLT_AP_CHANNEL 1 + + #define DFLT_HTTP_S MODE_DISABLE + #define DFLT_CoAP MODE_DISABLE + #define DFLT_ICMP_S MODE_DISABLE + #define DFLT_ICMP_C MODE_ENABLE + + #define DFLT_SNTP_C MODE_DISABLE + #define DFLT_SNTP_SERVER_DOMAIN "pool.ntp.org" + #define DFLT_SNTP_SERVER_DOMAIN_1 "1.pool.ntp.org" + #define DFLT_SNTP_SERVER_DOMAIN_2 "2.pool.ntp.org" + #define DFLT_SNTP_SYNC_PERIOD (3600 * 36) + + #define DFLT_OTA_UPDATE MODE_ENABLE + #define DFLT_OTA_UP_SVR_DOMAIN "ota.diasemi.com" + #define DFLT_OTA_UP_SVR_IP "10.20.30.40" /* TEMPORARY */ + #define DFLT_OTA_UPDATE_RUN_MODE 0 /* Manual / Auto = 1 */ + #define DFLT_OTA_UPDATE_PERIOD_MIN 10 /* minute */ + #define DFLT_OTA_UPDATE_PERIOD_MAX 44640 /* (31 days) minute */ + #define DFLT_OTA_UPDATE_PERIOD DFLT_OTA_UPDATE_PERIOD_MAX // 1440 /* (1 day) )minute */ + + #define DFLT_DPM MODE_ENABLE + +/* DPM WAKEUP TYPE */ + #define DPM_WAKEUP_TYPE_ALL 0 + #define DPM_WAKEUP_TYPE_UNICAST 1 + #define DPM_WAKEUP_TYPE_BROADCAST 2 + #define DPM_WAKEUP_TYPE_NONE 3 + #define DFLT_DPM_WAKEUP_TYPE DPM_WAKEUP_TYPE_ALL + + #define DFLT_DPM_TEST_APP 0 /* Disable */ + + #define USER_DPM_TIM_WAKEUP_COUNT 10 /* DTIM */ + + #ifdef USER_DPM_TIM_WAKEUP_COUNT + #define DFLT_DPM_TIM_WAKEUP_COUNT USER_DPM_TIM_WAKEUP_COUNT + #else + #define DFLT_DPM_TIM_WAKEUP_COUNT 10 /* default tim wakeup */ + #endif + + #define DPM_WAKEUP_CONDITION_ALL 0 + #define DPM_WAKEUP_CONDITION_UNICAST 1 + #define DPM_WAKEUP_CONDITION_BROADCAST 2 + #define DPM_WAKEUP_CONDITION_NONE 3 + #define DPM_WAKEUP_CONDITION_BCMC_FILTER 4 /* BC & MC wakeup disable */ + + #define DFLT_DPM_WAKEUP_CONDITION DPM_WAKEUP_CONDITION_ALL + +/* Dynamic Period Set */ + #define DFLT_DPM_DYNAMIC_PERIOD_SET 0 + +/* Keepalive Time */ + #define DFLT_DPM_KEEPALIVE_TIME (30 * 1000) + #define MIN_DPM_KEEPALIVE_TIME 1000 /* ms */ + #define MAX_DPM_KEEPALIVE_TIME (600 * 1000) /* ms, 10 minutes */ + +/* User Wakeup Time */ + #define DFLT_DPM_USER_WAKEUP_TIME 0 /* ms */ + #define MIN_DPM_USER_WAKEUP_TIME 1000 /* ms */ + #define MAX_DPM_USER_WAKEUP_TIME (86400 * 1000) /* ms, 24h */ + +/* DPM TIM Wakeup Time */ + #define MIN_DPM_TIM_WAKEUP_COUNT 1 /* 1= 102.4 ms */ + #define MAX_DPM_TIM_WAKEUP_COUNT 6000 /* 255 DTIM Interval */ + #define MAX_DPM_TIM_WAKEUP_COUNT_DDPS 30 + + #define DFLT_DL_CLI_PERIOD 1800 + #define DFLT_DL_SVC_SVR_IP "10.20.30.40" /* TEMPORARY IP */ + + #define DFLT_IPERF_C MODE_DISABLE + + #define DFLT_DNS_SD MODE_ENABLE + #define DFLT_DNS_SD_SVC_NAME "RA6W1" + #define DFLT_DNS_SD_SVC_TYPE "_service._tcp" + #define DFLT_DNS_SD_SVC_PORT 9110 + #define DFLT_DNS_SD_SVC_DESCRIPT "RA6WX Device" + #define DFLT_MDNS MODE_ENABLE + #define DFLT_MDNS_NAME "RA6W1" + #define DFLT_XMDNS MODE_ENABLE + #define DFLT_XMDNS_NAME "RA6W1" + + #define DFLT_NONE 0 + + #define HEXA_ON 1 + #define HEXA_OFF 0 + +/* ANSI CODE */ + #define ESCCODE "\33" + + #define BLACK_COLOR "\33[1;30m" + #define RED_COLOR "\33[1;31m" + #define GREEN_COLOR "\33[1;32m" + #define YELLOW_COLOR "\33[1;33m" + #define BLUE_COLOR "\33[1;34m" + #define MAGENTA_COLOR "\33[1;35m" + #define CYAN_COLOR "\33[1;36m" + #define WHITE_COLOR "\33[1;37m" + #define CLEAR_COLOR "\33[0m" + + #define RED_COL RED_COLOR + #define GRN_COL GREEN_COLOR + #define YEL_COL YELLOW_COLOR + #define BLU_COL BLUE_COLOR + #define MAG_COL MAGENTA_COLOR + #define CYN_COL CYAN_COLOR + #define WHT_COL WHITE_COLOR + #define CLR_COL CLEAR_COLOR + +/* Set Attributes */ + #define ANSI_BOLD "\33[1m" + #define ANSI_UNDERLINE "\33[4m" + #define ANSI_BLINK "\33[5m" + #define ANSI_REVERSE "\33[7m" + + #define ANSI_R_BOLD "\33[21m" + #define ANSI_R_UNDERLINE "\33[24m" + #define ANSI_R_BLINK "\33[25m" + #define ANSI_R_REVERSE "\33[27m" + +/* Rset Attributes */ + #define ANSI_NORMAL "\33[0m" + #define ANSI_RESET_BOLD "\33[21m" + #define ANSI_RESET_UNDERLINE "\33[24m" + #define ANSI_RESET_BLINK "\33[25m" + #define ANSI_RESET_REVERSE "\33[27m" + +/* Control */ + #define ANSI_CLEAR "\33[2J" + #define ANSI_CURON "\33[?25h" + #define ANSI_CUROFF "\33[?25l" + #define ANSI_BELL "\7" + #define ANSI_ERASE "\33[0J" + #define ANSI_LEFT "\33[1D" + #define ANSI_RIGHT "\33[1C" + +/* Foreground Color (text) */ + #define ANSI_COLOR_BLACK "\33[30m" + #define ANSI_COLOR_RED "\33[31m" + #define ANSI_COLOR_GREEN "\33[32m" + #define ANSI_COLOR_YELLOW "\33[33m" + #define ANSI_COLOR_BLUE "\33[34m" + #define ANSI_COLOR_MAGENTA "\33[35m" + #define ANSI_COLOR_CYAN "\33[36m" + #define ANSI_COLOR_WHITE "\33[37m" + #define ANSI_COLOR_LIGHT_RED "\33[1;31m" + #define ANSI_COLOR_LIGHT_GREEN "\33[1;32m" + #define ANSI_COLOR_LIGHT_YELLOW "\33[1;33m" + #define ANSI_COLOR_LIGHT_BLUE "\33[1;34m" + #define ANSI_COLOR_LIGHT_MAGENTA "\33[1;35m" + #define ANSI_COLOR_LIGHT_CYAN "\33[1;36m" + #define ANSI_COLOR_LIGHT_WHITE "\33[1;37m" + #define ANSI_COLOR_DEFULT "\33[0;39m" + +/* Background Color */ + #define ANSI_BCOLOR_BLACK "\33[40m" + #define ANSI_BCOLOR_RED "\33[41m" + #define ANSI_BCOLOR_GREEN "\33[42m" + #define ANSI_BCOLOR_YELLOW "\33[43m" + #define ANSI_BCOLOR_BLUE "\33[44m" + #define ANSI_BCOLOR_MAGENTA "\33[45m" + #define ANSI_BCOLOR_CYAN "\33[46m" + #define ANSI_BCOLOR_WHITE "\33[47m" + #define ANSI_BCOLOR_LIGHT_RED "\33[1;41m" + #define ANSI_BCOLOR_LIGHT_GREEN "\33[1;42m" + #define ANSI_BCOLOR_LIGHT_YELLOW "\33[1;43m" + #define ANSI_BCOLOR_LIGHT_BLUE "\33[1;44m" + #define ANSI_BCOLOR_LIGHT_MAGENTA "\33[1;45m" + #define ANSI_BCOLOR_LIGHT_CYAN "\33[1;46m" + #define ANSI_BCOLOR_LIGHT_WHITE "\33[1:47m" + #define ANSI_BCOLOR_DEFULT "\33[0;49m" + + #define VT_CLEAR printf("\33[2J") + #define VT_CURPOS(X, Y) printf("\33[%d;%dH", Y, X) + #define VT_NORMAL printf("\33[0m") + #define VT_BOLD printf("\33[1m") + #define VT_BLINK printf("\33[5m") + #define VT_REVERSE printf("\33[7m") + #define VT_CURON printf("\33[?25h") + #define VT_CUROFF printf("\33[?25l") + #define VT_BELL printf("\007") + #define VT_ERASE printf("\33[0J") + #define VT_LEFT printf("\33[1D") + #define VT_RIGHT printf("\33[1C") + #define VT_LINECLEAR(X) VT_CURPOS(1, X); printf("\33[2K") + #define VT_COLORBLACK printf("\33[30m") + #define VT_COLORRED printf("\33[31m") + #define VT_COLORGREEN printf("\33[32m") + #define VT_COLORYELLOW printf("\33[33m") + #define VT_COLORBLUE printf("\33[34m") + #define VT_COLORMAGENTA printf("\33[35m") + #define VT_COLORCYAN printf("\33[36m") + #define VT_COLORWHITE printf("\33[37m") + #define VT_COLORDEFULT printf("\33[39m") + #define VT_BCOLORBLACK printf("\33[40m") + #define VT_BCOLORRED printf("\33[41m") + #define VT_BCOLORGREEN printf("\33[42m") + #define VT_BCOLORYELLOW printf("\33[43m") + #define VT_BCOLORBLUE printf("\33[44m") + #define VT_BCOLORMAGENTA printf("\33[45m") + #define VT_BCOLORCYAN printf("\33[46m") + #define VT_BCOLORWHITE printf("\33[47m") + #define VT_BDEFULT printf("\33[49m") + #define VT_COLOROFF VT_BOLD; VT_BCOLORBLACK; VT_COLORWHITE + + #define vt_CLEAR printf("\33[2J") + #define vt_CURPOS(X, Y) printf("\33[%d;%dH", Y, X) + #define vt_NORMAL printf("\33[0m") + #define vt_BOLD printf("\33[1m") + #define vt_BLINK printf("\33[5m") + #define vt_REVERSE printf("\33[7m") + #define vt_CURON printf("\33[?25h") + #define vt_CUROFF printf("\33[?25l") + #define vt_BELL printf("\007") + #define vt_ERASE printf("\33[0J") + #define vt_LEFT printf("\33[1D") + #define vt_RIGHT printf("\33[1C") + #define vt_LINECLEAR(X) vt_CURPOS(1, X); printf("\33[2K") + #define vt_COLORBLACK printf("\33[30m") + #define vt_COLORRED printf("\33[31m") + #define vt_COLORGREEN printf("\33[32m") + #define vt_COLORYELLOW printf("\33[33m") + #define vt_COLORBLUE printf("\33[34m") + #define vt_COLORMAGENTA printf("\33[35m") + #define vt_COLORCYAN printf("\33[36m") + #define vt_COLORWHITE printf("\33[37m") + #define vt_COLORDEFULT printf("\33[39m") + #define vt_BCOLORBLACK printf("\33[40m") + #define vt_BCOLORRED printf("\33[41m") + #define vt_BCOLORGREEN printf("\33[42m") + #define vt_BCOLORYELLOW printf("\33[43m") + #define vt_BCOLORBLUE printf("\33[44m") + #define vt_BCOLORMAGENTA printf("\33[45m") + #define vt_BCOLORCYAN printf("\33[46m") + #define vt_BCOLORWHITE printf("\33[47m") + #define vt_BDEFULT printf("\33[49m") + #define vt_COLOROFF vt_BCOLORBLACK; vt_COLORWHITE + +// ISDIGIT onderzoekt of een karakter numeric is + #define ISDIGIT(c) ((c < '0' || c > '9') ? 0 : 1) + + #define UNDEF_PORT 0 + + #define HTTP_SVR_PORT 80 + #define HTTPS_SVR_PORT 443 + #define OTA_UPDATE_PORT 8048 + #define TCP_TRX_PORT 8049 + #define UDP_TRX_PORT 8047 + #define TCP_TRX_SRC_PORT 8050 + #define UDP_TRX_SRC_PORT 8051 + #define TCP_TX_SRC_PORT 8877 + #define TCP_TX_PORT 8878 + #define TCP_RX_PORT 8879 + #define DL_SERVICE_PORT 8046 + #define MON_SERVICE_PORT 8047 + #define MULTICAST_PORT 5353 + #define RTSP_PORT 8554 + + #define CM_UDP_PORT 6060 + #define DEMO_SERVICE_UDP_PORT 6123 + + #define UART1_BAUDRATE 115200 + #define UART2_BAUDRATE 115200 + + #define ENV_ASD_ENABLED "ENV_ASD_ENABLED" + + #define NVR_KEY_AP_LIVING_TIME "ap_living_time" + #define DFLT_AP_LIVING_TIME 60000 /* 1 Min */ + + #define NVR_KEY_UART2_BAUDRATE "UART2_BAUDRATE" + #define NVR_KEY_UART2_BITS "UART2_BITS" + #define NVR_KEY_UART2_PARITY "UART2_PARITY" + #define NVR_KEY_UART2_STOPBIT "UART2_STOPBIT" + #define NVR_KEY_UART2_FLOWCTRL "UART2_FLOWCTRL" + + #define NVR_KEY_UART3_BAUDRATE "UART3_BAUDRATE" + #define NVR_KEY_UART3_BITS "UART3_BITS" + #define NVR_KEY_UART3_PARITY "UART3_PARITY" + #define NVR_KEY_UART3_STOPBIT "UART3_STOPBIT" + #define NVR_KEY_UART3_FLOWCTRL "UART3_FLOWCTRL" + + #define DPM_REG_NAME_TIMER "dpm_timer_test" + #define DPM_TCP_TIMER "dpm_tcp_timer" + + #define DPM_MON_RETRY_CNT 10 + +// For DHCP Client hostname + #define NVR_DHCPC_HOSTNAME "DHCPC_HOSTNAME" + #define DHCP_HOSTNAME_MAX_LEN 32 + +/// For Country Code +struct country_ch_power_level +{ + char * country; + UCHAR ch[14]; +}; + +extern void trc_que_proc_print(UINT16 tag, const char * fmt, ...); + +/* Easy Setup */ + #define REPLY_FAIL "FAIL" + + #define SCAN_BSSID_IDX 0 + #define SCAN_FREQ_IDX 1 + #define SCAN_SIGNAL_IDX 2 + #define SCAN_FLGA_IDX 3 + #define SCAN_SSID_IDX 4 + + #define HIDDEN_SSID_DETECTION_CHAR '\t' + #define CLI_SCAN_RSP_BUF_SIZE 6144 + #define SCAN_RESULT_BUF_SIZE 6144 + #define SSID_BASE64_LEN_MAX 48 + #define DEFAULT_BSS_MAX_COUNT 80 + + #define FREERTOS_MAJOR_VERSION tskKERNEL_VERSION_MAJOR + #define FREERTOS_MINOR_VERSION tskKERNEL_VERSION_MINOR + #define FREERTOS_SUB_VERSION tskKERNEL_VERSION_BUILD + +/* API input parameters and general constants. */ + + #define _AND ((UINT) 2) + #define _AND_CLEAR ((UINT) 3) + #define _OR ((UINT) 0) + #define _OR_CLEAR ((UINT) 1) + + #define _1_ULONG ((UINT) 1) + #define _2_ULONG ((UINT) 2) + #define _4_ULONG ((UINT) 4) + #define _8_ULONG ((UINT) 8) + #define _16_ULONG ((UINT) 16) + + #define _NO_TIME_SLICE ((ULONG) 0) + #define _AUTO_START ((UINT) 1) + #define _DONT_START ((UINT) 0) + #define _AUTO_ACTIVATE ((UINT) 1) + + #define _INHERIT ((UINT) 1) + #define _NO_INHERIT ((UINT) 0) + +/* Thread execution state values. */ + #define TASK_READY ((UINT) 0) + #define TASK_COMPLETED ((UINT) 1) + #define TASK_TERMINATED ((UINT) 2) + + #define LOWER_16_MASK ((ULONG) 0x0000FFFF) + #define SHIFT_BY_16 16 + + #define PRINTF(...) printf(__VA_ARGS__) + #define Vprintf(...) + + #if dg_configUSE_CONSOLE && CFG_CLI +extern int getchar_nowait(); + + #define GETC() getchar() + #define GETC_NOWAIT() getchar_nowait() + #else + #define GETC() getchar() + #define GETC_NOWAIT() + #endif + + #define PUTC(ch) + #define PUTS(s) + + #define BUILD_OPT_RA6W1_ASIC + #define BUILD_OPT_RA6W1_LIBNDK + #define BUILD_OPT_RA6W1_CACHEXIP + #define BUILD_OPT_RA6W1_SLR + #define BUILD_OPT_RA6W1_MAC + + #undef SFLASH_DEBUGGING /* FOR_DEBUGGING */ + #undef SFLASH_NVEDIT_DEBUGGING /* FOR_DEBUGGING */ + #undef SFLASH_ENV_DEBUGGING /* FOR_DEBUGGING */ + #undef SFLASH_SYS_CFG_DEBUGGING /* FOR_DEBUGGING */ + #undef SFLASH_XFC_DEBUGGING /* FOR_DEBUGGING */ + + #define USING_HEAP_5 + +// For Wi-Fi Connection call-back event + #define WIFI_CONN_NOTI_WAIT_TICK (portCONVERT_MS_2_TICKS(100)) + + #define WIFI_CONN_SUCC_STA 0x1 + #define WIFI_CONN_FAIL_STA 0x2 + #define WIFI_DISCONN_STA 0x4 + #define WIFI_CONN_SUCC_SOFTAP 0x10 + #define WIFI_CONN_FAIL_SOFTAP 0x20 + #define WIFI_DISCONN_SOFTAP 0x40 + + #define WIFI_CONN_SUCC_STA_4_BLE 0x100 + #define WIFI_CONN_FAIL_STA_4_BLE 0x200 + +// common_utils.c function... + +void pntdumpbin(unsigned char * pbyBin, int nLen, int simple); + + #ifdef __cplusplus +extern "C" { + #endif +int ra6w1_cli_reply(char * cmdline, char * delimit, char * cli_reply); + + #ifdef __cplusplus +} + #endif +int factory_reset(int reboot_flag); +long subnetRangeLastIP(long ip, long subnet); +UINT writeDataToFlash(UINT * destFlashAddr, UINT * srcMemAddr, UINT size); + + #undef ISR_SEPARATE + #define WATCH_DOG_ENABLE + #undef USING_RAMLIB + +typedef enum __system_reboot__ +{ + SYS_RESET, + SYS_REBOOT_POR, + SYS_REBOOT +} SYSTEM_REBOOT; + +#endif /* __COMMON_DEF_H__ */ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/default_partition_table.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/default_partition_table.h new file mode 100644 index 000000000000..6d4c70eb54f0 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/default_partition_table.h @@ -0,0 +1,74 @@ +/** + **************************************************************************************** + * + * @file ra6w1/config/4MB/default_partition_table.h + * + * @brief Partition map for RA6W1 4MB SFLASH + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +/* $code_snippet START table_partition */ + +#define NVMS_PRODUCT_HEADER_PART_START 0x000000 +#define NVMS_PRODUCT_HEADER_PART_SIZE 0x002000 +#define NVMS_FIRMWARE_PART_START 0x002000 /* Alignment to 512KB is dictated by the default FLASH_REGION_SIZE. */ +#define NVMS_FIRMWARE_PART_SIZE 0x1FE000 + +/* +------------------2MB---------------------+ */ + +#define NVMS_GENERIC_PART_START 0x200000 +#define NVMS_GENERIC_PART_SIZE 0x020000 +#define NVMS_PLATFORM_PARAMS_PART_START 0x220000 +#define NVMS_PLATFORM_PARAMS_PART_SIZE 0x07F000 +#define NVMS_PARAM_PART_START 0x29F000 +#define NVMS_PARAM_PART_SIZE 0x001000 /* Recommended location, 4KB before the end of the 1st flash section. */ + +/* +------------------2MB---------------------+ */ + +#define NVMS_LOG_PART_START 0x2A0000 +#define NVMS_LOG_PART_SIZE 0x070000 +#define NVMS_BIN_PART_START 0x310000 +#define NVMS_BIN_PART_SIZE 0x0EF000 +#define NVMS_PARTITION_TABLE_START 0x3FF000 +#define NVMS_PARTITION_TABLE_SIZE 0x001000 /* Recommended location, 4KB before the end of the flash. */ +#ifdef NVMS_QSPI_TEST_PART + #define NVMS_QSPI_TEST_PART_START (QSPI_MEM1_VIRTUAL_BASE_ADDR + 0x000000) + #define NVMS_QSPI_TEST_PART_SIZE 0x080000 +#endif /* NVMS_QSPI_TEST_PART */ + +PARTITION2(NVMS_PRODUCT_HEADER_PART, 0) +PARTITION2(NVMS_FIRMWARE_PART, 0) +PARTITION2(NVMS_GENERIC_PART, PARTITION_FLAG_VES) +PARTITION2(NVMS_PLATFORM_PARAMS_PART, PARTITION_FLAG_READ_ONLY) +PARTITION2(NVMS_PARAM_PART, 0) +PARTITION2(NVMS_LOG_PART, 0) +PARTITION2(NVMS_BIN_PART, 0) +PARTITION2(NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY) +#ifdef NVMS_QSPI_TEST_PART +PARTITION2(NVMS_QSPI_TEST_PART, PARTITION_FLAG_VES) +#endif /* NVMS_QSPI_TEST_PART */ + +/* $code_snippet END */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/partition_table.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/partition_table.h new file mode 100644 index 000000000000..4025bde502e4 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/partition_table.h @@ -0,0 +1,67 @@ +/** + **************************************************************************************** + * + * @file ra6w1/config/4MB/partition_table.h + * + * @brief Partition map for RA6W1 4MB SFLASH + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +/* $code_snippet START table_partition */ + +#define NVMS_PRODUCT_HEADER_PART_START SF_BASE_ADDR +#define NVMS_PRODUCT_HEADER_PART_SIZE (SF_PRODUCT_HDR_SIZE * 2) // Header + Header-Backup + +#define NVMS_FIRMWARE_PART_START SF_RTOS_0 +#define NVMS_FIRMWARE_PART_SIZE SF_RTOS_SIZE + +#define NVMS_LOG_PART_START SF_TLS_CERT_BASE_ADDR +#define NVMS_LOG_PART_SIZE SF_USER_AREA_SIZE + +#define NVMS_GENERIC_PART_START SF_NVRAM_AREA +#define NVMS_GENERIC_PART_SIZE (SF_NVRAM_SIZE * 2) + +/* +------------------ 2 MB ---------------------+ */ + +#define NVMS_BIN_PART_START SF_USER_AREA +#define NVMS_BIN_PART_SIZE SF_USER_AREA_SIZE + +#define NVMS_PARTITION_TABLE_START SF_PARTITION_TBL +#define NVMS_PARTITION_TABLE_SIZE SF_PARTITION_TBL_SIZE /* Recommended location, 4KB before the end of the flash. */ + +/* +------------------ 4 MB ---------------------+ */ + +/* + * Partition information + */ +PARTITION2(NVMS_PRODUCT_HEADER_PART, 0) // Product Header +PARTITION2(NVMS_FIRMWARE_PART, 0) // RTOS #0 +PARTITION2(NVMS_LOG_PART, 0) // User Area #0 or TLS certificates +PARTITION2(NVMS_GENERIC_PART, PARTITION_FLAG_VES) // NVRAM +PARTITION2(NVMS_BIN_PART, 0) // User Area #1 +PARTITION2(NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY) // Partition Table + +/* $code_snippet END */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/suota/partition_table.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/suota/partition_table.h new file mode 100644 index 000000000000..69e44da3305d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/4MB/suota/partition_table.h @@ -0,0 +1,69 @@ +/** + **************************************************************************************** + * + * @file 4MB/suota/partition_table.h + * + * @brief Partition table selection. Image partition's size definition. + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +/* $code_snippet START suota_4MB_flash_partition_table */ + +#define NVMS_PRODUCT_HEADER_PART_START SF_BASE_ADDR +#define NVMS_PRODUCT_HEADER_PART_SIZE (SF_PRODUCT_HDR_SIZE * 2) // Header + Header-Backup +#define NVMS_FW_EXEC_PART_START SF_RTOS_0 /* Alignment to 512KB is dictated by the default FLASH_REGION_SIZE. */ +#define NVMS_FW_EXEC_PART_SIZE SF_RTOS_SIZE + +#define NVMS_LOG_PART_START SF_TLS_CERT_BASE_ADDR +#define NVMS_LOG_PART_SIZE SF_TLS_AREA_SIZE + +#define NVMS_GENERIC_PART_START SF_NVRAM_AREA +#define NVMS_GENERIC_PART_SIZE (SF_NVRAM_SIZE * AD_NVMS_VES_MULTIPLIER) + +/* +------------------ 2 MB ---------------------+ */ + +#define NVMS_FW_UPDATE_PART_START SF_RTOS_1 /* Alignment to 512KB is dictated by the default FLASH_REGION_SIZE. */ +#define NVMS_FW_UPDATE_PART_SIZE SF_RTOS_SIZE +#define NVMS_BIN_PART_START SF_USER_AREA +#define NVMS_BIN_PART_SIZE SF_USER_AREA_SIZE + +#define NVMS_PARTITION_TABLE_START SF_PARTITION_TBL +#define NVMS_PARTITION_TABLE_SIZE SF_PARTITION_TBL_SIZE /* Recommended location, 4KB before the end of the flash. */ + +/* +------------------ 4 MB ---------------------+ */ + +/* + * Partition information + */ +PARTITION2(NVMS_PRODUCT_HEADER_PART, 0) // Product Header +PARTITION2(NVMS_FW_EXEC_PART, 0) // RTOS #0 +PARTITION2(NVMS_LOG_PART, 0) // User Area #0 or TLS certificates +PARTITION2(NVMS_GENERIC_PART, PARTITION_FLAG_VES) // NVRAM +PARTITION2(NVMS_FW_UPDATE_PART, 0) // RTOS #1 +PARTITION2(NVMS_BIN_PART, 0) // User Area #1 +PARTITION2(NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY) // Partition Table + +/* $code_snippet END */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/8MB/at25sl/suota/partition_table.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/8MB/at25sl/suota/partition_table.h new file mode 100644 index 000000000000..a08db0b8975a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/8MB/at25sl/suota/partition_table.h @@ -0,0 +1,75 @@ +/** + **************************************************************************************** + * + * @file 8MB/at25sl/suota/partition_table.h + * + * @brief Partition table selection. Image partition's size definition. + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +/* START suota_8MB_flash_partition_table for AT25SL series */ + +#define NVMS_PRODUCT_HEADER_PART_START SF_BASE_ADDR +#define NVMS_PRODUCT_HEADER_PART_SIZE (SF_PRODUCT_HDR_SIZE * 2) // Header + Header-Backup + +#define NVMS_FW_EXEC_PART_START SF_RTOS_0 +#define NVMS_FW_EXEC_PART_SIZE SF_RTOS_SIZE + +/* +------------------ 3 MB ---------------------+ */ + +#define NVMS_GENERIC_PART_START SF_NVRAM_AREA +#define NVMS_GENERIC_PART_SIZE (SF_NVRAM_SIZE * AD_NVMS_VES_MULTIPLIER) + +#define NVMS_LOG_PART_START SF_TLS_CERT_BASE_ADDR +#define NVMS_LOG_PART_SIZE SF_TLS_AREA_SIZE + +/* +------------------ 4 MB ---------------------+ */ + +#define NVMS_FW_UPDATE_PART_START SF_RTOS_1 +#define NVMS_FW_UPDATE_PART_SIZE SF_RTOS_SIZE + +/* +------------------ 7 MB ---------------------+ */ + +#define NVMS_BIN_PART_START SF_USER_AREA +#define NVMS_BIN_PART_SIZE SF_USER_AREA_SIZE + +#define NVMS_PARTITION_TABLE_START SF_PARTITION_TBL +#define NVMS_PARTITION_TABLE_SIZE SF_PARTITION_TBL_SIZE /* Recommended location, 4KB before the end of the flash. */ + +/* +------------------ 8 MB ---------------------+ */ + +/* + * Partition information + */ +PARTITION2(NVMS_PRODUCT_HEADER_PART, 0) // Product Header +PARTITION2(NVMS_FW_EXEC_PART, 0) // RTOS #0 +PARTITION2(NVMS_GENERIC_PART, PARTITION_FLAG_VES) // NVRAM +PARTITION2(NVMS_LOG_PART, 0) // TLS certificates +PARTITION2(NVMS_FW_UPDATE_PART, 0) // RTOS #1 +PARTITION2(NVMS_BIN_PART, 0) // User Area +PARTITION2(NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY) // Partition Table + +/* $code_snippet END */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/ad_nvparam_defs.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/ad_nvparam_defs.h new file mode 100644 index 000000000000..b24dd1b180c4 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/ad_nvparam_defs.h @@ -0,0 +1,131 @@ +/** + **************************************************************************************** + * + * @file ad_nvparam_defs.h + * + * @brief NV-Parameters definitions + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +/* + * DO NOT MODIFY THIS FILE!!! + * + * NV-Parameters configuration shall be done in platform_nvparam.h!!! + * + */ + +#ifndef AD_NVPARAM_DEFS_H_ +#define AD_NVPARAM_DEFS_H_ + +#ifndef IN_AD_NVPARAM_C + +/* + * If this is included outside of ad_nvparam.c, we just define empty macros so nothing but tag + * definitions are created from platform_nvparam.h + */ +#define NVPARAM_AREA(NAME, PARTITION) +#define NVPARAM_PARAM(TAGNAME, LENGTH) +#define NVPARAM_VARPARAM(TAGNAME, LENGTH) +#define NVPARAM_AREA_END() + +#else + +/* + * If this is included inside of ad_nvparam.c, we will create proper configuration structure. + */ + +/* + * First we create configurations of each area - this will create "area_XXX" symbol for each defined + * area in platform_nvparam.h. It contains all parameters defined for given area. + */ +#define NVPARAM_AREA(NAME, PARTITION) \ + static /*const*/ parameter_t area_ ## NAME[] = { +#define NVPARAM_PARAM(TAGNAME, LENGTH) \ + { \ + .name = TAGNAME, \ + .attr.flags = 0, \ + .attr.length = LENGTH, \ + }, +#define NVPARAM_VARPARAM(TAGNAME, LENGTH) \ + { \ + .name = TAGNAME, \ + .attr.flags = FLAG_VARIABLE_LEN, \ + .attr.length = LENGTH, \ + }, +#define NVPARAM_AREA_END() \ + }; + +#undef PLATFORM_NVPARAM_H_ +#if (dg_configNVPARAM_APP_AREA == 2) + #undef APP_NVPARAM_H_ + #if defined(dg_configADNVPARAM_PROJ_FILE) + #include dg_configADNVPARAM_PROJ_FILE + #else + #error "dg_configADNVPARAM_PROJ_FILE is not exist !!" + #endif +#else + #include "platform_nvparam.h" +#endif + + +/* + * Next, using the same platform_nvparam.h, we define list of areas. Each has proper attributes set + * and pointer to corresponding area structure. + */ +#undef NVPARAM_AREA +#undef NVPARAM_PARAM +#undef NVPARAM_VARPARAM +#undef NVPARAM_AREA_END +#define NVPARAM_AREA(NAME, PARTITION) \ + { \ + .name = #NAME, \ + .parameters = area_ ## NAME, \ + .num_parameters = sizeof(area_ ## NAME) / sizeof(area_ ## NAME[0]), \ + }, +#define NVPARAM_PARAM(TAGNAME, LENGTH) +#define NVPARAM_VARPARAM(TAGNAME, LENGTH) +#define NVPARAM_AREA_END() + +static const area_t areas[] = +{ +#undef PLATFORM_NVPARAM_H_ +#if (dg_configNVPARAM_APP_AREA == 2) + #undef APP_NVPARAM_H_ + #if defined(dg_configADNVPARAM_PROJ_FILE) + #include dg_configADNVPARAM_PROJ_FILE + #else + #error "dg_configADNVPARAM_PROJ_FILE is not exist !!" + #endif +#else + #include "platform_nvparam.h" +#endif +}; + +#define num_areas (sizeof(areas) / sizeof(areas[0])) + +#endif /* IN_AD_NVPARAM_C */ + +#endif /* AD_NVPARAM_DEFS_H_ */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/boards/brd_io_config_ra6w1.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/boards/brd_io_config_ra6w1.h new file mode 100644 index 000000000000..5b7d3f60d0e9 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/boards/brd_io_config_ra6w1.h @@ -0,0 +1,104 @@ +/** + * \addtogroup PLA_BSP_CONFIG + * \{ + * \addtogroup PLA_BSP_CFG_BOARDS + * \{ + */ + +/** + **************************************************************************************** + * + * @file brd_io_config_ra6w1.h + * + * @brief Board Support Package. RA6W1 Board I/O configuration. + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BRD_IO_CONFIG_RA6W1_H +#define BRD_IO_CONFIG_RA6W1_H + +#ifdef BSP_MCU_GROUP_RA6W1 + #include "bsp_pin_cfg.h" +#endif + +#ifdef EXT_INTR1_PIN + #define BTN_FR EXT_INTR1_PIN +#endif + +#ifdef EXT_INTR2_PIN + #define BTN_WPS EXT_INTR2_PIN +#endif + +/* LED configuration section */ +#ifdef LED0 + #define LED0_PORT (LED0 >> BSP_IO_PORT_OFFSET) + #define LED0_PIN (LED0 & BSP_IO_PIN_BITS) + #define LED0_MODE (GPIO_W_CFG_PORT_DIRECTION_OUTPUT) + #define LED0_FUNC (GPIO_W_PERIPHERAL_GPIO) +#endif + +/*WAKUP PIN*/ +#define RTC_WAKEUP_IO (BSP_WAKEUP_GPIO_P0_11) +#define RTC_WAKEUP_IO_EDGE (BSP_WAKEUP_EDGE_LOW) + +#define BTN_WAKEUP_MODE (GPIO_W_CFG_PULLUP_ENABLE) +#define BTN_WAKEUP_FUNC (GPIO_W_PERIPHERAL_GPIO) + +#define ADC_WAKEUP_MODE (GPIO_W_CFG_PORT_DIRECTION_INPUT | GPIO_W_CFG_ANALOG_ENABLE) + +#ifdef BTN_FR + #define BTN_FR_PORT (BTN_FR >> BSP_IO_PORT_OFFSET) + #define BTN_FR_PIN (BTN_FR & BSP_IO_PIN_BITS) + #define BTN_FR_MODE (GPIO_W_CFG_PULLUP_ENABLE | GPIO_W_CFG_RETENTION) + #define BTN_FR_FUNC (GPIO_W_PERIPHERAL_GPIO) + #define BTN_FR_INT_POL (BSP_IO_LEVEL_HIGH) + #define BTN_FR_INT_SEL (HW_GPIO_INT_EDGE) + #define BTN_FR_CHK_TIME 5 /* 5 sec. */ +#endif + +#ifdef BTN_WPS + #define BTN_WPS_PORT (BTN_WPS >> BSP_IO_PORT_OFFSET) + #define BTN_WPS_PIN (BTN_WPS & BSP_IO_PIN_BITS) + #define BTN_WPS_MODE (GPIO_W_CFG_PULLUP_ENABLE | GPIO_W_CFG_RETENTION) + #define BTN_WPS_FUNC (GPIO_W_PERIPHERAL_GPIO) + #define BTN_WPS_INT_POL (BSP_IO_LEVEL_HIGH) + #define BTN_WPS_INT_SEL (HW_GPIO_INT_EDGE) + #define BTN_WPS_CHK_TIME 1 /* 1 sec. */ +#endif + +#ifdef LED0 + #define FR_WPS_LED_PORT (LED0_PORT) + #define FR_WPS_LED_PIN (LED0_PIN) + #define FR_WPS_LED_MODE (LED0_MODE) + #define FR_WPS_LED_FUNC (LED0_FUNC) +#endif + +#endif /* BRD_IO_CONFIG_RA6W1_H */ + +/** + \} + \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_debug.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_debug.h new file mode 100644 index 000000000000..d6a63ae31cbe --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_debug.h @@ -0,0 +1,1099 @@ +/** + * \addtogroup PLA_BSP_CONFIG + * \{ + * \addtogroup BSP_DEBUG Debug Configuration + * \brief Board debug support configuration definitions + * \{ + */ + +/** + **************************************************************************************** + * + * @file bsp_debug.h + * + * @brief Board Support Package. Debug Configuration. + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_DEBUG_H_ +#define BSP_DEBUG_H_ + +/** + * \addtogroup DEBUG_SETTINGS + * + * \brief Debugging settings + * + * \{ + */ + +/* -------------------------------------- Debug settings ---------------------------------------- */ + +/** + * \brief Enable debugger + */ +#ifndef dg_configENABLE_DEBUGGER + #define dg_configENABLE_DEBUGGER (1) +#endif + +/** + * \brief Use SW cursor + */ +#ifndef dg_configUSE_SW_CURSOR + #define dg_configUSE_SW_CURSOR (0) + #define SW_CURSOR_PORT (0) + #define SW_CURSOR_PIN (0) +#else + #if (DEVICE_FAMILY == DA1468X) + #if dg_configBLACK_ORCA_MB_REV == BLACK_ORCA_MB_REV_D + #if !defined SW_CURSOR_PORT && !defined SW_CURSOR_PIN + #define SW_CURSOR_PORT (0) + #define SW_CURSOR_PIN (7) + #endif + #else + #if !defined SW_CURSOR_PORT && !defined SW_CURSOR_PIN + #define SW_CURSOR_PORT (2) + #define SW_CURSOR_PIN (3) + #endif + #endif + #elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + #if !defined SW_CURSOR_PORT && !defined SW_CURSOR_PIN + #define SW_CURSOR_PORT (0) + #define SW_CURSOR_PIN (16) + #endif + #endif +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/** + * \} + */ + +/** + * \addtogroup DEBUG_SETTINGS + * \{ + * \addtogroup SYSTEM_VIEW + * + * \brief System View configuration settings + * \{ + */ + +/* ----------------------------- Segger System View configuration ------------------------------- */ + +/** + * \brief Segger's System View + * + * When enabled the application should also call SEGGER_SYSVIEW_Conf() to enable system monitoring. + * configTOTAL_HEAP_SIZE should be increased by dg_configSYSTEMVIEW_STACK_OVERHEAD bytes for each system task. + * For example, if there are 8 system tasks configTOTAL_HEAP_SIZE should be increased by + * (8 * dg_configSYSTEMVIEW_STACK_OVERHEAD) bytes. + * + * - 0 : Disabled + * - 1 : Enabled + * + */ +#ifndef dg_configSYSTEMVIEW + #define dg_configSYSTEMVIEW (0) +#endif + +/** + * \brief Stack size overhead when System View API is used + * + * All thread stack sizes plus the the stack of IRQ handlers will be increased by that amount + * to avoid stack overflow when System View is monitoring the system. + */ +#ifndef dg_configSYSTEMVIEW_STACK_OVERHEAD + #define dg_configSYSTEMVIEW_STACK_OVERHEAD (256) +#endif + +/* + * Enable/Disable System View monitoring time critical interrupt handlers (CPM, USB). + * Disabling ISR monitoring could help reducing assertions triggered by System View monitoring overhead. + * + */ + +/** + * \brief Let System View monitor CPM related ISRs (SWTIM1_Handler / WKUP_GPIO_Handler). + * + * - 0 : Disabled + * - 1 : Enabled + */ +#ifndef dg_configSYSTEMVIEW_MONITOR_CPM_ISR + #define dg_configSYSTEMVIEW_MONITOR_CPM_ISR (1) +#endif + +/** + * \brief Let System View monitor USB related ISRs (USB_Handler / VBUS_Handler). + * + * - 0 : Disabled + * - 1 : Enabled + */ +#ifndef dg_configSYSTEMVIEW_MONITOR_USB_ISR + #define dg_configSYSTEMVIEW_MONITOR_USB_ISR (1) +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/** + * \} + * \} + */ + +/* --------------------------------- DEBUG GPIO handling macros --------------------------------- */ +#if (DEVICE_FAMILY == DA1468X) + #define DBG_CONFIGURE(flag, name, func) \ + { \ + if (flag == 1) { \ + name ## _MODE_REG = 0x300 + func; \ + } \ + } + + #define DBG_CONFIGURE_HIGH(flag, name) \ + { \ + if (flag == 1) { \ + name ## _SET_REG = name ## _PIN; \ + name ## _MODE_REG = 0x300; \ + } \ + } + + #define DBG_CONFIGURE_LOW(flag, name) \ + { \ + if (flag == 1) { \ + name ## _RESET_REG = name ## _PIN; \ + name ## _MODE_REG = 0x300; \ + } \ + } + + #define DBG_SET_HIGH(flag, name) \ + { \ + if (flag == 1) { \ + name ## _SET_REG = name ## _PIN; \ + } \ + } + + #define DBG_SET_LOW(flag, name) \ + { \ + if (flag == 1) { \ + name ## _RESET_REG = name ## _PIN; \ + } \ + } +#elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + + #define DBG_GET_SET_PAD_LATCH_REG(name) *(((volatile uint32_t *) (&name ## _SET_REG) == \ + (volatile uint32_t *) (&GPIO->P0_SET_DATA_REG)) ? &CRG_TOP-> \ + P0_SET_PAD_LATCH_REG : &CRG_TOP->P1_SET_PAD_LATCH_REG) + #define DBG_GET_RESET_PAD_LATCH_REG(name) *(((volatile uint32_t *) (&name ## _SET_REG) == \ + (volatile uint32_t *) (&GPIO->P0_SET_DATA_REG)) ? &CRG_TOP-> \ + P0_RESET_PAD_LATCH_REG : &CRG_TOP-> \ + P1_RESET_PAD_LATCH_REG) + #define DBG_TOGGLE_PIN_PAD_LATCH(name) DBG_GET_SET_PAD_LATCH_REG(name) = name ## _PIN; \ + DBG_GET_RESET_PAD_LATCH_REG(name) = name ## _PIN + #define DBG_SET_PIN_REG(name) name ## _SET_REG = name ## _PIN + #define DBG_RESET_PIN_REG(name) name ## _RESET_REG = name ## _PIN + + #define DBG_CONFIGURE(flag, name, func) \ + { \ + if (flag == 1) { \ + ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, COM_IS_UP) == 1); \ + name ## _MODE_REG = 0x300 + func; \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + + #define DBG_CONFIGURE_HIGH(flag, name) \ + { \ + if (flag == 1) { \ + ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, AUD_IS_UP) == 1); \ + name ## _MODE_REG = 0x300; \ + DBG_SET_PIN_REG(name); \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + + #define DBG_CONFIGURE_LOW(flag, name) \ + { \ + if (flag == 1) { \ + ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, AUD_IS_UP) == 1); \ + name ## _MODE_REG = 0x300; \ + DBG_RESET_PIN_REG(name); \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + + #define DBG_SET_HIGH(flag, name) \ + { \ + if (flag == 1) { \ + ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, AUD_IS_UP) == 1); \ + name ## _MODE_REG = 0x300; \ + DBG_SET_PIN_REG(name); \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + + #define DBG_SET_LOW(flag, name) \ + { \ + if (flag == 1) { \ + ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, AUD_IS_UP) == 1); \ + name ## _MODE_REG = 0x300; \ + DBG_RESET_PIN_REG(name); \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + +#elif (DEVICE_FAMILY == DA1640X) + + #define DBG_GET_SET_PAD_LATCH_REG(name) // *(((volatile uint32_t *)(&name##_SET_REG) == (volatile uint32_t *)(&GPIO->P0_SET_DATA_REG)) ? &CRG_TOP->P0_SET_PAD_LATCH_REG : &CRG_TOP->P1_SET_PAD_LATCH_REG) + #define DBG_GET_RESET_PAD_LATCH_REG(name) // *(((volatile uint32_t *)(&name##_SET_REG) == (volatile uint32_t *)(&GPIO->P0_SET_DATA_REG)) ? &CRG_TOP->P0_RESET_PAD_LATCH_REG : &CRG_TOP->P1_RESET_PAD_LATCH_REG) + #define DBG_TOGGLE_PIN_PAD_LATCH(name) /* DBG_GET_SET_PAD_LATCH_REG(name) = name##_PIN; */ \ + /* DBG_GET_RESET_PAD_LATCH_REG(name) = name##_PIN */ + #define DBG_SET_PIN_REG(name) // name##_SET_REG = name##_PIN + #define DBG_RESET_PIN_REG(name) // name##_RESET_REG = name##_PIN + + #define DBG_CONFIGURE(flag, name, func) \ + { \ + if (flag == 1) { \ + /*ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, COM_IS_UP) == 1);*/ \ + name ## _MODE_REG = 0x300 + func; \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + + #define DBG_CONFIGURE_HIGH(flag, name) \ + { \ + if (flag == 1) { \ + /*ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, AUD_IS_UP) == 1);*/ \ + name ## _MODE_REG = 0x300; \ + DBG_SET_PIN_REG(name); \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + + #define DBG_CONFIGURE_LOW(flag, name) \ + { \ + if (flag == 1) { \ + /*ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, AUD_IS_UP) == 1);*/ \ + name ## _MODE_REG = 0x300; \ + DBG_RESET_PIN_REG(name); \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + + #define DBG_SET_HIGH(flag, name) \ + { \ + if (flag == 1) { \ + /*ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, AUD_IS_UP) == 1);*/ \ + name ## _MODE_REG = 0x300; \ + DBG_SET_PIN_REG(name); \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + + #define DBG_SET_LOW(flag, name) \ + { \ + if (flag == 1) { \ + /*ASSERT_WARNING(REG_GETF(CRG_TOP, SYS_STAT_REG, AUD_IS_UP) == 1);*/ \ + name ## _MODE_REG = 0x300; \ + DBG_RESET_PIN_REG(name); \ + DBG_TOGGLE_PIN_PAD_LATCH(name); \ + } \ + } + +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/* ---------------------------------- HardFault or NMI event ------------------------------------ */ + +#ifndef EXCEPTION_DEBUG + #define EXCEPTION_DEBUG (0) // Requires GPIO config. +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/* --------------------------------- Clock and Power Manager ------------------------------------ */ + +#if (DEVICE_FAMILY == DA1468X) + + #ifndef CPM_DEBUG + #define CPM_DEBUG (0) + #endif + + #ifndef CPM_USE_FUNCTIONAL_DEBUG + #define CPM_USE_FUNCTIONAL_DEBUG (0) // Requires GPIO config. + #endif + + #ifndef CPM_USE_TIMING_DEBUG + #define CPM_USE_TIMING_DEBUG (0) // Requires GPIO config. + #endif + + #ifndef CPM_USE_RCX_DEBUG + #define CPM_USE_RCX_DEBUG (0) // Requires logging. + #endif + +#elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X) || (DEVICE_FAMILY == DA1640X)) + + #ifndef PWR_MGR_DEBUG + #define PWR_MGR_DEBUG (0) + #endif + + #ifndef SYS_TIM_DEBUG + #define SYS_TIM_DEBUG (0) + #endif + + #ifndef PWR_MGR_FUNCTIONAL_DEBUG + #define PWR_MGR_FUNCTIONAL_DEBUG (0) // Requires GPIO config. + #endif + + #ifndef PWR_MGR_USE_TIMING_DEBUG + #define PWR_MGR_USE_TIMING_DEBUG (0) // Requires GPIO config. + #endif + + #ifndef CLK_MGR_USE_TIMING_DEBUG + #define CLK_MGR_USE_TIMING_DEBUG (0) // Requires GPIO config. + #endif + +#endif + +/* Controls which RAM blocks will be retained when the MEASURE_SLEEP_CURRENT test mode is used + * (optional). */ +#ifndef dg_configTESTMODE_RETAIN_RAM + #define dg_configTESTMODE_RETAIN_RAM (0x1F) +#endif + +/* Controls whether the Cache will be retained when the MEASURE_SLEEP_CURRENT test mode is used + * (optional). */ +#ifndef dg_configTESTMODE_RETAIN_CACHE + #define dg_configTESTMODE_RETAIN_CACHE (0) +#endif + +/* Controls whether the ECC RAM will be retained when the MEASURE_SLEEP_CURRENT test mode is used + * (optional). */ +#ifdef dg_config_TESTMODE_RETAIN_ECCRAM + #error "dg_config_TESTMODE_RETAIN_ECCRAM is no longer supported. " +"Use dg_configTESTMODE_RETAIN_ECCRAM instead (no underscore)!" +#endif + +#ifndef dg_configTESTMODE_RETAIN_ECCRAM + #define dg_configTESTMODE_RETAIN_ECCRAM (0) +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/* --------------------------------------- USB Charger ------------------------------------------ */ + +#if (DEVICE_FAMILY == DA1468X) + + #ifndef DEBUG_USB_CHARGER + #define DEBUG_USB_CHARGER (0) + #endif + + #ifndef DEBUG_USB_CHARGER_FSM + #define DEBUG_USB_CHARGER_FSM (0) + #endif + + #ifndef DEBUG_USB_CHARGER_PRINT + #define DEBUG_USB_CHARGER_PRINT (0) + #endif + + #ifndef USB_CHARGER_TIMING_DEBUG + #define USB_CHARGER_TIMING_DEBUG (0) // Requires GPIO config. + #endif + +#elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + + #ifndef SYS_CHARGER_TIMING_DEBUG + #define SYS_CHARGER_TIMING_DEBUG (0) + #endif + +#endif /* DEVICE_FAMILY */ + +/* ---------------------------------------------------------------------------------------------- */ + +/* ------------------------------------------ Flash --------------------------------------------- */ +#ifndef FLASH_DEBUG + #define FLASH_DEBUG (0) // Requires GPIO config. +#endif + +#ifndef __DBG_QSPI_ENABLED + #define __DBG_QSPI_ENABLED (0) +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/* ------------------------------------------ Common -------------------------------------------- */ +#ifndef CMN_TIMING_DEBUG + #define CMN_TIMING_DEBUG (0) // Requires GPIO config. +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/* ------------------------------------ GPIO configuration -------------------------------------- */ + +/* Enable/Disable GPIO pin assignment conflict detection + */ +#define DEBUG_GPIO_ALLOC_MONITOR_ENABLED (0) + +/* Exception handling debug configuration + * + */ +#if (EXCEPTION_DEBUG == 0) + +// Dummy values to suppress compiler errors + #define EXCEPTIONDBG_MODE_REG *(volatile int *) 0x20000000 + #define EXCEPTIONDBG_SET_REG *(volatile int *) 0x20000000 + #define EXCEPTIONDBG_RESET_REG *(volatile int *) 0x20000000 + #define EXCEPTIONDBG_PIN (0) + +#else + + #if (DEVICE_FAMILY == DA1468X) + +// Tick (P3[0]) + #define EXCEPTIONDBG_MODE_REG GPIO->P30_MODE_REG + #define EXCEPTIONDBG_SET_REG GPIO->P3_SET_DATA_REG + #define EXCEPTIONDBG_RESET_REG GPIO->P3_RESET_DATA_REG + #define EXCEPTIONDBG_PIN (1 << 0) + + #elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + +// Tick + #define EXCEPTIONDBG_MODE_REG GPIO->P0_30_MODE_REG + #define EXCEPTIONDBG_SET_REG GPIO->P0_SET_DATA_REG + #define EXCEPTIONDBG_RESET_REG GPIO->P0_RESET_DATA_REG + #define EXCEPTIONDBG_PIN (1 << 30) + + #endif /* DEVICE_FAMILY */ + +#endif /* EXCEPTION_DEBUG */ + +/* Functional debug configuration + * + * Note that GPIO overlapping is allowed if the tracked events are discrete and the initial GPIO + * configuration is the same! No checking is performed for erroneous configuration though! + * + */ +#if (DEVICE_FAMILY == DA1468X) + + #if (CPM_USE_FUNCTIONAL_DEBUG == 0) + +// Tick (initial configuration: low) + #define CPMDBG_TICK_MODE_REG *(volatile int *) 0x20000000 + #define CPMDBG_TICK_SET_REG *(volatile int *) 0x20000000 + #define CPMDBG_TICK_RESET_REG *(volatile int *) 0x20000000 + #define CPMDBG_TICK_PIN (0) + +// External Wake-up (initial configuration: low) + #define CPMDBG_EXT_WKUP_MODE_REG *(volatile int *) 0x20000000 + #define CPMDBG_EXT_WKUP_SET_REG *(volatile int *) 0x20000000 + #define CPMDBG_EXT_WKUP_RESET_REG *(volatile int *) 0x20000000 + #define CPMDBG_EXT_WKUP_PIN (0) + +// Active / Sleep (initial configuration: high) + #define CPMDBG_POWERUP_MODE_REG *(volatile int *) 0x20000000 + #define CPMDBG_POWERUP_SET_REG *(volatile int *) 0x20000000 + #define CPMDBG_POWERUP_RESET_REG *(volatile int *) 0x20000000 + #define CPMDBG_POWERUP_PIN (0) + + #else + +// Tick (P2[3]) + #define CPMDBG_TICK_MODE_REG GPIO->P23_MODE_REG + #define CPMDBG_TICK_SET_REG GPIO->P2_SET_DATA_REG + #define CPMDBG_TICK_RESET_REG GPIO->P2_RESET_DATA_REG + #define CPMDBG_TICK_PIN (1 << 3) + +// External Wake-up (P3[0]) + #define CPMDBG_EXT_WKUP_MODE_REG GPIO->P30_MODE_REG + #define CPMDBG_EXT_WKUP_SET_REG GPIO->P3_SET_DATA_REG + #define CPMDBG_EXT_WKUP_RESET_REG GPIO->P3_RESET_DATA_REG + #define CPMDBG_EXT_WKUP_PIN (1 << 0) + +// Active / Sleep (P1[4]) + #define CPMDBG_POWERUP_MODE_REG GPIO->P14_MODE_REG + #define CPMDBG_POWERUP_SET_REG GPIO->P1_SET_DATA_REG + #define CPMDBG_POWERUP_RESET_REG GPIO->P1_RESET_DATA_REG + #define CPMDBG_POWERUP_PIN (1 << 4) + #endif + +#elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + + #if (PWR_MGR_FUNCTIONAL_DEBUG == 0) + +// Dummy values to suppress compiler errors + #define PWRDBG_TICK_MODE_REG *(volatile int *) 0x20000000 + #define PWRDBG_TICK_SET_REG *(volatile int *) 0x20000000 + #define PWRDBG_TICK_RESET_REG *(volatile int *) 0x20000000 + #define PWRDBG_TICK_PIN (0) + + #define PWRDBG_POWERUP_MODE_REG *(volatile int *) 0x20000000 + #define PWRDBG_POWERUP_SET_REG *(volatile int *) 0x20000000 + #define PWRDBG_POWERUP_RESET_REG *(volatile int *) 0x20000000 + #define PWRDBG_POWERUP_PIN (0) + + #else + +// Tick + #define PWRDBG_TICK_MODE_REG GPIO->P0_19_MODE_REG + #define PWRDBG_TICK_SET_REG GPIO->P0_SET_DATA_REG + #define PWRDBG_TICK_RESET_REG GPIO->P0_RESET_DATA_REG + #define PWRDBG_TICK_PIN (1 << 19) + +// Active / Sleep + #define PWRDBG_POWERUP_MODE_REG GPIO->P0_21_MODE_REG + #define PWRDBG_POWERUP_SET_REG GPIO->P0_SET_DATA_REG + #define PWRDBG_POWERUP_RESET_REG GPIO->P0_RESET_DATA_REG + #define PWRDBG_POWERUP_PIN (1 << 21) + + #endif /* PWR_MGR_FUNCTIONAL_DEBUG */ + +#endif /* DEVICE_FAMILY */ + +/* Timing debug configuration + * + * Note that in this mode the pad latches are removed immediately after the execution resumes from + * the __WFI(). Because of this, it is not advised to use this feature in projects that use GPIOS. + * Nevertheless, in case it is used, make sure that the "peripheral initialization" is also done + * at that point, modifying sys_power_mgr.c accordingly. + * + * Note also that GPIO overlapping is allowed if the tracked events are discrete and the initial + * GPIO configuration is the same! No checking is performed for erroneous configuration though! + * + */ +#if (DEVICE_FAMILY == DA1468X) + + #if (CPM_USE_TIMING_DEBUG == 0) + +// CPM: sleep or idle entry (until __WFI() is called) (initial configuration: high) + #define CPMDBG_SLEEP_ENTER_MODE_REG *(volatile int *) 0x20000000 + #define CPMDBG_SLEEP_ENTER_SET_REG *(volatile int *) 0x20000000 + #define CPMDBG_SLEEP_ENTER_RESET_REG *(volatile int *) 0x20000000 + #define CPMDBG_SLEEP_ENTER_PIN (0) + +// CPM: sleep or idle exit (initial configuration: low) + #define CPMDBG_SLEEP_EXIT_MODE_REG *(volatile int *) 0x20000000 + #define CPMDBG_SLEEP_EXIT_SET_REG *(volatile int *) 0x20000000 + #define CPMDBG_SLEEP_EXIT_RESET_REG *(volatile int *) 0x20000000 + #define CPMDBG_SLEEP_EXIT_PIN (0) + +// Low clocks (initial configuration: low) + #define CPMDBG_LOWER_CLOCKS_MODE_REG *(volatile int *) 0x20000000 + #define CPMDBG_LOWER_CLOCKS_SET_REG *(volatile int *) 0x20000000 + #define CPMDBG_LOWER_CLOCKS_RESET_REG *(volatile int *) 0x20000000 + #define CPMDBG_LOWER_CLOCKS_PIN (0) + +// XTAL16M settling (initial configuration: low) + #define CPMDBG_XTAL16M_SETTLED_MODE_REG *(volatile int *) 0x20000000 + #define CPMDBG_XTAL16M_SETTLED_SET_REG *(volatile int *) 0x20000000 + #define CPMDBG_XTAL16M_SETTLED_RESET_REG *(volatile int *) 0x20000000 + #define CPMDBG_XTAL16M_SETTLED_PIN (0) + + #else + +// CPM: sleep or idle entry (until __WFI() is called) (P1[7]) + #define CPMDBG_SLEEP_ENTER_MODE_REG GPIO->P17_MODE_REG + #define CPMDBG_SLEEP_ENTER_SET_REG GPIO->P1_SET_DATA_REG + #define CPMDBG_SLEEP_ENTER_RESET_REG GPIO->P1_RESET_DATA_REG + #define CPMDBG_SLEEP_ENTER_PIN (1 << 7) + +// CPM: sleep or idle exit (P1[6]) + #define CPMDBG_SLEEP_EXIT_MODE_REG GPIO->P16_MODE_REG + #define CPMDBG_SLEEP_EXIT_SET_REG GPIO->P1_SET_DATA_REG + #define CPMDBG_SLEEP_EXIT_RESET_REG GPIO->P1_RESET_DATA_REG + #define CPMDBG_SLEEP_EXIT_PIN (1 << 6) + +// Low clocks (P1[5]) + #define CPMDBG_LOWER_CLOCKS_MODE_REG GPIO->P15_MODE_REG + #define CPMDBG_LOWER_CLOCKS_SET_REG GPIO->P1_SET_DATA_REG + #define CPMDBG_LOWER_CLOCKS_RESET_REG GPIO->P1_RESET_DATA_REG + #define CPMDBG_LOWER_CLOCKS_PIN (1 << 5) + +// XTAL16M settling (P1[4]) + #define CPMDBG_XTAL16M_SETTLED_MODE_REG GPIO->P14_MODE_REG + #define CPMDBG_XTAL16M_SETTLED_SET_REG GPIO->P1_SET_DATA_REG + #define CPMDBG_XTAL16M_SETTLED_RESET_REG GPIO->P1_RESET_DATA_REG + #define CPMDBG_XTAL16M_SETTLED_PIN (1 << 4) + + #endif /* CPM_USE_TIMING_DEBUG */ + +#elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X) || (DEVICE_FAMILY == DA1640X)) + + #if (PWR_MGR_USE_TIMING_DEBUG == 0) + +// Dummy values to suppress compiler errors + #define PWRDBG_SLEEP_ENTER_MODE_REG *(volatile int *) 0x20000000 + #define PWRDBG_SLEEP_ENTER_SET_REG *(volatile int *) 0x20000000 + #define PWRDBG_SLEEP_ENTER_RESET_REG *(volatile int *) 0x20000000 + #define PWRDBG_SLEEP_ENTER_PIN (0) + + #define PWRDBG_SLEEP_EXIT_MODE_REG *(volatile int *) 0x20000000 + #define PWRDBG_SLEEP_EXIT_SET_REG *(volatile int *) 0x20000000 + #define PWRDBG_SLEEP_EXIT_RESET_REG *(volatile int *) 0x20000000 + #define PWRDBG_SLEEP_EXIT_PIN (0) + + #else + +// Power manager: sleep or idle entry (until __WFI() is called) + #define PWRDBG_SLEEP_ENTER_MODE_REG GPIO->P0_17_MODE_REG + #define PWRDBG_SLEEP_ENTER_SET_REG GPIO->P0_SET_DATA_REG + #define PWRDBG_SLEEP_ENTER_RESET_REG GPIO->P0_RESET_DATA_REG + #define PWRDBG_SLEEP_ENTER_PIN (1 << 17) + +// Power manager: sleep or idle exit + #define PWRDBG_SLEEP_EXIT_MODE_REG GPIO->P0_18_MODE_REG + #define PWRDBG_SLEEP_EXIT_SET_REG GPIO->P0_SET_DATA_REG + #define PWRDBG_SLEEP_EXIT_RESET_REG GPIO->P0_RESET_DATA_REG + #define PWRDBG_SLEEP_EXIT_PIN (1 << 18) + + #endif /* CLK_MGR_USE_TIMING_DEBUG */ + + #if (CLK_MGR_USE_TIMING_DEBUG == 0) + +// Dummy values to suppress compiler errors + #define CLKDBG_LOWER_CLOCKS_MODE_REG *(volatile int *) 0x20000000 + #define CLKDBG_LOWER_CLOCKS_SET_REG *(volatile int *) 0x20000000 + #define CLKDBG_LOWER_CLOCKS_RESET_REG *(volatile int *) 0x20000000 + #define CLKDBG_LOWER_CLOCKS_PIN (0) + + #define CLKDBG_XTAL32M_SETTLED_MODE_REG *(volatile int *) 0x20000000 + #define CLKDBG_XTAL32M_SETTLED_SET_REG *(volatile int *) 0x20000000 + #define CLKDBG_XTAL32M_SETTLED_RESET_REG *(volatile int *) 0x20000000 + #define CLKDBG_XTAL32M_SETTLED_PIN (0) + + #define CLKDBG_XTAL32M_READY_MODE_REG *(volatile int *) 0x20000000 + #define CLKDBG_XTAL32M_READY_SET_REG *(volatile int *) 0x20000000 + #define CLKDBG_XTAL32M_READY_RESET_REG *(volatile int *) 0x20000000 + #define CLKDBG_XTAL32M_READY_PIN (0) + + #define CLKDBG_PLL_ON_MODE_REG *(volatile int *) 0x20000000 + #define CLKDBG_PLL_ON_SET_REG *(volatile int *) 0x20000000 + #define CLKDBG_PLL_ON_RESET_REG *(volatile int *) 0x20000000 + #define CLKDBG_PLL_ON_PIN (0) + + #else + +// Low clocks + #define CLKDBG_LOWER_CLOCKS_MODE_REG GPIO->P0_26_MODE_REG + #define CLKDBG_LOWER_CLOCKS_SET_REG GPIO->P0_SET_DATA_REG + #define CLKDBG_LOWER_CLOCKS_RESET_REG GPIO->P0_RESET_DATA_REG + #define CLKDBG_LOWER_CLOCKS_PIN (1 << 26) + +// XTAL32M settling + #define CLKDBG_XTAL32M_SETTLED_MODE_REG GPIO->P0_27_MODE_REG + #define CLKDBG_XTAL32M_SETTLED_SET_REG GPIO->P0_SET_DATA_REG + #define CLKDBG_XTAL32M_SETTLED_RESET_REG GPIO->P0_RESET_DATA_REG + #define CLKDBG_XTAL32M_SETTLED_PIN (1 << 27) + +// XTAL32M Ready IRQ + #define CLKDBG_XTAL32M_READY_MODE_REG GPIO->P0_28_MODE_REG + #define CLKDBG_XTAL32M_READY_SET_REG GPIO->P0_SET_DATA_REG + #define CLKDBG_XTAL32M_READY_RESET_REG GPIO->P0_RESET_DATA_REG + #define CLKDBG_XTAL32M_READY_PIN (1 << 28) + +// PLL is on + #define CLKDBG_PLL_ON_MODE_REG GPIO->P0_29_MODE_REG + #define CLKDBG_PLL_ON_SET_REG GPIO->P0_SET_DATA_REG + #define CLKDBG_PLL_ON_RESET_REG GPIO->P0_RESET_DATA_REG + #define CLKDBG_PLL_ON_PIN (1 << 29) + + #endif /* CLK_MGR_USE_TIMING_DEBUG */ + +#endif /* DEVICE_FAMILY */ + +#if (DEVICE_FAMILY == DA1468X) + + #if (USB_CHARGER_TIMING_DEBUG == 0) + +// CHRG: Inside critical section (initial configuration: low) + #define CHRGDBG_CRITICAL_SECTION_MODE_REG *(volatile int *) 0x20000000 + #define CHRGDBG_CRITICAL_SECTION_SET_REG *(volatile int *) 0x20000000 + #define CHRGDBG_CRITICAL_SECTION_RESET_REG *(volatile int *) 0x20000000 + #define CHRGDBG_CRITICAL_SECTION_PIN (0) + +// CHRG: FSM task (initial configuration: low) + #define CHRGDBG_FSM_TASK_MODE_REG *(volatile int *) 0x20000000 + #define CHRGDBG_FSM_TASK_SET_REG *(volatile int *) 0x20000000 + #define CHRGDBG_FSM_TASK_RESET_REG *(volatile int *) 0x20000000 + #define CHRGDBG_FSM_TASK_PIN (0) + +// CHRG: Control task (initial configuration: low) + #define CPMDBG_CONTROL_TASK_MODE_REG *(volatile int *) 0x20000000 + #define CPMDBG_CONTROL_TASK_SET_REG *(volatile int *) 0x20000000 + #define CPMDBG_CONTROL_TASK_RESET_REG *(volatile int *) 0x20000000 + #define CPMDBG_CONTROL_TASK_PIN (0) + + #else + +// CHRG: Inside critical section (P3[2]) + #define CHRGDBG_CRITICAL_SECTION_MODE_REG GPIO->P32_MODE_REG + #define CHRGDBG_CRITICAL_SECTION_SET_REG GPIO->P3_SET_DATA_REG + #define CHRGDBG_CRITICAL_SECTION_RESET_REG GPIO->P3_RESET_DATA_REG + #define CHRGDBG_CRITICAL_SECTION_PIN (1 << 2) + +// CHRG: FSM task (P3[3]) + #define CHRGDBG_FSM_TASK_MODE_REG GPIO->P33_MODE_REG + #define CHRGDBG_FSM_TASK_SET_REG GPIO->P3_SET_DATA_REG + #define CHRGDBG_FSM_TASK_RESET_REG GPIO->P3_RESET_DATA_REG + #define CHRGDBG_FSM_TASK_PIN (1 << 3) + +// CHRG: Control task (P3[4]) + #define CPMDBG_CONTROL_TASK_MODE_REG GPIO->P34_MODE_REG + #define CPMDBG_CONTROL_TASK_SET_REG GPIO->P3_SET_DATA_REG + #define CPMDBG_CONTROL_TASK_RESET_REG GPIO->P3_RESET_DATA_REG + #define CPMDBG_CONTROL_TASK_PIN (1 << 4) + + #endif /* USB_CHARGER_TIMING_DEBUG */ + +#elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + #if (SYS_CHARGER_TIMING_DEBUG == 0) + + #define SYS_CHARGER_DBG_VBUS_MODE_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_VBUS_SET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_VBUS_RESET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_VBUS_PIN (0) + + #define SYS_CHARGER_DBG_CH_EVT_MODE_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_CH_EVT_SET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_CH_EVT_RESET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_CH_EVT_PIN (0) + + #define SYS_CHARGER_DBG_PRE_CH_MODE_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_PRE_CH_SET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_PRE_CH_RESET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_PRE_CH_PIN (0) + + #define SYS_CHARGER_DBG_CH_MODE_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_CH_SET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_CH_RESET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_CH_PIN (0) + + #define SYS_CHARGER_DBG_EOC_MODE_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_EOC_SET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_EOC_RESET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_EOC_PIN (0) + + #define SYS_CHARGER_DBG_ENUM_DONE_MODE_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_ENUM_DONE_SET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_ENUM_DONE_RESET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_ENUM_DONE_PIN (0) + + #define SYS_CHARGER_DBG_SUS_MODE_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_SUS_SET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_SUS_RESET_REG *(volatile int *) 0x20000000 + #define SYS_CHARGER_DBG_SUS_PIN (0) + + #else + + #define SYS_CHARGER_DBG_VBUS_MODE_REG GPIO->P1_10_MODE_REG + #define SYS_CHARGER_DBG_VBUS_SET_REG GPIO->P1_SET_DATA_REG + #define SYS_CHARGER_DBG_VBUS_RESET_REG GPIO->P1_RESET_DATA_REG + #define SYS_CHARGER_DBG_VBUS_PIN (1 << 10) + + #define SYS_CHARGER_DBG_CH_EVT_MODE_REG GPIO->P1_11_MODE_REG + #define SYS_CHARGER_DBG_CH_EVT_SET_REG GPIO->P1_SET_DATA_REG + #define SYS_CHARGER_DBG_CH_EVT_RESET_REG GPIO->P1_RESET_DATA_REG + #define SYS_CHARGER_DBG_CH_EVT_PIN (1 << 11) + + #define SYS_CHARGER_DBG_PRE_CH_MODE_REG GPIO->P1_12_MODE_REG + #define SYS_CHARGER_DBG_PRE_CH_SET_REG GPIO->P1_SET_DATA_REG + #define SYS_CHARGER_DBG_PRE_CH_RESET_REG GPIO->P1_RESET_DATA_REG + #define SYS_CHARGER_DBG_PRE_CH_PIN (1 << 12) + + #define SYS_CHARGER_DBG_CH_MODE_REG GPIO->P1_13_MODE_REG + #define SYS_CHARGER_DBG_CH_SET_REG GPIO->P1_SET_DATA_REG + #define SYS_CHARGER_DBG_CH_RESET_REG GPIO->P1_RESET_DATA_REG + #define SYS_CHARGER_DBG_CH_PIN (1 << 13) + + #define SYS_CHARGER_DBG_EOC_MODE_REG GPIO->P1_14_MODE_REG + #define SYS_CHARGER_DBG_EOC_SET_REG GPIO->P1_SET_DATA_REG + #define SYS_CHARGER_DBG_EOC_RESET_REG GPIO->P1_RESET_DATA_REG + #define SYS_CHARGER_DBG_EOC_PIN (1 << 14) + + #define SYS_CHARGER_DBG_ENUM_DONE_MODE_REG GPIO->P1_15_MODE_REG + #define SYS_CHARGER_DBG_ENUM_DONE_SET_REG GPIO->P1_SET_DATA_REG + #define SYS_CHARGER_DBG_ENUM_DONE_RESET_REG GPIO->P1_RESET_DATA_REG + #define SYS_CHARGER_DBG_ENUM_DONE_PIN (1 << 15) + + #define SYS_CHARGER_DBG_SUS_MODE_REG GPIO->P1_16_MODE_REG + #define SYS_CHARGER_DBG_SUS_SET_REG GPIO->P1_SET_DATA_REG + #define SYS_CHARGER_DBG_SUS_RESET_REG GPIO->P1_RESET_DATA_REG + #define SYS_CHARGER_DBG_SUS_PIN (1 << 16) + + #endif /* SYS_CHARGER_TIMING_DEBUG */ +#endif /* DEVICE_FAMILY */ + +#if (CMN_TIMING_DEBUG == 0) + +// Common: Inside critical section (initial configuration: low) + #define CMNDBG_CRITICAL_SECTION_MODE_REG *(volatile int *) 0x20000000 + #define CMNDBG_CRITICAL_SECTION_SET_REG *(volatile int *) 0x20000000 + #define CMNDBG_CRITICAL_SECTION_RESET_REG *(volatile int *) 0x20000000 + #define CMNDBG_CRITICAL_SECTION_PIN (0) + +#else + + #if (DEVICE_FAMILY == DA1468X) + +// Common: Inside critical section (P4[0]) + #define CMNDBG_CRITICAL_SECTION_MODE_REG GPIO->P40_MODE_REG + #define CMNDBG_CRITICAL_SECTION_SET_REG GPIO->P4_SET_DATA_REG + #define CMNDBG_CRITICAL_SECTION_RESET_REG GPIO->P4_RESET_DATA_REG + #define CMNDBG_CRITICAL_SECTION_PIN (1 << 0) + + #elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + +// Common: Inside critical section + #define CMNDBG_CRITICAL_SECTION_MODE_REG GPIO->P0_24_MODE_REG + #define CMNDBG_CRITICAL_SECTION_SET_REG GPIO->P0_SET_DATA_REG + #define CMNDBG_CRITICAL_SECTION_RESET_REG GPIO->P0_RESET_DATA_REG + #define CMNDBG_CRITICAL_SECTION_PIN (1 << 24) + + #endif /* DEVICE_FAMILY */ + +#endif /* CMN_TIMING_DEBUG */ + +/* Flash debug configuration + * + */ +#if (FLASH_DEBUG == 0) + +// Write page (initial configuration: low) + #define FLASHDBG_PAGE_PROG_MODE_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_SET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_RESET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_PIN (0) + +// Program page wait loop (initial configuration: low) + #define FLASHDBG_PAGE_PROG_WL_MODE_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_WL_SET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_WL_RESET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_WL_PIN (0) + +// Program page wait loop - pending irq check (initial configuration: low) + #define FLASHDBG_PAGE_PROG_WL_IRQ_MODE_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_WL_IRQ_SET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_WL_IRQ_RESET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_PAGE_PROG_WL_IRQ_PIN (0) + +// Suspend op (initial configuration: low) + #define FLASHDBG_SUSPEND_MODE_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SUSPEND_SET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SUSPEND_RESET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SUSPEND_PIN (0) + +// Erase sector cmd (initial configuration: low) + #define FLASHDBG_SECTOR_ERASE_MODE_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SECTOR_ERASE_SET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SECTOR_ERASE_RESET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SECTOR_ERASE_PIN (0) + +// Notify task (initial configuration: low) + #define FLASHDBG_TASK_NOTIFY_MODE_REG *(volatile int *) 0x20000000 + #define FLASHDBG_TASK_NOTIFY_SET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_TASK_NOTIFY_RESET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_TASK_NOTIFY_PIN (0) + +// Suspend action (low level) (initial configuration: low) + #define FLASHDBG_SUSPEND_ACTION_MODE_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SUSPEND_ACTION_SET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SUSPEND_ACTION_RESET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_SUSPEND_ACTION_PIN (0) + +// Resume op (initial configuration: low) + #define FLASHDBG_RESUME_MODE_REG *(volatile int *) 0x20000000 + #define FLASHDBG_RESUME_SET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_RESUME_RESET_REG *(volatile int *) 0x20000000 + #define FLASHDBG_RESUME_PIN (0) + +#else + + #if (DEVICE_FAMILY == DA1468X) + +// Write page (initial configuration: low) + #define FLASHDBG_PAGE_PROG_MODE_REG GPIO->P30_MODE_REG + #define FLASHDBG_PAGE_PROG_SET_REG GPIO->P3_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_RESET_REG GPIO->P3_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_PIN (1 << 0) + +// Program page wait loop (initial configuration: low) + #define FLASHDBG_PAGE_PROG_WL_MODE_REG GPIO->P31_MODE_REG + #define FLASHDBG_PAGE_PROG_WL_SET_REG GPIO->P3_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_RESET_REG GPIO->P3_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_PIN (1 << 1) + +// Program page wait loop - pending irq check (initial configuration: low) + #define FLASHDBG_PAGE_PROG_WL_IRQ_MODE_REG GPIO->P32_MODE_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_SET_REG GPIO->P3_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_RESET_REG GPIO->P3_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_PIN (1 << 2) + +// Suspend op (initial configuration: low) + #define FLASHDBG_SUSPEND_MODE_REG GPIO->P33_MODE_REG + #define FLASHDBG_SUSPEND_SET_REG GPIO->P3_SET_DATA_REG + #define FLASHDBG_SUSPEND_RESET_REG GPIO->P3_RESET_DATA_REG + #define FLASHDBG_SUSPEND_PIN (1 << 3) + +// Erase sector cmd (initial configuration: low) + #define FLASHDBG_SECTOR_ERASE_MODE_REG GPIO->P34_MODE_REG + #define FLASHDBG_SECTOR_ERASE_SET_REG GPIO->P3_SET_DATA_REG + #define FLASHDBG_SECTOR_ERASE_RESET_REG GPIO->P3_RESET_DATA_REG + #define FLASHDBG_SECTOR_ERASE_PIN (1 << 4) + +// Notify task (initial configuration: low) + #define FLASHDBG_TASK_NOTIFY_MODE_REG GPIO->P35_MODE_REG + #define FLASHDBG_TASK_NOTIFY_SET_REG GPIO->P3_SET_DATA_REG + #define FLASHDBG_TASK_NOTIFY_RESET_REG GPIO->P3_RESET_DATA_REG + #define FLASHDBG_TASK_NOTIFY_PIN (1 << 5) + +// Suspend action (low level) (initial configuration: low) + #define FLASHDBG_SUSPEND_ACTION_MODE_REG GPIO->P36_MODE_REG + #define FLASHDBG_SUSPEND_ACTION_SET_REG GPIO->P3_SET_DATA_REG + #define FLASHDBG_SUSPEND_ACTION_RESET_REG GPIO->P3_RESET_DATA_REG + #define FLASHDBG_SUSPEND_ACTION_PIN (1 << 6) + +// Resume op (initial configuration: low) + #define FLASHDBG_RESUME_MODE_REG GPIO->P37_MODE_REG + #define FLASHDBG_RESUME_SET_REG GPIO->P3_SET_DATA_REG + #define FLASHDBG_RESUME_RESET_REG GPIO->P3_RESET_DATA_REG + #define FLASHDBG_RESUME_PIN (1 << 7) + + #elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + + #if DEVICE_FPGA + + #if (PWR_MGR_FUNCTIONAL_DEBUG == 1) || (PWR_MGR_USE_TIMING_DEBUG == 1) || (CLK_MGR_USE_TIMING_DEBUG == 1) + #error "Flash debug pins are also used by clock manager and power manager" + #endif + +// Write page (initial configuration: low) + #define FLASHDBG_PAGE_PROG_MODE_REG GPIO->P0_18_MODE_REG + #define FLASHDBG_PAGE_PROG_SET_REG GPIO->P0_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_RESET_REG GPIO->P0_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_PIN (1 << 18) + +// Program page wait loop (initial configuration: low) + #define FLASHDBG_PAGE_PROG_WL_MODE_REG GPIO->P0_19_MODE_REG + #define FLASHDBG_PAGE_PROG_WL_SET_REG GPIO->P0_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_RESET_REG GPIO->P0_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_PIN (1 << 19) + +// Program page wait loop - pending irq check (initial configuration: low) + #define FLASHDBG_PAGE_PROG_WL_IRQ_MODE_REG GPIO->P0_20_MODE_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_SET_REG GPIO->P0_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_RESET_REG GPIO->P0_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_PIN (1 << 20) + +// Suspend op (initial configuration: low) + #define FLASHDBG_SUSPEND_MODE_REG GPIO->P0_21_MODE_REG + #define FLASHDBG_SUSPEND_SET_REG GPIO->P0_SET_DATA_REG + #define FLASHDBG_SUSPEND_RESET_REG GPIO->P0_RESET_DATA_REG + #define FLASHDBG_SUSPEND_PIN (1 << 21) + +// Erase sector cmd (initial configuration: low) + #define FLASHDBG_SECTOR_ERASE_MODE_REG GPIO->P0_26_MODE_REG + #define FLASHDBG_SECTOR_ERASE_SET_REG GPIO->P0_SET_DATA_REG + #define FLASHDBG_SECTOR_ERASE_RESET_REG GPIO->P0_RESET_DATA_REG + #define FLASHDBG_SECTOR_ERASE_PIN (1 << 26) + +// Notify task (initial configuration: low) + #define FLASHDBG_TASK_NOTIFY_MODE_REG GPIO->P0_27_MODE_REG + #define FLASHDBG_TASK_NOTIFY_SET_REG GPIO->P0_SET_DATA_REG + #define FLASHDBG_TASK_NOTIFY_RESET_REG GPIO->P0_RESET_DATA_REG + #define FLASHDBG_TASK_NOTIFY_PIN (1 << 27) + +// Suspend action (low level) (initial configuration: low) + #define FLASHDBG_SUSPEND_ACTION_MODE_REG GPIO->P0_28_MODE_REG + #define FLASHDBG_SUSPEND_ACTION_SET_REG GPIO->P0_SET_DATA_REG + #define FLASHDBG_SUSPEND_ACTION_RESET_REG GPIO->P0_RESET_DATA_REG + #define FLASHDBG_SUSPEND_ACTION_PIN (1 << 28) + +// Resume op (initial configuration: low) + #define FLASHDBG_RESUME_MODE_REG GPIO->P0_29_MODE_REG + #define FLASHDBG_RESUME_SET_REG GPIO->P0_SET_DATA_REG + #define FLASHDBG_RESUME_RESET_REG GPIO->P0_RESET_DATA_REG + #define FLASHDBG_RESUME_PIN (1 << 29) + + #else + +// Write page (initial configuration: low) + #define FLASHDBG_PAGE_PROG_MODE_REG GPIO->P1_01_MODE_REG + #define FLASHDBG_PAGE_PROG_SET_REG GPIO->P1_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_RESET_REG GPIO->P1_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_PIN (1 << 1) + +// Program page wait loop (initial configuration: low) + #define FLASHDBG_PAGE_PROG_WL_MODE_REG GPIO->P1_02_MODE_REG + #define FLASHDBG_PAGE_PROG_WL_SET_REG GPIO->P1_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_RESET_REG GPIO->P1_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_PIN (1 << 2) + +// Program page wait loop - pending irq check (initial configuration: low) + #define FLASHDBG_PAGE_PROG_WL_IRQ_MODE_REG GPIO->P1_03_MODE_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_SET_REG GPIO->P1_SET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_RESET_REG GPIO->P1_RESET_DATA_REG + #define FLASHDBG_PAGE_PROG_WL_IRQ_PIN (1 << 3) + +// Suspend op (initial configuration: low) + #define FLASHDBG_SUSPEND_MODE_REG GPIO->P1_04_MODE_REG + #define FLASHDBG_SUSPEND_SET_REG GPIO->P1_SET_DATA_REG + #define FLASHDBG_SUSPEND_RESET_REG GPIO->P1_RESET_DATA_REG + #define FLASHDBG_SUSPEND_PIN (1 << 4) + +// Erase sector cmd (initial configuration: low) + #define FLASHDBG_SECTOR_ERASE_MODE_REG GPIO->P1_05_MODE_REG + #define FLASHDBG_SECTOR_ERASE_SET_REG GPIO->P1_SET_DATA_REG + #define FLASHDBG_SECTOR_ERASE_RESET_REG GPIO->P1_RESET_DATA_REG + #define FLASHDBG_SECTOR_ERASE_PIN (1 << 5) + +// Notify task (initial configuration: low) + #define FLASHDBG_TASK_NOTIFY_MODE_REG GPIO->P1_06_MODE_REG + #define FLASHDBG_TASK_NOTIFY_SET_REG GPIO->P1_SET_DATA_REG + #define FLASHDBG_TASK_NOTIFY_RESET_REG GPIO->P1_RESET_DATA_REG + #define FLASHDBG_TASK_NOTIFY_PIN (1 << 6) + +// Suspend action (low level) (initial configuration: low) + #define FLASHDBG_SUSPEND_ACTION_MODE_REG GPIO->P1_07_MODE_REG + #define FLASHDBG_SUSPEND_ACTION_SET_REG GPIO->P1_SET_DATA_REG + #define FLASHDBG_SUSPEND_ACTION_RESET_REG GPIO->P1_RESET_DATA_REG + #define FLASHDBG_SUSPEND_ACTION_PIN (1 << 7) + +// Resume op (initial configuration: low) + #define FLASHDBG_RESUME_MODE_REG GPIO->P1_08_MODE_REG + #define FLASHDBG_RESUME_SET_REG GPIO->P1_SET_DATA_REG + #define FLASHDBG_RESUME_RESET_REG GPIO->P1_RESET_DATA_REG + #define FLASHDBG_RESUME_PIN (1 << 8) + + #endif /* DEVICE_FPGA */ + + #endif /* DEVICE_FAMILY */ + +#endif /* FLASH_DEBUG */ + +#endif /* BSP_DEBUG_H_ */ + +/** + \} + \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_defaults.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_defaults.h new file mode 100644 index 000000000000..e00f97b8176c --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_defaults.h @@ -0,0 +1,662 @@ +/** + * \addtogroup PLA_BSP_CONFIG + * \{ + * \addtogroup BSP_CONFIG_DEFAULTS BSP Default Configuration Values + * + * \brief Board support package default configuration values + * \{ + */ + +/** + **************************************************************************************** + * + * @file bsp_defaults.h + * + * @brief Board Support Package. System configuration default values. + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_DEFAULTS_H_ +#define BSP_DEFAULTS_H_ + +#include "../bsp_feature.h" + +/* ---------------------------------------------------------------------------------------------- */ + +#if DEVICE_FPGA + +/* Use FPGA-specific definitions first! */ + #include "bsp_defaults_fpga.h" +#endif + +/* ----------------------------------- Deprecated Configuration --------------------------------- */ + +/* Deprecated configuration options must not be defined by the application. */ + +#define DG_CONFIG_DEPRECATED_MSG " must not be defined by the application. This option is NO LONGER SUPPORTED" +#define DG_CONFIG_NOT_APPLICABLE_MSG " must not be defined by the application. It is NOT APPLICABLE" + +#ifdef dg_configPOWER_CONFIG + #error "dg_configPOWER_CONFIG must not be defined by the application. This option is NO LONGER SUPPORTED." \ + " There's a single power configuration setup." +#endif + +#ifdef dg_configFORCE_DEEP_SLEEP + #error "dg_configFORCE_DEEP_SLEEP must not be defined by the application. This option is NO LONGER SUPPORTED." \ + " Forcing the system to enter into clockless sleep during deep sleep is no longer supported." +#endif + +#ifdef dg_configMEM_RETENTION_MODE_PRESERVE_IMAGE + #error \ + "dg_configMEM_RETENTION_MODE_PRESERVE_IMAGE must not be defined by the application. This option is NO LONGER SUPPORTED." +#endif + +#ifdef dg_configUSE_ADC + #error "dg_configUSE_ADC must not be defined by the application. This option is NO LONGER SUPPORTED." \ + " Specify the ADC block you wish to configure (i.e. dg_configUSE_HW_GPADC)." +#endif + +#ifdef dg_configCONFIG_HEADER_IN_FLASH + #error "dg_configCONFIG_HEADER_IN_FLASH must not be defined by the application. This option is NO LONGER SUPPORTED." \ + " The values of the trim registers are not anymore taken from the Flash." +#endif + +#ifdef dg_configPOWER_EXT_1V8_PERIPHERALS + #error "dg_configPOWER_EXT_1V8_PERIPHERALS must not be defined by the application. This option is NO LONGER SUPPORTED." \ + " Use dg_configPOWER_1V8P instead!" +#endif + +#ifdef dg_configUSE_HW_TEMPSENS + #error "dg_configUSE_HW_TEMPSENS must not be defined by the application. This option is NO LONGER SUPPORTED." \ + " Use dg_configUSE_HW_GPADC and HW_GPADC_INPUT_SE_TEMPSENS instead!" +#endif + +#ifdef dg_configINITIAL_SLEEP_DELAY_TIME + #pragma message "dg_configINITIAL_SLEEP_DELAY_TIME" DG_CONFIG_DEPRECATED_MSG ". At startup, the system will stay " \ + "active for at least dg_configXTAL32K_SETTLE_TIME before it is allowed to go to sleep." +#endif + +#ifdef dg_configPOWER_FLASH + #pragma message "dg_configPOWER_FLASH" DG_CONFIG_DEPRECATED_MSG + #undef dg_configPOWER_FLASH +#endif + +/* --------------------------------- Clock settings -------------------------------------------- */ + +/** + * \addtogroup CLOCK_SETTINGS Clock Settings (Low Power, XTAL etc.) + * + * \brief Settings for the different clock-types of the chip + * \{ + */ + +/** + * \brief Source of Low Power clock used (LP_CLK_IS_ANALOG, LP_CLK_IS_DIGITAL) + */ +#ifndef dg_configLP_CLK_SOURCE + #define dg_configLP_CLK_SOURCE LP_CLK_IS_ANALOG +#endif + +#if ((dg_configLP_CLK_SOURCE == LP_CLK_IS_DIGITAL) && (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX)) + #error "When the LP source is digital (External), the option BSP_CLOCKS_SOURCE_LP_CLK_RCX is invalid!" +#endif + +/** + * \brief External LP type + * + * - 0: a crystal is connected to XTAL32Kp and XTALK32Km + * - 1: a digital clock is provided. + * + * \note the frequency of the digital clock must be 32KHz or 32.768KHz and be always running. + */ +#ifndef dg_configEXT_LP_IS_DIGITAL + #define dg_configEXT_LP_IS_DIGITAL (0) +#endif + +/** + * \brief Minimum sleep time + * + * No power savings if we enter sleep when the sleep time is less than N LP cycles. + * + * \note It should be ~3msec but this may vary. + */ +#ifndef dg_configMIN_SLEEP_TIME + #if (DEVICE_FAMILY == DA1640X) + + #ifndef BSP_DEVICE_REVISION + #error "BSP_DEVICE_REVISION is not defined" + #endif + #ifndef DEVICE_REV_A + #error "DEVICE_REV_A is not defined" + #endif + #ifndef DEVICE_REV_B + #error "DEVICE_REV_B is not defined" + #endif + + #if BSP_DEVICE_REVISION == DEVICE_REV_B + #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_FLASH) + #define MIN_SCALE_MS (6) /* BA min 6 msec */ + #else + #define MIN_SCALE_MS (4) /* BA min 4 msec */ + #endif + #else // BSP_DEVICE_REVISION == DEVICE_REV_B + #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_FLASH) + #define MIN_SCALE_MS (7) /* AA min 7 msec */ + #else + #define MIN_SCALE_MS (6) /* AA min 6 msec */ + #endif + #endif // (DEVICE_VERSION == DEVICE_VER_B) + + #if ((BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) || \ + (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_XTAL32K)) + #define dg_configMIN_SLEEP_TIME (33 * MIN_SCALE_MS) + #elif (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) + #define dg_configMIN_SLEEP_TIME cm_rcx_us_2_lpcycles_low_acc((1000 * MIN_SCALE_MS)) + #else /* LP_CLK_ANY */ +/* Must be defined in the custom_config_<>.h file. It should be ~3msec but this may vary. */ + #endif + #else // (DEVICE_FAMILY != DA1640X) + #if ((BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) || \ + (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_XTAL32K)) + #define dg_configMIN_SLEEP_TIME (33 * 3) /* 3 msec */ + #elif (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) + #define dg_configMIN_SLEEP_TIME cm_rcx_us_2_lpcycles_low_acc(3000) /* 3 msec */ + #else /* LP_CLK_ANY */ +/* Must be defined in the custom_config_<>.h file. It should be ~3msec but this may vary. */ + #endif + #endif // (DEVICE_FAMILY == DA1640X) +#endif + +/** + * \} + */ + +/* ----------------------------------- Image Configuration -------------------------------------- */ + +/** + * \addtogroup IMAGE_CONFIGURATION_SETTINGS Image configuration settings + * + * \brief Image configuration settings + * + * \{ + */ + +/** + * \brief The motherboard revision we compile for. + */ +#ifndef dg_configBLACK_ORCA_MB_REV + #define dg_configBLACK_ORCA_MB_REV BLACK_ORCA_MB_REV_D +#endif + +/** + * \brief Controls how the image is built. + * + * - DEVELOPMENT_MODE: various debugging options are included. + * - PRODUCTION_MODE: all code used for debugging is removed. + */ +#ifndef dg_configIMAGE_SETUP + #define dg_configIMAGE_SETUP DEVELOPMENT_MODE +#endif + +/** + * \brief When set to 1, the delay at the start of execution of the Reset_Handler is skipped. + * + * \details This delay is added in order to facilitate proper programming of the Flash or QSPI\n + * launcher invocation. Without it, there is no guarantee that the execution of the image\n + * will not proceed, altering the default configuration of the system from the one that the\n + * bootloader leaves it. + */ +#ifndef dg_configSKIP_MAGIC_CHECK_AT_START + #define dg_configSKIP_MAGIC_CHECK_AT_START (0) +#endif + +/** + * \brief When set to 1, the QSPI copy will be emulated when in DEVELOPMENT_MODE (Not Applicable!). + */ +#ifndef dg_configEMULATE_QSPI_COPY + #define dg_configEMULATE_QSPI_COPY (0) +#endif + +/** + * \} + */ + +/* ----------------------------------- System Configuration ------------------------------------- */ + +/** + * \addtogroup SYSTEM_CONFIGURATION_SETTINGS System configuration settings + * + * \brief Generic System Configuration Settings + * + * \{ + */ + +/** + * \brief Image copy time + * + * The number of LP cycles needed for the application's image data to be copied from the OTP + * (or QSPI) to the RAM in mirrored mode. + * + * \warning MUST BE SMALLER THAN dg_configMIN_SLEEP_TIME !!! + */ +#if (dg_configEXEC_MODE != MODE_IS_MIRRORED) + #undef dg_configIMAGE_COPY_TIME + #define dg_configIMAGE_COPY_TIME (0) +#elif !defined(dg_configIMAGE_COPY_TIME) + #if ((BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) || \ + (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_XTAL32K)) + #define dg_configIMAGE_COPY_TIME (64) + #elif (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) + #define dg_configIMAGE_COPY_TIME cm_rcx_us_2_lpcycles(1950) + #endif +#endif + +/** + * \brief Brown-out Detection + * + * - 1: used + * - 0: not used + */ +#ifndef dg_configUSE_BOD + #define dg_configUSE_BOD (0) +#endif + +/** + * \brief Reset value for Watchdog. + * + * See WATCHDOG_REG:WDOG_VAL field. + */ +#ifndef dg_configWDOG_RESET_VALUE + #define dg_configWDOG_RESET_VALUE (0xFF) +#endif + +/** + * \brief Watchdog notify interval + * + * Interval (in milliseconds) for common timer which can be used to trigger tasks in order to notify + * watchdog. Can be set to 0 in order to disable timer code entirely. + */ +#ifndef dg_configWDOG_NOTIFY_TRIGGER_TMO + #define dg_configWDOG_NOTIFY_TRIGGER_TMO (0) +#endif + +/** + * \brief Abort a clock modification if it will cause an error to the SysTick counter + * + * - 1: on + * - 0: off + */ +#ifndef dg_configABORT_IF_SYSTICK_CLK_ERR + #define dg_configABORT_IF_SYSTICK_CLK_ERR (0) +#endif + +/** + * \brief Maximum adapters count + * + * Should be equal to the number of Adapters used by the Application. It can be larger (up to 254) + * than needed, at the expense of increased Retention Memory requirements. It cannot be 0. + */ +#ifndef dg_configPM_MAX_ADAPTERS_CNT + #define dg_configPM_MAX_ADAPTERS_CNT (16) +#endif + +/** + * \brief Maximum sleep defer time + * + * The maximum time sleep can be deferred via a call to pm_defer_sleep_for(). It is in clock cycles + * in the case of the XTAL32K and in usec in the case of RCX. + * \note It should be > 3.5msec. + */ +#ifndef dg_configPM_MAX_ADAPTER_DEFER_TIME + #if ((BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) || \ + (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_XTAL32K)) + #define dg_configPM_MAX_ADAPTER_DEFER_TIME (128) + #elif (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) + #define dg_configPM_MAX_ADAPTER_DEFER_TIME cm_rcx_us_2_lpcycles(4000) + #else /* LP_CLK_ANY */ +/* Must be defined in the custom_config_<>.h file. It should be > 3.5msec. */ + #endif +#endif + +/** + * \brief Apply ADC Gain Error correction. + * + * - 1: used + * - 0: not used + * + * The default setting is: 1. + */ +#ifndef dg_configUSE_ADC_GAIN_ERROR_CORRECTION + #define dg_configUSE_ADC_GAIN_ERROR_CORRECTION (1) +#endif + +/** + * \brief Image copy time + * + * The number of LP cycles needed for the application's image data to be copied from the OTP + * (or QSPI) to the RAM in mirrored mode. + * + * \warning MUST BE SMALLER THAN dg_configMIN_SLEEP_TIME !!! + */ +#if (dg_configEXEC_MODE != MODE_IS_MIRRORED) + #undef dg_configIMAGE_COPY_TIME + #define dg_configIMAGE_COPY_TIME (0) +#elif !defined(dg_configIMAGE_COPY_TIME) + #if ((BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) || \ + (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_XTAL32K)) + #define dg_configIMAGE_COPY_TIME (64) + #elif (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_LP_CLK_RCX) + #define dg_configIMAGE_COPY_TIME cm_rcx_us_2_lpcycles(1950) + #else /* LP_CLK_ANY */ +/* Must be defined in the custom_config_<>.h file. */ + #endif +#endif + +/** + * \brief When set to 1, the system will go to sleep and never exit allowing for the sleep current to be + * measured. + */ +#ifndef dg_configTESTMODE_MEASURE_SLEEP_CURRENT + #define dg_configTESTMODE_MEASURE_SLEEP_CURRENT (0) +#endif + +/** + * \} + */ + +/* ----------------------------------- USB Configuration ---------------------------------------- */ + +/** + * \addtogroup USB_SETTINGS USB configuration settings + * + * \brief USB configuration settings + * + * \{ + */ + +/** + * \brief Controls how the system will behave when the USB i/f is suspended. + * + * \details When the USB Node is suspended by the USB Host, the application may have to act in + * order to comply with the USB specification (consume less than 2.5mA). The available + * options are: + * 0: do nothing + * 1: pause system clock => the LP clock is stopped and only VBUS and USB irqs are handled + * 2: pause application => The system is not paused but the application must stop all + * timers and make sure all tasks are blocked. + * + * Both in modes 1 and 2, the application must make sure that all external peripherals are + * either powered off or placed in the lowest power consumption mode. + */ +#ifndef dg_configUSB_SUSPEND_MODE + #define dg_configUSB_SUSPEND_MODE USB_SUSPEND_MODE_NONE +#endif + +/** + * \brief Enable the DMA for reading/writing data to USB EP.\n + * By default the USB DMA is not enabled.\n + * To enable the DMA for the USB, set this the macro to value (1) in the custom_config_xxx.h file.\n + * When the USB DMA is enabled, the default end points with DMA are EP1 and EP2. \n + * It is possible only one TX and one RX end point to use DMA.\n + * User can choose a different pair of end points to use the DMA as needed according to app requirements.\n + * To change the end points using DMA, set in the the custom_config_xxx.h file the desired values for the macros: + * \par \c dg_configUSB_TX_DMA_EP + * valid values: 1,3,5\n + * default value: 1 + * \par \c dg_configUSB_RX_DMA_EP + * valid values: 2,4,6\n + * default value: 2 + */ +#ifndef dg_configUSB_DMA_SUPPORT + #define dg_configUSB_DMA_SUPPORT (0) +#endif + +/** + * \brief The USB TX end point (D-->H) to enable the DMA.\n + * User can choose a different pair of end points to use the DMA as needed according to app requirements.\n + * To change the TX end point using DMA, set in the the custom_config_xxx.h file the desired value for this macros. + * \par \c dg_configUSB_TX_DMA_EP + * valid values: 1,3,5\n + * default value: 1 + */ +#ifndef dg_configUSB_TX_DMA_EP + #define dg_configUSB_TX_DMA_EP (1) +#endif + +/** + * \brief The USB RX end point (D-->H) to enable the DMA.\n + * User can choose a different pair of end points to use the DMA as needed according to app requirements.\n + * To change the RX end point using DMA, set in the the custom_config_xxx.h file the desired value for this macros. + * \par \c dg_configUSB_RX_DMA_EP + * valid values: 2,4,6\n + * default value: 2 + */ +#ifndef dg_configUSB_RX_DMA_EP + #define dg_configUSB_RX_DMA_EP (2) +#endif + +/** + * \} + */ + +/* ----------------------------------- Flash Configuration -------------------------------------- */ + +/** + * \addtogroup FLASH_SETTINGS Flash configuration settings + * + * \brief Flash configuration settings + * + * \{ + */ + +/* Backward compatibility check */ + +#if defined(dg_configPOWER_FLASH) || defined(dg_configFLASH_POWER_OFF) + #define PRINT_POWER_RAIL_SETUP +#endif + +/** + * \brief Enable the Flash Auto-detection mode for QSPIC + * + * \warning THIS WILL GREATLY INCREASE THE CODE SIZE AND RETRAM USAGE!!! MAKE SURE YOUR PROJECT + * CAN SUPPORT THIS. + */ +#ifndef dg_configFLASH_AUTODETECT + #define dg_configFLASH_AUTODETECT (0) +#endif + +/** + * \brief Offset of the image if not placed at the beginning of QSPI Flash. + */ +#ifndef dg_configIMAGE_FLASH_OFFSET + #define dg_configIMAGE_FLASH_OFFSET (0) +#endif + +/** + * \brief Set the flash page size. + */ +#ifndef dg_configFLASH_MAX_WRITE_SIZE + #define dg_configFLASH_MAX_WRITE_SIZE (128) +#endif + +/** + * \brief Disable background operations. + * + * When enabled, outstanding QSPI operations will take place during sleep time + * increasing the efficiency. + * + * - 1 : Disabled + * - 0 : Enabled + */ +#ifndef dg_configDISABLE_BACKGROUND_FLASH_OPS + #define dg_configDISABLE_BACKGROUND_FLASH_OPS (1) +#endif + +/** + * \} + */ + +/* ----------------------------------- Cache Configuration -------------------------------------- */ + +/** + * \addtogroup CACHE_SETTINGS Cache configuration settings + * + * \brief Cache configuration settings + * + * \{ + */ + +/** + * \brief Set the size (in bytes) of the QSPI flash cacheable area. + * + * All reads from offset 0 up to (not including) offset dg_configCACHEABLE_QSPI_AREA_LEN + * will be cached. In addition, any writes to this area will trigger cache flushing, to + * avoid any cache incoherence. + * + * The size must be 64KB-aligned, due to the granularity of CACHE_CTRL2_REG[CACHE_LEN]. + * + * Special values: + * * 0 : Turn off cache. + * * -1 : Don't configure cacheable area size (i.e. leave as set by booter). + */ +#ifndef dg_configCACHEABLE_QSPI_AREA_LEN + #define dg_configCACHEABLE_QSPI_AREA_LEN (-1) +#endif + +/** + * \brief Set the associativity of the cache. + * + * Available values: + * 0 /// direct-mapped + * 1 /// 2-way set associative + * 2 /// 4-way set associative + * 3 /// leave as set by the ROM booter + */ +#ifndef dg_configCACHE_ASSOCIATIVITY + #define dg_configCACHE_ASSOCIATIVITY (2) +#endif + +/** + * \brief Set the line size of the cache. + * + * Available values: + * 0 /// 8 bytes + * 1 /// 16 bytes + * 2 /// 32 byte + * 3 /// leave as set by the ROM booter + */ +#ifndef dg_configCACHE_LINESZ + #define dg_configCACHE_LINESZ (0) +#endif + +/** + * \} + */ + +/* ----------------------------------- UART settings -------------------------------------------- */ + +/** + * \addtogroup UART_SETTINGS UART configuration settings + * + * \brief UART configuration settings + * + * \{ + */ + +/** + * \brief Circular DMA support for RX + */ +#ifndef dg_configUART_RX_CIRCULAR_DMA + #define dg_configUART_RX_CIRCULAR_DMA (0) +#endif + +/** + * \brief UART1's Circular DMA buffer size for RX + */ +#ifndef dg_configUART1_RX_CIRCULAR_DMA_BUF_SIZE + #define dg_configUART1_RX_CIRCULAR_DMA_BUF_SIZE (0) +#endif + +/** + * \brief UART2's Circular DMA buffer size for RX + */ +#ifndef dg_configUART2_RX_CIRCULAR_DMA_BUF_SIZE + #define dg_configUART2_RX_CIRCULAR_DMA_BUF_SIZE (0) +#endif + +/** + * \} + */ + +/* ----------------------------------- RF Configuration ----------------------------------------- */ + +/** + * \addtogroup RF_DRIVER_SETTINGS Radio Driver Settings + * + * \brief Doxygen documentation is not yet available for this module. + * Please check the source code file(s) + * \{ + */ + +/** + * \brief Set to 1 to enable the recalibration procedure. + */ +#if defined(CONFIG_USE_BLE) + #ifndef dg_configRF_ENABLE_RECALIBRATION + #define dg_configRF_ENABLE_RECALIBRATION (1) + #endif +#endif + +/** + * \} + */ + +/* ----------------------------------- DEVICE-SPECIFIC CONFIGURATION ---------------------------- */ + +#if (DEVICE_FAMILY == DA1640X) + + #include "bsp_defaults_ra6w1.h" + +#endif + +/* ----------------------------------- DEBUG CONFIGURATION ------------------ ------------------- */ + +#include "bsp_debug.h" + +/* ----------------------------------- MEMORY LAYOUT CONFIGURATION ------------------------------ */ + +#include "bsp_memory_defaults.h" + +/* XXX ------------------------------- UNDISCLOSED DEFINITIONS ---------------------------------- */ + +#include "bsp_undisclosed_defs.h" + +#endif /* BSP_DEFAULTS_H_ */ + +/** + \} + \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_defaults_ra6w1.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_defaults_ra6w1.h new file mode 100644 index 000000000000..4f93b310c518 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_defaults_ra6w1.h @@ -0,0 +1,904 @@ +/** + * \addtogroup PLA_BSP_CONFIG + * \{ + * \addtogroup BSP_CONFIG_DEFAULTS + * \{ + */ + +/** + **************************************************************************************** + * + * @file bsp_defaults_ra6w1.h + * + * @brief Board Support Package. Device-specific system configuration default values. + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_DEFAULTS_RA6W1_H_ +#define BSP_DEFAULTS_RA6W1_H_ + +#if (DEVICE_FAMILY == DA1640X) + +/* Deprecated configuration options must not be defined by the application. */ + + #define DG_CONFIG_NA_87X_MSG DG_CONFIG_NOT_APPLICABLE_MSG " for the DA1640x device family." + #define DG_CONFIG_NA_87X_FORCE_ZERO_MSG DG_CONFIG_NA_87X_MSG " Forcing to 0 (not used)." + #define DG_CONFIG_TIMER_NA_MSG DG_CONFIG_NA_87X_MSG " Use the generic dg_configUSE_HW_TIMER instead." + + #ifdef dg_configTim1Prescaler + #pragma message "dg_configTim1Prescaler" DG_CONFIG_NA_87X_MSG + #undef dg_configTim1Prescaler + #endif + + #ifdef dg_configTim1PrescalerBitRange + #pragma message "dg_configTim1PrescalerBitRange" DG_CONFIG_NA_87X_MSG + #undef dg_configTim1PrescalerBitRange + #endif + + #ifdef dg_configEXT_CRYSTAL_FREQ + #pragma message "dg_configEXT_CRYSTAL_FREQ" DG_CONFIG_NA_87X_MSG + #undef dg_configEXT_CRYSTAL_FREQ + #endif + + #ifdef dg_configUSER_CAN_USE_TIMER1 + #pragma message "dg_configUSER_CAN_USE_TIMER1" DG_CONFIG_NA_87X_MSG + #undef dg_configUSER_CAN_USE_TIMER1 + #endif + + #if (dg_configUSE_HW_RF != 0) + #pragma message "dg_configUSE_HW_RF" DG_CONFIG_NA_87X_FORCE_ZERO_MSG + #undef dg_configUSE_HW_RF + #define dg_configUSE_HW_RF 0 + #endif + + #if (dg_configUSE_HW_ECC != 0) + #pragma message "dg_configUSE_HW_ECC" DG_CONFIG_NA_87X_FORCE_ZERO_MSG + #undef dg_configUSE_HW_ECC + #define dg_configUSE_HW_ECC 0 + #endif + + #if (dg_configUSE_IF_PDM != 0) + #pragma message "dg_configUSE_IF_PDM" DG_CONFIG_NA_87X_FORCE_ZERO_MSG + #undef dg_configUSE_IF_PDM + #define dg_configUSE_IF_PDM 0 + #endif + + #if (dg_configUSE_HW_IRGEN != 0) + #pragma message "dg_configUSE_HW_TEMPSENS" DG_CONFIG_NA_87X_FORCE_ZERO_MSG + #undef dg_configUSE_HW_IRGEN + #define dg_configUSE_HW_IRGEN 0 + #endif + + #if (dg_configUSE_HW_SOC != 0) + #pragma message "dg_configUSE_HW_SOC" DG_CONFIG_NA_87X_FORCE_ZERO_MSG + #undef dg_configUSE_HW_SOC + #define dg_configUSE_HW_SOC 0 + #endif + + #if (dg_configUSE_HW_TIMER0 != 0) + #pragma message "dg_configUSE_HW_TIMERX" DG_CONFIG_TIMER_NA_MSG + #undef dg_configUSE_HW_TIMER0 + #define dg_configUSE_HW_TIMER0 0 + #endif + + #if (dg_configUSE_HW_TIMER1 != 0) + #pragma message "dg_configUSE_HW_TIMERX" DG_CONFIG_TIMER_NA_MSG + #undef dg_configUSE_HW_TIMER1 + #define dg_configUSE_HW_TIMER1 0 + #endif + + #if (dg_configUSE_HW_TIMER2 != 0) + #pragma message "dg_configUSE_HW_TIMERX" DG_CONFIG_TIMER_NA_MSG + #undef dg_configUSE_HW_TIMER2 + #define dg_configUSE_HW_TIMER2 0 + #endif + +/* ------------------------------- Peripherals -------------------------------------------------- */ + +/** + * \addtogroup PERIPHERALS_690 Peripherals for DA1487x + * + * \brief Peripheral Selection for the DA1487x Device Family + * + * When enabled the specific low level driver is included in the compilation of the SDK. + * - 0 : Disabled + * - 1 : Enabled + * + * The default option can be overridden in the application configuration file. + * + * \{ + * Driver | Setting | Default option + * ------------------------------ | -------------------------------------- | :------------------: + * AES HASH | dg_configUSE_HW_AES_HASH | 0 + * Cache Controller | dg_configUSE_HW_CACHE | 1 + * HW charger | dg_configUSE_HW_CHARGER | 0 + * Clock driver | dg_configUSE_HW_CLK | 1 + * Clock and Power Manager | dg_configUSE_HW_CPM | 1 + * Direct Memory Access | dg_configUSE_HW_DMA | 1 + * Haptic Controller / ERM | dg_configUSE_HW_ERM | 0 + * General Purpose A-D Converter | dg_configUSE_HW_GPADC | 1 + * General Purpose I/O | dg_configUSE_HW_GPIO | 1 + * Inter-Integrated Circuit | dg_configUSE_HW_I2C | 0 + * ISO7816 | dg_configUSE_HW_ISO7816 | 0 + * LCD controller | dg_configUSE_HW_LCDC | 0 + * Haptic Controller / LRA | dg_configUSE_HW_LRA | 0 + * Memory Protection Unit | dg_configUSE_HW_MPU | 0 + * OQSPI controller | dg_configUSE_HW_OQSPI | 1 + * OTP controller | dg_configUSE_HW_OTPC | 1 + * Domain Driver | dg_configUSE_HW_PD | 1 + * Power Domains Controller | dg_configUSE_HW_PDC | 1 + * Power Manager | dg_configUSE_HW_PMU | 1 + * QSPI controller | dg_configUSE_HW_QSPI | 0 + * Real Time Clock | dg_configUSE_HW_RTC | 1 + * Analog-Digital Converter | dg_configUSE_HW_SDADC | 1 + * Sensor Node Controller | dg_configUSE_HW_SENSOR_NODE | 0 + * Motor Controller | dg_configUSE_HW_SMOTOR | 0 + * Serial Peripheral Interface | dg_configUSE_HW_SPI | 0 + * System | dg_configUSE_HW_SYS | 1 + * Timer | dg_configUSE_HW_TIMER | 1 + * True Random Generator | dg_configUSE_HW_TRNG | 1 + * UART | dg_configUSE_HW_UART | 1 + * USB | dg_configUSE_HW_USB | 0 + * USB charger | dg_configUSE_HW_USB_CHARGER | 0 + * Wakeup timer | dg_configUSE_HW_WKUP | 1 + * PCM | dg_configUSE_HW_PCM | 0 + * PDM | dg_configUSE_HW_PDM | 0 + * APU SRC | dg_configUSE_HW_APU_SRC | 0 + */ + +/* -------------------------------- Peripherals (hw_*) selection -------------------------------- */ + + #ifndef dg_configUSE_HW_AES_HASH + #define dg_configUSE_HW_AES_HASH (0) + #endif + + #ifndef dg_configUSE_HW_CACHE + #define dg_configUSE_HW_CACHE (1) + #endif + + #ifndef dg_configUSE_HW_CHARGER + #define dg_configUSE_HW_CHARGER (0) + #endif + + #ifndef dg_configUSE_HW_CLK + #define dg_configUSE_HW_CLK (1) + #endif + + #ifndef dg_configUSE_HW_CPM + #define dg_configUSE_HW_CPM (0) + #endif + + #ifndef dg_configUSE_HW_DMA + #define dg_configUSE_HW_DMA (1) + #endif + + #ifndef dg_configUSE_HW_KDMA + #define dg_configUSE_HW_KDMA (0) + #endif + + #ifndef dg_configUSE_HW_ERM + #define dg_configUSE_HW_ERM (0) + #endif + + #ifndef dg_configUSE_HW_GPADC + #define dg_configUSE_HW_GPADC (0) + #endif + + #if 0 /* TODO : Check this needs */ +/* XXX workaround for bug2522A_155: PLL calibration does not work properly */ +/* XXX GPADC is used for PLL workaround in case there isn't trimmed value for PLL_SYS_CTRL3_REG */ + #if !DEVICE_FPGA + #if (dg_configUSE_HW_GPADC == 0) + #error "dg_configUSE_HW_GPADC should be 1 in order to properly trim the PLL clock" + #endif + #endif + #endif + + #ifndef dg_configUSE_HW_GPIO + #define dg_configUSE_HW_GPIO (1) + #endif + + #ifndef dg_configUSE_HW_I2C + #define dg_configUSE_HW_I2C (0) + #endif + + #ifndef dg_configUSE_HW_ISO7816 + #define dg_configUSE_HW_ISO7816 (0) + #endif + + #ifndef dg_configUSE_HW_LCDC + #define dg_configUSE_HW_LCDC (0) + #endif + + #ifndef dg_configUSE_HW_LRA + #define dg_configUSE_HW_LRA (0) + #endif + + #ifndef dg_configUSE_HW_MPU + #define dg_configUSE_HW_MPU (0) + #endif + + #ifndef dg_configUSE_HW_OQSPI + #define dg_configUSE_HW_OQSPI (1) + #endif + + #ifndef dg_configUSE_HW_OTPC + #define dg_configUSE_HW_OTPC (1) + #endif + + #ifndef dg_configUSE_HW_PD + #define dg_configUSE_HW_PD (0) + #endif + + #ifndef dg_configUSE_HW_PDC + #define dg_configUSE_HW_PDC (0) + #endif + + #ifndef dg_configUSE_HW_PMU + #define dg_configUSE_HW_PMU (0) + #endif + + #ifndef dg_configUSE_HW_QSPI + #define dg_configUSE_HW_QSPI (0) + #endif + + #ifndef dg_configUSE_HW_QSPI2 + #define dg_configUSE_HW_QSPI2 (0) + #elif (dg_configUSE_HW_QSPI2 == 1) + #error "DA1640X has no QSPI2" + #endif + + #ifndef dg_configUSE_HW_RTC + #define dg_configUSE_HW_RTC (1) + #endif + + #ifndef dg_configUSE_HW_SDADC + #define dg_configUSE_HW_SDADC (0) + #endif + + #ifndef dg_configUSE_HW_SENSOR_NODE + #define dg_configUSE_HW_SENSOR_NODE (0) + #endif + + #ifndef dg_configUSE_HW_SMOTOR + #define dg_configUSE_HW_SMOTOR (0) + #endif + + #ifndef dg_configUSE_HW_SPI + #define dg_configUSE_HW_SPI (0) + #endif + + #ifndef dg_configUSE_HW_SYS + #define dg_configUSE_HW_SYS (0) + #endif + + #ifndef dg_configUSE_HW_TIMER + #define dg_configUSE_HW_TIMER (1) + #endif + + #ifndef dg_configUSE_HW_TRNG + #define dg_configUSE_HW_TRNG (0) + #endif + + #ifndef dg_configUSE_HW_UART + #define dg_configUSE_HW_UART (1) + #endif + + #ifndef dg_configUSE_HW_USB + #define dg_configUSE_HW_USB (0) + #endif + + #ifndef dg_configUSE_HW_USB_CHARGER + #define dg_configUSE_HW_USB_CHARGER (0) + #endif + + #ifndef dg_configUSE_HW_WKUP + #define dg_configUSE_HW_WKUP (0) + #endif + + #ifndef dg_configUSE_HW_PCM + #define dg_configUSE_HW_PCM (0) + #endif + + #ifndef dg_configUSE_HW_PDM + #define dg_configUSE_HW_PDM (0) + #endif + + #ifndef dg_configUSE_HW_APU_SRC + #define dg_configUSE_HW_APU_SRC (0) + #endif + + #ifndef dg_configUSE_HW_SDEMMC + #define dg_configUSE_HW_SDEMMC (1) + #endif + + #ifndef dg_configUSE_HW_SDIO + #define dg_configUSE_HW_SDIO (1) + #endif + + #ifndef dg_configUSE_HW_PRNG + #define dg_configUSE_HW_PRNG (1) + #endif + +/** + * \} + */ + +/* ------------------------------- Clock Settings ----------------------------------------------- */ + +/** + * \addtogroup CLOCK_SETTINGS + * + * \{ + */ + + #if (BSP_CFG_LP_CLOCK_SOURCE != BSP_CLOCKS_SOURCE_CLOCK_RCX) && \ + (BSP_CFG_LP_CLOCK_SOURCE != BSP_CLOCKS_SOURCE_CLOCK_XTALK) + #error "BSP_CFG_LP_CLOCK_SOURCE has invalid setting" + #endif + + #ifndef dg_configXTAL40M_FREQ + #define dg_configXTAL40M_FREQ (40000000) + #endif + + #ifndef dg_configXTAL80M_FREQ + #define dg_configXTAL80M_FREQ (80000000) + #endif + + #ifndef dg_configDIVN_FREQ + #define dg_configDIVN_FREQ (40000000) + #endif + + #ifndef dg_configPLL480M_FREQ + #define dg_configPLL480M_FREQ (480000000) + #endif + + #ifndef dg_configPLL320M_FREQ + #define dg_configPLL320M_FREQ (320000000) + #endif + + #ifndef dg_configPLL192M_FREQ + #define dg_configPLL192M_FREQ (192000000) + #endif + + #ifndef dg_configPLL160M_FREQ + #define dg_configPLL160M_FREQ (160000000) + #endif + + #ifndef dg_configPLL137M_FREQ + #define dg_configPLL137M_FREQ (137142857) + #endif + + #ifndef dg_configPLL106M_FREQ + #define dg_configPLL106M_FREQ (106666666) + #endif + + #ifndef dg_configPLL80M_FREQ + #define dg_configPLL80M_FREQ (80000000) + #endif + + #ifndef dg_configPERI80M_FREQ + #define dg_configPERI80M_FREQ (80000000) + #endif + + #ifndef dg_configPERI40M_FREQ + #define dg_configPERI40M_FREQ (40000000) + #endif + + #ifndef dg_configPERIOCS32K_FREQ + #define dg_configPERIOCS32K_FREQ (32000) + #endif + + #ifndef dg_configPERICRY32K_FREQ + #define dg_configPERICRY32K_FREQ (32768) + #endif + +/** + * \brief Vaule of the RC32K oscilator frequency in Hz + */ + #ifndef dg_configRC32K_FREQ + #define dg_configRC32K_FREQ (32000) + #endif + + #ifndef dg_configXTAL32K_FREQ + #define dg_configXTAL32K_FREQ (32768) + #endif + + #ifndef dg_configXTAL40M_32K_FREQ + #define dg_configXTAL40M_32K_FREQ (32000) + #endif + +/** + * \brief Acceptable clock tick drift (in parts per million) for the Low-power clock + */ + #ifndef dg_configLP_CLK_DRIFT + #if BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_RCX + #define dg_configLP_CLK_DRIFT (500) // ppm + #else + #define dg_configLP_CLK_DRIFT (50) // ppm + #endif + #endif + +/** + * \brief Time needed for the settling of the LP clock, in msec. + */ + #ifndef dg_configXTAL32K_SETTLE_TIME + #if dg_configLP_CLK_SOURCE == LP_CLK_IS_ANALOG + #define dg_configXTAL32K_SETTLE_TIME (1300) + #else + #define dg_configXTAL32K_SETTLE_TIME (1000) + #endif + #endif + +/** + * \brief XTAL40M settle time + * + * Time needed for the settling of the XTAL40M, in usec. + * + * \note If set to zero, the settling time will be automatically adjusted. + */ + #ifndef dg_configXTAL40M_SETTLE_TIME_IN_USEC + #define dg_configXTAL40M_SETTLE_TIME_IN_USEC (0x0) + #endif + +/** + * \brief Enable XTAL40M upon system wake-up + * + * If set to 1 the PDC will enable XTAL40M when it wakes-up M33 + * + */ + #ifndef dg_configENABLE_XTAL40M_ON_WAKEUP + #define dg_configENABLE_XTAL40M_ON_WAKEUP (1) + #endif + +/** + * \brief The number of LP clock cycles required to check the voltage of an LDO during startup + */ + #ifndef dg_configVOLTAGE_CHECK_LP_CYCLES + #define dg_configVOLTAGE_CHECK_LP_CYCLES (5) + #endif + +/** + * \brief The number of LP clock cycles required for the HW FSM to detect the wake-up signal + */ + #ifndef dg_configHW_FSM_WAKEUP_CYCLES + #define dg_configHW_FSM_WAKEUP_CYCLES (3) + #endif + +/** + * \brief The number of LP clock cycles required for the system to start-up + */ + #ifndef dg_configSYSTEM_STARTUP_CYCLES + +// 4 @ SRAM Boot +// unstable 12, stable 16?/20 @ Cache Boot 1.8V, Fully discharged PWR +// unstable 33, stable 36?/40 @ Cache Boot 3.3V, Fully discharged PWR +// max 100 @ VSIM contidion + #define dg_configSYSTEM_STARTUP_CYCLES (100) + #endif + +/** + * \brief RC32 wake-up time in slow wake-up mode + * + * This is the maximum time, in LP cycles, needed to wake-up the chip and start executing code + * using RC32 in slow wake-up mode. + * + * \note Wake-up time calculation: + * dg_configHW_FSM_WAKEUP_CYCLES cycles for wake-up + * 1 additional cycle for slow wake-up + * 2 cycles for V30 (worst case Vclamp -> 3V) + * 1 cycle for BG + * dg_configVOLTAGE_CHECK_LP_CYCLES cycles for V12 and V14 + * dg_configVOLTAGE_CHECK_LP_CYCLES cycles for V18P + * dg_configVOLTAGE_CHECK_LP_CYCLES cycles for V18 + * dg_configSYSTEM_STARTUP_CYCLES cycles for system start-up + */ + #define dg_configWAKEUP_RC32_TIME_SLOW (dg_configHW_FSM_WAKEUP_CYCLES + 4 + \ + 3 * dg_configVOLTAGE_CHECK_LP_CYCLES + \ + dg_configSYSTEM_STARTUP_CYCLES) + +/** + * \brief RC32 wake-up time in fast wake-up mode + * + * This is the maximum time, in LP cycles, needed to wake-up the chip and start executing code + * using RC32 in fast wake-up mode. + * + * \note Wake-up time calculation: + * dg_configHW_FSM_WAKEUP_CYCLES cycles for wake-up + * dg_configVOLTAGE_CHECK_LP_CYCLES cycles for V12 (worst case 0.75V -> 0.9V) + * dg_configSYSTEM_STARTUP_CYCLES cycles for system start-up + */ + #define dg_configWAKEUP_RC32_TIME_FAST (dg_configHW_FSM_WAKEUP_CYCLES + \ + dg_configVOLTAGE_CHECK_LP_CYCLES + \ + dg_configSYSTEM_STARTUP_CYCLES) + +/** + * \brief RC32 wake-up time + * + * This is the maximum time, in LP cycles, needed to wake-up the chip and start executing code + * using RC32 in ultra-fast wake-up mode. + * + * \note Wake-up time calculation: + * dg_configHW_FSM_WAKEUP_CYCLES cycles for wake-up + * dg_configSYSTEM_STARTUP_CYCLES cycles for system start-up + */ + #define dg_configWAKEUP_RC32_TIME_ULTRA_FAST (dg_configHW_FSM_WAKEUP_CYCLES + \ + dg_configSYSTEM_STARTUP_CYCLES) + +/** + * \brief XTAL32M trimming default settings + */ + #ifndef dg_configDEFAULT_CLK_FREQ_TRIM_REG__XTAL32M_TRIM__VALUE + #define dg_configDEFAULT_CLK_FREQ_TRIM_REG__XTAL32M_TRIM__VALUE (0x120) + #endif + + #ifndef dg_configDEFAULT_XTAL32M_CTRL0_REG__XTAL32M_CXCOMP_ENABLE__VALUE + #define dg_configDEFAULT_XTAL32M_CTRL0_REG__XTAL32M_CXCOMP_ENABLE__VALUE (0x0) + #endif + + #ifndef dg_configUSE_CLOCK_MGR + #ifdef OS_BAREMETAL + #define dg_configUSE_CLOCK_MGR (0) + #elif defined(OS_FREERTOS) + #define dg_configUSE_CLOCK_MGR (0) + #endif + #endif + +/** + * \} + */ + +/* ------------------------------- System configuration settings -------------------------------- */ + +/** + * \addtogroup SYSTEM_CONFIGURATION_SETTINGS + * + * \{ + */ + +/** + * \brief Reset value for Watchdog when system is idle. + */ + #ifndef dg_configWDOG_IDLE_RESET_VALUE + #define dg_configWDOG_IDLE_RESET_VALUE (SYS_WDOG_WATCHDOG_REG_WDOG_VAL_Msk >> SYS_WDOG_WATCHDOG_REG_WDOG_VAL_Pos) + #endif + +/** + * \brief Maximum watchdog tasks + * + * Maximum number of tasks that the Watchdog Service can monitor. It can be larger (up to 32) than + * needed, at the expense of increased Retention Memory requirement. + */ + #ifndef dg_configWDOG_MAX_TASKS_CNT + #define dg_configWDOG_MAX_TASKS_CNT (64) + #endif + +/** + * \brief Extend maximum watchdog tasks + * + * When set to 1, maximum number of tasks can be larger (up to 64). + */ + #ifndef dg_configWDOG_EXT + #define dg_configWDOG_EXT (1) + #endif + +/* + * \brief When set to 1, the LEDs are used from M33. + * When set to 0, the LEDs are used from SNC. + */ + #ifndef dg_configM33_USES_LEDS + #define dg_configM33_USES_LEDS (1) + #endif + +/* + * \brief When set to 1, the GPIO configuration becomes static, i.e. it does not change during runtime. + * When set to 0, the GPIO configuration can change during runtime. + * + * \note If SNC is enabled (i.e. dg_configUSE_HW_SENSOR_NODE == 1), the GPIO configuration must be + * static, thus dg_configUSE_STATIC_IO_CONFIG is set to 1 + */ + #if dg_configUSE_HW_SENSOR_NODE + #undef dg_configUSE_STATIC_IO_CONFIG + #define dg_configUSE_STATIC_IO_CONFIG (1) + #else + #ifndef dg_configUSE_STATIC_IO_CONFIG + #define dg_configUSE_STATIC_IO_CONFIG (0) + #endif + #endif + +/** + * \} + */ + +/* -------------------------------------- Flash settings ---------------------------------------- */ + +/** + * \addtogroup FLASH_SETTINGS + * + * \{ + */ + +/** + * \brief When set to 1, the 1V8 rail is powered, when the system is in active state. + * When set to 2 the rail configuration will be defined by the application + */ + #ifndef dg_configPOWER_1V8_ACTIVE + #define dg_configPOWER_1V8_ACTIVE (2) + #else + #if (dg_configPOWER_1V8_ACTIVE == 0) && (dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8) + #error \ + "Flash is connected to the 1V8 rail but the rail is turned off. Please do not set dg_configPOWER_1V8_ACTIVE to 0." + #endif + #endif + +/** + * \brief When set to 1, the 1V8 is powered during sleep. + * When set to 2 the rail configuration will be defined by the application + */ + #ifndef dg_configPOWER_1V8_SLEEP + #define dg_configPOWER_1V8_SLEEP (2) + #endif + +/** + * \brief When set to 1, the 1V8P rail is powered. + */ + #ifdef dg_configPOWER_1V8P + #if defined(dg_configPOWER_1V8P_ACTIVE) || defined(dg_configPOWER_1V8P_SLEEP) + #error "dg_configPOWER_1V8P cannot be used when dg_configPOWER_1V8P_ACTIVE or dg_configPOWER_1V8P_SLEEP is used" + #else + #if dg_configPOWER_1V8P == 1 + #define dg_configPOWER_1V8P_ACTIVE (1) + #define dg_configPOWER_1V8P_SLEEP (1) + #else + #error \ + "GPADC digital logic is connected to the 1V8P rail but the rail is turned off. Please do not set dg_configPOWER_1V8P to 0." + #endif + #endif + #endif + +/** + * \brief When set to 1, the 1V8P rail is powered, when the system is in active state. + * When set to 2 the rail configuration will be defined by the application + */ + #ifndef dg_configPOWER_1V8P_ACTIVE + #define dg_configPOWER_1V8P_ACTIVE (2) + #else + #if dg_configPOWER_1V8P_ACTIVE == 0 + #error \ + "GPADC digital logic is connected to the 1V8P rail but the rail is turned off. Please do not set dg_configPOWER_1V8P_ACTIVE to 0." + #endif + #endif + + #if defined(dg_configPOWER_1V8P_ACTIVE) && (dg_configPOWER_1V8P_ACTIVE == 0) && \ + (dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8P || dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8F) + #error \ + "Flash is connected to the 1V8P rail but the rail is turned off. Please do not set dg_configPOWER_1V8P_ACTIVE to 0." + #endif + + #if (dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8P || dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8F) \ + && defined(dg_configFLASH_POWER_OFF) && defined(dg_configPOWER_1V8P_SLEEP) && (dg_configPOWER_1V8P_SLEEP == 0) + #error \ + "Both dg_configFLASH_POWER_OFF and dg_configPOWER_1V8P_SLEEP are defined! Please use dg_configPOWER_1V8P_SLEEP only!" + #endif + + #if (dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8) && defined(dg_configFLASH_POWER_OFF) && \ + defined(dg_configPOWER_1V8_SLEEP) + #error \ + "Both dg_configFLASH_POWER_OFF and dg_configPOWER_1V8_SLEEP are defined. Please use dg_configPOWER_1V8_SLEEP only!" + #endif + +/** + * \brief When set to 1, the 1V8P is powered during sleep. + * When set to 2 the rail configuration will be defined by the application + */ + #ifndef dg_configPOWER_1V8P_SLEEP + #define dg_configPOWER_1V8P_SLEEP (2) + #else + #if dg_configPOWER_1V8P_SLEEP == 0 + #error \ + "GPADC digital logic is connected to the 1V8P rail but the rail is turned off. Please do not set dg_configPOWER_1V8P_SLEEP to 0." + #endif + #endif + +/** + * \brief When set to 1, the Flash is powered off during sleep. + */ + #ifndef dg_configFLASH_POWER_OFF + +// dg_configFLASH_POWER_OFF will only be allowed to be defined to 1 if dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8P or FLASH_CONNECTED_TO_1V8F +// and dg_configPOWER_1V8P_SLEEP == 1 + #if (((dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8) && defined(dg_configPOWER_1V8_SLEEP) && \ + (dg_configPOWER_1V8_SLEEP == 0)) || \ + ((dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8P || dg_configFLASH_CONNECTED_TO == FLASH_CONNECTED_TO_1V8F) \ + && defined(dg_configPOWER_1V8P_SLEEP) && (dg_configPOWER_1V8P_SLEEP == 0))) + #define dg_configFLASH_POWER_OFF (1) + #else + #define dg_configFLASH_POWER_OFF (0) + #endif + #endif /* dg_configFLASH_POWER_OFF */ + +/** + * \brief Enable the Auto-detection mode for QSPIC2 device + * + * \warning THIS WILL GREATLY INCREASE THE CODE SIZE AND RETRAM USAGE!!! MAKE SURE YOUR PROJECT + * CAN SUPPORT THIS. + */ + #ifndef dg_configQSPIC2_DEV_AUTODETECT + #define dg_configQSPIC2_DEV_AUTODETECT (0) + #endif + + #if dg_configQSPIC2_DEV_AUTODETECT == 0 + +/** + * \brief The QSPI 2 Driver header file to include + * + * The header file must be in the include path of the compiler + */ + #ifndef dg_configQSPIC2_DEV_HEADER_FILE + #define dg_configQSPIC2_DEV_HEADER_FILE "psram_aps6404jsq.h" + #endif + +/** + * \brief The QSPI 2 Driver configuration structure + * + * The configuration structure must be in the include path of the compiler + */ + #ifndef dg_configQSPIC2_DEV_CONFIG + #define dg_configQSPIC2_DEV_CONFIG psram_aps6404jsq_config + #endif + + #endif /* dg_configQSPIC2_DEV_AUTODETECT == 0 */ + + #if dg_configFLASH_AUTODETECT == 0 + +/** + * \brief The Flash Driver header file to include + * + * The header file must be in the include path of the compiler + */ + #ifndef dg_configFLASH_HEADER_FILE + #define dg_configFLASH_HEADER_FILE "qspi_mx25u3235.h" + #endif /* dg_configFLASH_HEADER_FILE */ + +/** + * \brief The Flash Driver configuration structure + * + * The configuration structure must be in the include path of the compiler + */ + #ifndef dg_configFLASH_CONFIG + #define dg_configFLASH_CONFIG flash_mx25u3235_config + #endif /* dg_configFLASH_CONFIG */ + + #endif /* dg_configFLASH_AUTODETECT == 0 */ + + #if (dg_configUSE_HW_QSPI == 1) + +/** + * \brief The base address for accessing the Flash memory connected to QSPIC2 + * + * The base address is used in qspi_automode. Automode is using a single zero-based address region + * for accessing the QSPI Flash devices connected to both QSPI controllers (QSPIC1 and QSPIC2). + * Two address sub-regions are defined: + * Address region 1: 0..dg_configQSPI2_FLASH_BASE_ADDR-1 + * Address region 2: starting at dg_configQSPI2_FLASH_BASE_ADDR + * When QSPI Flash address is in region 1 then the device connected to QSPIC1 is accessed. + * When QSPI Flash address is in region 2 then the device connected to QSPIC2 is accessed. + * The maximum region size handled by each QSPI controller in automode is 32MBytes. The + * default value of dg_configQSPI2_FLASH_BASE_ADDR is 0x2000000 allowing 32MBytes region + * for each controller. The default value can be overridden and set to the size of the QSPI + * Flash device connected to QSPIC1 to allow a continuous address space for both devices. + */ + #ifndef dg_configQSPI2_FLASH_BASE_ADDR + #define dg_configQSPI2_FLASH_BASE_ADDR 0x2000000 + #endif + + #endif /* dg_configUSE_HW_QSPI */ + + #if (dg_configFLASH_AUTODETECT == 0) || (dg_configQSPIC2_DEV_AUTODETECT == 0) + +/** + * \brief Flash device configuration verification. + * + * When set to 1, the Flash device id configuration is checked against the JEDEC ID read + * from the controller. + * + * Applicable only when flash auto detection is not enabled. + */ + #ifndef dg_configFLASH_CONFIG_VERIFY + #define dg_configFLASH_CONFIG_VERIFY (0) + #endif + #endif /* (dg_configFLASH_AUTODETECT == 0) || (dg_configQSPIC2_DEV_AUTODETECT == 0) */ + +/** + * \} + */ + +/* ----------------------------------- Charger settings ----------------------------------------- */ + +/** + * \addtogroup CHARGER_SETTINGS Charger configuration settings + * + * \{ + */ + +/** + * \brief When set to 1, State of Charge function is enabled. + */ + #ifndef dg_configUSE_SOC + #define dg_configUSE_SOC (0) + #endif + +/** + * \} + */ + +/* ----------------------------------- UART settings -------------------------------------------- */ + +/** + * \addtogroup UART_SETTINGS + * + * \{ + */ + +/** + * \brief UART3's software FIFO size + */ + #ifndef dg_configUART3_SOFTWARE_FIFO_SIZE + #define dg_configUART3_SOFTWARE_FIFO_SIZE (0) + #endif + +/** + * \brief UART3's Circular DMA buffer size for RX + */ + #ifndef dg_configUART3_RX_CIRCULAR_DMA_BUF_SIZE + #define dg_configUART3_RX_CIRCULAR_DMA_BUF_SIZE (0) + #endif + +/** + * \} + */ + +/* + */ + +/*------------------------------------ BOARDS DEFINITIONS ----------------------------------------*/ + +/** + * \brief Set the board that is used. + */ + #ifndef dg_configUSE_BOARD + #include "boards/brd_io_config_ra6w1.h" + #define dg_configUSE_BOARD + #endif + +#endif /* DA1640X */ + +#endif /* BSP_DEFAULTS_RA6W1_H_ */ + +/** + * \} + * \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_definitions.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_definitions.h new file mode 100644 index 000000000000..254e55d2260e --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_definitions.h @@ -0,0 +1,175 @@ +/** + * \addtogroup PLA_BSP_CONFIG + * \{ + * \addtogroup BSP_CONFIG_DEFINITIONS Configuration Definitions + * + * \brief Doxygen documentation is not yet available for this module. + * Please check the source code file(s) + * + *\{ + */ + +/** + **************************************************************************************** + * + * @file bsp_definitions.h + * + * @brief Board Support Package. System Configuration file definitions. + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_DEFINITIONS_H_ +#define BSP_DEFINITIONS_H_ + +/* ------------------------------------ DEVICE DEFINITIONS -------------------------------------- */ + +#include "bsp_device_definitions.h" + +/* ------------------------------------ Generic definitions ------------------------------------- */ + +#define PRO_DK_DA1469x_BRD 1 +#define PRO_DK_DA1468x_BRD 2 +#define FPGA_DA1469x_BRD 3 +#define FPGA_DA1468x_BRD 4 + +#define LP_CLK_IS_ANALOG 0 +#define LP_CLK_IS_DIGITAL 1 + +#define MODE_IS_MIRRORED 0 +#define MODE_IS_CACHED 1 +#define MODE_IS_RAM MODE_IS_MIRRORED + +#define NON_VOLATILE_IS_OTP 0 // Code is in OTP +#define NON_VOLATILE_IS_FLASH 1 // Code is in QSPI Flash +#define NON_VOLATILE_IS_NONE 2 // Debug mode! Code is in RAM! + +#define EXT_CRYSTAL_IS_16M 0 +#define EXT_CRYSTAL_IS_32M 1 + +#define DEVELOPMENT_MODE 0 // Code is built for debugging +#define PRODUCTION_MODE 1 // Code is built for production + +#define FLASH_IS_NOT_CONNECTED 0 +#define FLASH_CONNECTED_TO_1V8 1 +#define FLASH_CONNECTED_TO_1V8P 2 +#define FLASH_CONNECTED_TO_1V8F 3 + +#define BATTERY_TYPE_2xNIMH 0 +#define BATTERY_TYPE_3xNIMH 1 +#define BATTERY_TYPE_LICOO2 2 // 2.5V discharge voltage, 4.20V charge voltage +#define BATTERY_TYPE_LIMN2O4 3 // 2.5V discharge voltage, 4.20V charge voltage +#define BATTERY_TYPE_NMC 4 // 2.5V discharge voltage, 4.20V charge voltage +#define BATTERY_TYPE_LIFEPO4 5 // 2.5V discharge voltage, 3.65V charge voltage +#define BATTERY_TYPE_LINICOAIO2 6 // 3.0V discharge voltage, 4.20V charge voltage +#define BATTERY_TYPE_CUSTOM 7 +#define BATTERY_TYPE_NO_RECHARGE 8 +#define BATTERY_TYPE_NO_BATTERY 9 + +#define BATTERY_TYPE_2xNIMH_ADC_VOLTAGE (2785) +#define BATTERY_TYPE_3xNIMH_ADC_VOLTAGE (4013) +#define BATTERY_TYPE_LICOO2_ADC_VOLTAGE (3440) +#define BATTERY_TYPE_LIMN2O4_ADC_VOLTAGE (3440) +#define BATTERY_TYPE_NMC_ADC_VOLTAGE (3440) +#define BATTERY_TYPE_LIFEPO4_ADC_VOLTAGE (2989) +#define BATTERY_TYPE_LINICOAIO2_ADC_VOLTAGE (3440) + +/* + * Legacy DK motherboards, which are not supported by the SDK. + * The definitions exist just so that we don't break compilation of old projects. + */ +#define BLACK_ORCA_MB_REV_A 0 +#define BLACK_ORCA_MB_REV_B 1 + +/* + * The supported DK motherboards. + */ +#define BLACK_ORCA_MB_REV_D 2 + +#if (DEVICE_FAMILY == DA1468X) + +/* + * The cache associativity options. + */ + #define CACHE_ASSOC_AS_IS (-1) /// leave as set by the ROM booter + #define CACHE_ASSOC_DIRECT_MAP 0 /// direct-mapped + #define CACHE_ASSOC_2_WAY 1 /// 2-way set associative + #define CACHE_ASSOC_4_WAY 2 /// 4-way set associative + +/* + * The cache line size options. + */ + #define CACHE_LINESZ_AS_IS (-1) /// leave as set by the ROM booter + #define CACHE_LINESZ_8_BYTES 0 /// 8 bytes + #define CACHE_LINESZ_16_BYTES 1 /// 16 bytes + #define CACHE_LINESZ_32_BYTES 2 /// 32 bytes +#endif /* DA1468X */ + +/* + * The supported RF Front-End Modules + */ +#define FEM_NOFEM 0 +#define FEM_SKY66112_11 1 + +/* + * The BLE event notification user hook types + */ +#define BLE_EVENT_NOTIF_USER_ISR 0 /// User-defined hooks directly from ISR context +#define BLE_EVENT_NOTIF_USER_TASK 1 /// Notification of the user task, using task notifications. + +/* + * Definitions for the different USB suspend modes. + */ +#define USB_SUSPEND_MODE_NONE 0 /// No action, just stop the PLL clock +#define USB_SUSPEND_MODE_PAUSE 1 /// Pause the system and wake only from VBUS and USB interrupts +#define USB_SUSPEND_MODE_IDLE 2 /// System state changes to idle + +#define COEX_NONE 0 +#define COEX_LEGACY 1 +#define COEX_2WAY 2 +#define COEX_3WAY 3 + +/* + * Definitions DRIVE_STRENGTH for AA + */ +#define DRIVE_STRENGTH_2MA (0) ///< Sets pad drive strength 2 mA +#define DRIVE_STRENGTH_12MA (1) ///< Sets pad drive strength 12 mA +#define DRIVE_STRENGTH_4MA (2) ///< Sets pad drive strength 4 mA +#define DRIVE_STRENGTH_18MA (3) ///< Sets pad drive strength 18 mA + +/* + * Definitions DRIVE_STRENGTH for BA + */ +#define DRIVE_STRENGTH_BA_2MA (0) ///< Sets pad drive strength 2 mA +#define DRIVE_STRENGTH_BA_4MA (1) ///< Sets pad drive strength 4 mA +#define DRIVE_STRENGTH_BA_8MA (2) ///< Sets pad drive strength 8 mA +#define DRIVE_STRENGTH_BA_14MA (3) ///< Sets pad drive strength 14 mA + +#endif /* BSP_DEFINITIONS_H_ */ + +/** + \} + \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_device_definitions.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_device_definitions.h new file mode 100644 index 000000000000..d4279c2ef539 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_device_definitions.h @@ -0,0 +1,172 @@ +/** + * \addtogroup BSP_CONFIG_DEFINITIONS + * \{ + * \addtogroup BSP_CFG_DEF_DEVICE_MAP Device-Map Definitions + * + * \brief Device-Map Definitions. Macros for all the devices supported by SDK10. + * + *\{ + */ + +/** + **************************************************************************************** + * + * @file bsp_device_definitions.h + * + * @brief Board Support Package. Device-Map definitions. + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_DEVICE_DEFINITIONS_H_ +#define BSP_DEVICE_DEFINITIONS_H_ + +/* + * Available public macros characterizing each product supported by SDK10. + * The variable dg_configDEVICE *MUST* take one of the following values + * i.e. dg_configDEVICE=DA14680_01 + * The variable *MUST* be visible to both the compiler and the assembler. + */ +#define DA14680_01 (DA14680 | _DEVICE_MK_IC_VER(A, E)) +#define DA14681_01 (DA14681 | _DEVICE_MK_IC_VER(A, E)) +#define DA14682_00 (DA14682 | _DEVICE_MK_IC_VER(B, B)) +#define DA14683_00 (DA14683 | _DEVICE_MK_IC_VER(B, B)) + +#define DA14691_00 (DA14691 | _DEVICE_MK_IC_VER(A, B)) +#define DA14693_00 (DA14693 | _DEVICE_MK_IC_VER(A, B)) +#define DA14695_00 (DA14695 | _DEVICE_MK_IC_VER(A, B)) +#define DA14697_00 (DA14697 | _DEVICE_MK_IC_VER(A, B)) +#define DA14699_00 (DA14699 | _DEVICE_MK_IC_VER(A, B)) + +#define DA14870_00 (DA14870 | _DEVICE_MK_IC_VER(A, A)) +#define DA14871_00 (DA14871 | _DEVICE_MK_IC_VER(A, A)) +#define DA14872_00 (DA14872 | _DEVICE_MK_IC_VER(A, A)) +#define DA14873_00 (DA14873 | _DEVICE_MK_IC_VER(A, A)) + +#define DA16400_00 (DA16400 | _DEVICE_MK_IC_VER(A, A)) +#define DA16400_10 (DA16400 | _DEVICE_MK_IC_VER(B, A)) + +#define D3095_10 (D3095 | _DEVICE_MK_IC_VER(B, A)) + +#ifndef dg_configDEVICE + #define dg_configDEVICE DA16400_00 +#endif + +#include "bsp_device_definitions_internal.h" + +/* + * Backward compatibility macros. + * Useful for applications developed with older SDK versions. + * DEVICE_DA146XX can be assigned the desired device. + */ + +/* DA14680 family substitution (with the exception of uartboot loader) */ +#define DEVICE_DA14680 DA14683_00 + +/* DA14690 family substitution */ +#define DEVICE_DA1469x DA14699_00 + +#if 0 + +/* + * Test Section. + * Helpful when changing the macro functionality. + */ + #if (DEVICE_FPGA) + #pragma message "DEVICE_FPGA true" + #elif !(DEVICE_FPGA) && !DEVICE_FPGA + #pragma message "DEVICE_FPGA false" + #endif + + #if ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) && !(DEVICE_FAMILY != DA1469X) + #pragma message "Family DA1469X" + + #if !(DEVICE_FPGA) + #if (DEVICE_VARIANT == DA14699) && !(DEVICE_VARIANT != DA14699) + #pragma message "Variant DA14699" + #elif (DEVICE_VARIANT == DA14697) && !(DEVICE_VARIANT != DA14697) + #pragma message "Variant DA14697" + #elif (DEVICE_VARIANT == DA14695) && !(DEVICE_VARIANT != DA14695) + #pragma message "Variant DA14695" + #elif (DEVICE_VARIANT == DA14693) && !(DEVICE_VARIANT != DA14693) + #pragma message "Variant DA14693" + #elif (DEVICE_VARIANT == DA14691) && !(DEVICE_VARIANT != DA14691) + #pragma message "Variant DA14691" + #else + #error "690 VARIANT ERROR!" + #endif + #endif /* !FPGA */ + + #elif (DEVICE_FAMILY == DA1468X) && !(DEVICE_FAMILY != DA1468X) + #pragma message "Family DA1468X" + + #if !(DEVICE_FPGA) + #if (DEVICE_VARIANT == DA14680) && !(DEVICE_VARIANT != DA14680) + #pragma message "Variant DA14680" + #elif (DEVICE_VARIANT == DA14681) && !(DEVICE_VARIANT != DA14681) + #pragma message "Variant DA14681" + #elif (DEVICE_VARIANT == DA14682) && !(DEVICE_VARIANT != DA14682) + #pragma message "Variant DA14682" + #elif (DEVICE_VARIANT == DA14683) && !(DEVICE_VARIANT != DA14683) + #pragma message "Variant DA14683" + #else + #error "680 VARIANT ERROR!" + #endif + #endif /* !FPGA */ + + #else + #error "FAMILY ERROR!" + #endif + + #if !(DEVICE_FPGA) + #if (DEVICE_REVISION == DEVICE_REV_A) && !(DEVICE_REVISION != DEVICE_REV_A) + #pragma message "Revision A" + #elif (DEVICE_REVISION == DEVICE_REV_B) && !(DEVICE_REVISION != DEVICE_REV_B) + #pragma message "Revision B" + #else + #error "REVISION" + #endif + #endif + + #if !(DEVICE_FPGA) + #if (DEVICE_VERSION == DEVICE_VER_AE) && !(DEVICE_VERSION != DEVICE_VER_AE) + #pragma message "Revision A Step E" + #elif (DEVICE_VERSION == DEVICE_VER_AB) && !(DEVICE_VERSION != DEVICE_VER_AB) + #pragma message "Revision A Step B" + #elif (DEVICE_VERSION == DEVICE_VER_BB) && !(DEVICE_VERSION != DEVICE_VER_BB) + #pragma message "Revision B Step B" + #else + #error "VERSION" + #endif + #endif + +#endif /* Test section */ + +#endif /* BSP_DEVICE_DEFINITIONS_H_ */ + +/** + \} + \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_device_definitions_internal.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_device_definitions_internal.h new file mode 100644 index 000000000000..3fce8716bb58 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_device_definitions_internal.h @@ -0,0 +1,334 @@ +/** + **************************************************************************************** + * + * @file ra6w1/config/bsp_device_definitions_internal.h + * + * @brief Board Support Package. Device-Map definitions. + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_DEVICE_DEFINITIONS_INTERNAL_H_ +#define BSP_DEVICE_DEFINITIONS_INTERNAL_H_ + +/* + * 31 23 22 13 12 11 8 7 0 + * +--------------+-------------------+------------+---------------+---------------+ + * | Chip Family | Chip Variant | 0: silicon | chip revision | chip stepping | + * | | | | |r|r|r|r| |s|s|s|s|s|s|s|s| + * | |.|.|6|6|x|x|x|x|x|x|x|x|x|x| | |D|C|B|A| |H|G|F|E|D|C|B|A| + * | |.|.|9|8|y|y|y|y|y|y|y|y|y|y|--------------------------------------------| + * | |.|.|z|z|9|8|7|6|5|4|3|2|1|0| 1: FPGA | FPGA version | + * | | | | (numerical 0-4095) | + * +--------------+-------------------+------------+-------------------------------+ + * + * The device is described by a 32-bit value with the following bit encoding: + * + * [11:0] HW version, meaning depends on bit 12: + * For FPGA (bit 12 is 1): + * [11:0] FPGA image version: + * 0-4095: numerical version matching single FPGA image version + * For silicon (bit 12 is 0): + * [ 7:0] Bit field of chip stepping (e.g. xB) + * 0: A, + * 1: B, + * 2: C, + * 3: D, + * 4: E, + * 5: F, + * 6: G, + * 7: H + * [11:8] Bit field of chip revision (e.g. Ax) + * 0: A, + * 1: B, + * 2: C, + * 3: D + * [12] Bit for selecting FPGA/silicon chip version + * 0: silicon, + * 1: FPGA + * [22:13] Bit field that matches one or more chip family variant(s) (up to 10 variants): + * 0x000: invalid for silicon, used for FPGA only + * 0x001: variant xy0 + * 0x002: variant xy1 + * 0x004: variant xy2 + * 0x008: variant xy3 + * 0x010: variant xy4 + * 0x020: variant xy5 + * 0x040: variant xy6 + * 0x080: variant xy7 + * 0x100: variant xy9 + * + * + * [31:23] Bit field that matches one or more chip family/families (up to 9 families): + * 0x0001: 68z + * 0x0002: 69z + * + * Example: + * DA14683_00 (_DEVICE_FAMILY_680 | _DEVICE_VARIANT_3 | _DEVICE_IC_REV_B | _DEVICE_IC_STEP_B) + * + */ + +/* + * Internal definitions + */ + +/* Make bit field value */ +#define _DEVICE_MK_BF_VAL(field, value) (((1 << value) << _DEVICE_ ## field ## _POS) & _DEVICE_ ## field ## _MASK) + +/* Make numerical value */ +#define _DEVICE_MK_NUM_VAL(field, value) (((value) << _DEVICE_ ## field ## _POS) & _DEVICE_ ## field ## _MASK) + +/* Device family definitions */ +#define _DEVICE_FAMILY_MASK 0xFF800000 +#define _DEVICE_FAMILY_POS 23 +#define _DEVICE_FAMILY_680 0 +#define _DEVICE_FAMILY_690 1 + +/* XXX 2 is reserved for 590 */ +#define _DEVICE_FAMILY_870 3 + +/* DA16400 */ +#define _DEVICE_FAMILY_400 4 +#define _DEVICE_FAMILY_6100 4 +#define _DEVICE_MK_FAMILY(x) _DEVICE_MK_BF_VAL(FAMILY, _DEVICE_FAMILY_ ## x) + +/* Device variants definitions */ +#define _DEVICE_VARIANT_MASK 0x007FE000 +#define _DEVICE_CHIP_ID_MASK 0x007FE000 +#define _DEVICE_VARIANT_POS 13 +#define _DEVICE_VARIANT_XX0 0 +#define _DEVICE_CHIP_ID_6100 0 +#define _DEVICE_VARIANT_XX1 1 +#define _DEVICE_VARIANT_XX2 2 +#define _DEVICE_VARIANT_XX3 3 +#define _DEVICE_VARIANT_XX4 4 +#define _DEVICE_VARIANT_XX5 5 +#define _DEVICE_VARIANT_XX6 6 +#define _DEVICE_VARIANT_XX7 7 +#define _DEVICE_VARIANT_XX8 8 +#define _DEVICE_VARIANT_XX9 9 +#define _DEVICE_MK_VARIANT(x) _DEVICE_MK_BF_VAL(VARIANT, _DEVICE_VARIANT_XX ## x) +#define _DEVICE_MK_VARIANT_NUMERICAL(n) _DEVICE_MK_BF_VAL(VARIANT, _DEVICE_VARIANT_XX0 + (n)) +#define _DEVICE_MK_CHIP_ID(x) _DEVICE_MK_BF_VAL(VARIANT, _DEVICE_CHIP_ID_ ## x) + +/* FPGA definitions */ +#define _DEVICE_FPGA_MASK 0x00001000 +#define _DEVICE_FPGA_POS 12 + +#define _DEVICE_FPGA_VER_MASK 0x00000FFF +#define _DEVICE_FPGA_VER_POS 0 +#define _DEVICE_MK_FPGA_VER(n) _DEVICE_MK_BF_VAL(FPGA_VER, (n)) + +/* Device stepping major subrevisions */ +#define _DEVICE_IC_REV_MASK 0x00000F00 +#define _DEVICE_IC_REV_POS 8 + +#define _DEVICE_IC_REV_A 0 +#define _DEVICE_IC_REV_B 1 +#define _DEVICE_IC_REV_C 2 +#define _DEVICE_IC_REV_D 3 +#define _DEVICE_MK_IC_REV(x) _DEVICE_MK_BF_VAL(IC_REV, _DEVICE_IC_REV_ ## x) +#define _DEVICE_MK_REV_NUMERICAL(n) _DEVICE_MK_BF_VAL(IC_REV, n) + +/* Device stepping minor subrevisions */ +#define _DEVICE_IC_STEP_MASK 0x000000FF +#define _DEVICE_IC_STEP_POS 0 +#define _DEVICE_IC_STEP_A 0 +#define _DEVICE_IC_STEP_B 1 +#define _DEVICE_IC_STEP_C 2 +#define _DEVICE_IC_STEP_D 3 +#define _DEVICE_IC_STEP_E 4 +#define _DEVICE_IC_STEP_F 5 +#define _DEVICE_IC_STEP_G 6 +#define _DEVICE_IC_STEP_H 7 +#define _DEVICE_MK_IC_STEP(y) _DEVICE_MK_BF_VAL(IC_STEP, _DEVICE_IC_STEP_ ## y) +#define _DEVICE_MK_IC_VER(x, y) (_DEVICE_MK_IC_REV(x) | _DEVICE_MK_IC_STEP(y)) +#define _DEVICE_MK_STEP_NUMERICAL(n) _DEVICE_MK_BF_VAL(IC_STEP, n) +#define _DEVICE_MASK (_DEVICE_FAMILY_MASK | _DEVICE_VARIANT_MASK | _DEVICE_FPGA_MASK) + +/* + * 680 device family. + */ + +/* Variants */ +#define DA14680 (_DEVICE_MK_FAMILY(680) | _DEVICE_MK_VARIANT(0)) +#define DA14681 (_DEVICE_MK_FAMILY(680) | _DEVICE_MK_VARIANT(1)) +#define DA14682 (_DEVICE_MK_FAMILY(680) | _DEVICE_MK_VARIANT(2)) +#define DA14683 (_DEVICE_MK_FAMILY(680) | _DEVICE_MK_VARIANT(3)) + +/* FPGA Device */ +#define DA1468X_FPGA (_DEVICE_MK_FAMILY(680) | _DEVICE_FPGA_MASK) + +/* Family Wildcard */ +#define DA1468X (_DEVICE_MK_FAMILY(680)) + +/* + * 690 device family. + */ + +/* Variants */ +#define DA14691 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(1)) +#define DA14693 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(3)) +#define DA14695 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(5)) +#define DA14697 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(7)) +#define DA14699 (_DEVICE_MK_FAMILY(690) | _DEVICE_MK_VARIANT(9)) + +/* FPGA Device */ +#define D2522 (_DEVICE_MK_FAMILY(690) | _DEVICE_FPGA_MASK) + +/* Family Wildcard */ +#define DA1469X (_DEVICE_MK_FAMILY(690)) + +/* + * 870 device family. + */ + +/* Variants */ +#define DA14870 (_DEVICE_MK_FAMILY(870) | _DEVICE_MK_VARIANT(0)) +#define DA14871 (_DEVICE_MK_FAMILY(870) | _DEVICE_MK_VARIANT(1)) +#define DA14872 (_DEVICE_MK_FAMILY(870) | _DEVICE_MK_VARIANT(2)) +#define DA14873 (_DEVICE_MK_FAMILY(870) | _DEVICE_MK_VARIANT(3)) + +/* FPGA Device */ +#define D2924 (_DEVICE_MK_FAMILY(870) | _DEVICE_FPGA_MASK) + +/* Family Wildcard */ +#define DA1487X (_DEVICE_MK_FAMILY(870)) + +/* + * DA16400 device family. + */ + +/* Variants */ +#define DA16400 (_DEVICE_MK_FAMILY(400) | _DEVICE_MK_VARIANT(0)) +#define RA6W1 (_DEVICE_MK_FAMILY(6100) | _DEVICE_MK_VARIANT(0)) + +/* Device Chip ID */ +#define DEVICE_CHIP_ID_61000 (_DEVICE_MK_CHIP_ID(6100)) + +/* FPGA Device */ +#define D3095 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(0)) +#define D3095KUS (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(0)) +#define D3095KUMAC (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(0)) +#define D3095KUMAC1 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(1)) +#define D3095KUMAC2 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(2)) +#define D3095KUMAC3 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(3)) +#define D3095KUMAC4 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(4)) +#define D3095KUMAC5 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(5)) +#define D3095KUMAC6 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(6)) +#define D3095KUMAC7 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(7)) + +#define D3095KUPER1 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(251)) +#define D3095KUPER2 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(252)) +#define D3095KUPER3 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(253)) +#define D3095K7 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(256)) +#define D3095K7PER1 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(257)) +#define D3095K7PER2 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(258)) +#define D3095K7PER3 (_DEVICE_MK_FAMILY(400) | _DEVICE_FPGA_MASK | _DEVICE_MK_FPGA_VER(259)) + +/* Family Wildcard */ +#define DA1640X (_DEVICE_MK_FAMILY(400)) + +/* + * The supported chip revisions used for runtime checks. + */ +#define DEVICE_IC_REV_A _DEVICE_IC_REV_A +#define DEVICE_IC_REV_B _DEVICE_IC_REV_B + +/* + * The supported chip steppings used for runtime checks. + */ +#define DEVICE_IC_STEP_A _DEVICE_IC_STEP_A +#define DEVICE_IC_STEP_B _DEVICE_IC_STEP_B +#define DEVICE_IC_STEP_C _DEVICE_IC_STEP_C +#define DEVICE_IC_STEP_D _DEVICE_IC_STEP_D +#define DEVICE_IC_STEP_E _DEVICE_IC_STEP_E +#define DEVICE_IC_STEP_F _DEVICE_IC_STEP_F +#define DEVICE_IC_STEP_G _DEVICE_IC_STEP_G +#define DEVICE_IC_STEP_H _DEVICE_IC_STEP_H + +/* + * Generic Revision and Step Macros. + */ +#ifndef DEVICE_REV_A + #define DEVICE_REV_A (_DEVICE_MK_IC_REV(A)) +#endif +#ifndef DEVICE_REV_B + #define DEVICE_REV_B (_DEVICE_MK_IC_REV(B)) +#endif + +#define DEVICE_VER_AA (_DEVICE_MK_IC_VER(A, A)) +#define DEVICE_VER_AB (_DEVICE_MK_IC_VER(A, B)) +#define DEVICE_VER_AE (_DEVICE_MK_IC_VER(A, E)) +#define DEVICE_VER_BA (_DEVICE_MK_IC_VER(B, A)) +#define DEVICE_VER_BB (_DEVICE_MK_IC_VER(B, B)) + +/* + * A generic FPGA check, available for any device family. + */ +#define DEVICE_FPGA ((dg_configDEVICE & _DEVICE_FPGA_MASK) == _DEVICE_FPGA_MASK) + +#define DEVICE_FPGA_VER_KUS (_DEVICE_MK_FPGA_VER(0)) +#define DEVICE_FPGA_VER_KUMAC (_DEVICE_MK_FPGA_VER(0)) +#define DEVICE_FPGA_VER_KUMAC1 (_DEVICE_MK_FPGA_VER(1)) +#define DEVICE_FPGA_VER_KUMAC2 (_DEVICE_MK_FPGA_VER(2)) +#define DEVICE_FPGA_VER_KUMAC3 (_DEVICE_MK_FPGA_VER(3)) +#define DEVICE_FPGA_VER_KUMAC4 (_DEVICE_MK_FPGA_VER(4)) +#define DEVICE_FPGA_VER_KUMAC5 (_DEVICE_MK_FPGA_VER(5)) +#define DEVICE_FPGA_VER_KUMAC6 (_DEVICE_MK_FPGA_VER(6)) +#define DEVICE_FPGA_VER_KUMAC7 (_DEVICE_MK_FPGA_VER(7)) + +#define DEVICE_FPGA_VER_KUPER1 (_DEVICE_MK_FPGA_VER(251)) +#define DEVICE_FPGA_VER_KUPER2 (_DEVICE_MK_FPGA_VER(252)) +#define DEVICE_FPGA_VER_KUPER3 (_DEVICE_MK_FPGA_VER(253)) +#define DEVICE_FPGA_VER_K7 (_DEVICE_MK_FPGA_VER(256)) +#define DEVICE_FPGA_VER_K7PER1 (_DEVICE_MK_FPGA_VER(257)) +#define DEVICE_FPGA_VER_K7PER2 (_DEVICE_MK_FPGA_VER(258)) +#define DEVICE_FPGA_VER_K7PER3 (_DEVICE_MK_FPGA_VER(259)) + +/* + * Macros checking against specific device characteristics. + * Examples: + * #if (DEVICE_FAMILY == DA1468X) + * #if ((DEVICE_VARIANT == DA14695) || (DEVICE_VARIANT == DA14699)) + * #if (DEVICE_REVISION == DEVICE_REV_B) + * #if ((DEVICE_VERSION == DEVICE_VER_AB) || (DEVICE_VERSION == DEVICE_VER_AE)) + */ +#define DEVICE_FAMILY (dg_configDEVICE & _DEVICE_FAMILY_MASK) +#define DEVICE_VARIANT (dg_configDEVICE & (_DEVICE_FAMILY_MASK | _DEVICE_VARIANT_MASK)) +#define DEVICE_REVISION (dg_configDEVICE & _DEVICE_IC_REV_MASK) +#define DEVICE_VERSION (dg_configDEVICE & (_DEVICE_IC_REV_MASK | _DEVICE_IC_STEP_MASK)) + +/* + * Device information attributes masks + */ +#define DEVICE_FAMILY_MASK (_DEVICE_FAMILY_MASK) +#define DEVICE_CHIP_ID_MASK (_DEVICE_CHIP_ID_MASK) +#define DEVICE_VARIANT_MASK (_DEVICE_IC_VARIANT_MASK) +#define DEVICE_REVISION_MASK (_DEVICE_IC_REV_MASK) +#define DEVICE_SWC_MASK (_DEVICE_IC_SWC_MASK) +#define DEVICE_STEP_MASK (_DEVICE_IC_STEP_MASK) + +#endif /* BSP_DEVICE_DEFINITIONS_INTERNAL_H_ */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_memory_defaults.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_memory_defaults.h new file mode 100644 index 000000000000..ad4cfc5ab282 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_memory_defaults.h @@ -0,0 +1,80 @@ +/** + * \addtogroup PLA_BSP_CONFIG + * \{ + * \addtogroup BSP_MEMORY_DEFAULTS Memory Default Configuration Values + * + * \brief BSP memory default configuration values + * \{ + */ + +/** + **************************************************************************************** + * + * @file bsp_memory_defaults.h + * + * @brief Board Support Package. Memory Configuration file default values. + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_MEMORY_DEFAULTS_H_ +#define BSP_MEMORY_DEFAULTS_H_ + +#define PARTITION2(...) +#include "partition_table.h" +#undef PARTITION2 + +/* ---------------------------------------------------------------------------------------------- */ + +/*************************************************************************************************\ + * Default configuration for retention RAM + */ +#if !defined(RELEASE_BUILD) && (dg_configOPTIMAL_RETRAM == 1) + +/* WARNING: retRAM optimizations are disabled in DEBUG builds! */ + #undef dg_configOPTIMAL_RETRAM + #define dg_configOPTIMAL_RETRAM (0) +#elif (dg_configEXEC_MODE != MODE_IS_CACHED) + +/* WARNING: retRAM optimizations are not applicable in MIRRORED mode! */ + #undef dg_configOPTIMAL_RETRAM + #define dg_configOPTIMAL_RETRAM (0) +#endif + +/* -------------------------- INCLUDE MEMORY LAYOUT CONFIGURATION ------------------------------- */ + +#if (DEVICE_FAMILY == DA1640X) + #include "bsp_memory_defaults_ra6w1.h" +#endif + +#endif /* BSP_MEMORY_DEFAULTS_H_ */ + +/** + * \} + * + * \} + */ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_memory_defaults_ra6w1.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_memory_defaults_ra6w1.h new file mode 100644 index 000000000000..46c4c2f44af8 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_memory_defaults_ra6w1.h @@ -0,0 +1,136 @@ +/** + * \addtogroup BSP_MEMORY_DEFAULTS + * \{ + * + * \addtogroup MEMORY_LAYOUT_SETTINGS Memory Layout Configuration Settings + * + * \brief Memory Layout Configuration Settings + * \{ + * + */ + +/** + **************************************************************************************** + * + * @file bsp_memory_defaults_ra6w1.h + * + * @brief Board Support Package. Device-specific system configuration default values. + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __BSP_MEMORY_DEFAULTS_RA6W1_H__ +#define __BSP_MEMORY_DEFAULTS_RA6W1_H__ + +#if (DEVICE_FAMILY == DA1640X) + +// +// RTM Allocation v6 +// + +/// Booter Configuration: Base 0x08600000, 256 Bytes + #define dg_configBOOTER_RTM_ADDR (0x28600000) // == 0x08600000 + #define dg_configBOOTER_RTM_SIZE (0x100) + +/// Scheduler Configuration: Base 0x08600100, 512 Bytes + #define dg_configSCHEDULER_RTM_ADDR ((dg_configBOOTER_RTM_ADDR) + (dg_configBOOTER_RTM_SIZE)) + #define dg_configSCHEDULER_RTM_SIZE (0x200) + +/// MAC DPM Configuration: Base 0x08600300, 768 Bytes + #define dg_configMAC_RTM_ADDR ((dg_configSCHEDULER_RTM_ADDR) + (dg_configSCHEDULER_RTM_SIZE)) + #define dg_configMAC_RTM_SIZE (0x300) + +/// APP SUPP DPM Configuration: Base 0x08600600, 1968 Bytes + #define dg_configAPPSUPP_RTM_ADDR ((dg_configMAC_RTM_ADDR) + (dg_configMAC_RTM_SIZE)) + #define dg_configAPPSUPP_RTM_SIZE (0x7b0) + +/// PHY PARAM: Base 0x08600DB0, 100 Bytes + #define dg_configPHYPARAM_RTM_ADDR ((dg_configAPPSUPP_RTM_ADDR) + (dg_configAPPSUPP_RTM_SIZE)) + #define dg_configPHYPARAM_RTM_SIZE (0x64) + +/// FADC CAL: Base 0x08600E14, 80 Bytes + #define dg_configFADCAL_RTM_ADDR ((dg_configPHYPARAM_RTM_ADDR) + (dg_configPHYPARAM_RTM_SIZE)) + #define dg_configFADCAL_RTM_SIZE (0x50) + +/// TCS: Base 0x08600E64, 256 Bytes + #define dg_configTCS_RTM_ADDR ((dg_configFADCAL_RTM_ADDR) + (dg_configFADCAL_RTM_SIZE)) + #define dg_configTCS_RTM_SIZE (0x100) + +/// DPMST: Base 0x08600F64, 6432 Bytes + #define dg_configDPMST_RTM_ADDR ((dg_configTCS_RTM_ADDR) + (dg_configTCS_RTM_SIZE)) + #define dg_configDPMST_RTM_SIZE (0x1920) + +/// TCPKAT: Base 0x08602884, 48 Bytes + #define dg_configTCPKAT_RTM_ADDR ((dg_configDPMST_RTM_ADDR) + (dg_configDPMST_RTM_SIZE)) + #define dg_configTCPKAT_RTM_SIZE (0x30) + +/// PAD: Base 0x086028B4, 316 Bytes + #define dg_configPAD_RTM_ADDR ((dg_configTCPKAT_RTM_ADDR) + (dg_configTCPKAT_RTM_SIZE)) + #define dg_configPAD_RTM_SIZE (0x13C) + +/// PTIM Image Header: Base 0x086029F0, 16 Bytes + #define dg_configPTIMG_HDR_ADDR ((dg_configPAD_RTM_ADDR) + (dg_configPAD_RTM_SIZE)) + #define dg_configPTIMG_HDR_SIZE (0x10) + +/// The address to load the PTIM image into RTM: Base 0x08602A00, 41984 Bytes + #define dg_configPTIMG_ADDR ((dg_configPTIMG_HDR_ADDR) + (dg_configPTIMG_HDR_SIZE)) + #define dg_configPTIMG_SIZE (0xA400) + +/// TCP: Base 0x0860CE00, 2256 Bytes (Max TCP Session count : 8) + #define dg_configTCP_RTM_ADDR ((dg_configPTIMG_ADDR) + (dg_configPTIMG_SIZE)) + #define dg_configTCP_RTM_SIZE (0x8d0) + +/// APP SUPP DPM EXT Configuration: Base 0x08600D6D0, 384 Bytes + #define dg_configAPPSUPP_EXT_RTM_ADDR ((dg_configTCP_RTM_ADDR) + (dg_configTCP_RTM_SIZE)) + #define dg_configAPPSUPP_EXT_RTM_SIZE (0x180) + +/// User RTM Header: Base 0x0860D850, 64 Bytes + #define dg_configUSERHDR_RTM_ADDR ((dg_configAPPSUPP_EXT_RTM_ADDR) + (dg_configAPPSUPP_EXT_RTM_SIZE)) + #define dg_configUSERHDR_RTM_SIZE (0x40) + +/// User RTM: Base 0x0860D890, 10096 Bytes + #define dg_configUSER_RTM_ADDR ((dg_configUSERHDR_RTM_ADDR) + (dg_configUSERHDR_RTM_SIZE)) + #define dg_configUSER_RTM_SIZE (0x2770) + +/// RTM End: Base 0x08610000, 0 Bytes + #define dg_configEND_RTM_ADDR ((dg_configUSER_RTM_ADDR) + (dg_configUSER_RTM_SIZE)) + #define dg_configEND_RTM_SIZE (0x0) + + #if ((dg_configEND_RTM_ADDR) > (0x28610000)) + #error RTM Memory Overflow!!! + #endif + + #if ((dg_configPTIMG_ADDR) % 512) + #error PTIM address not aligned!!! + #endif + +#endif /* DA1640X */ + +#endif /* __BSP_MEMORY_DEFAULTS_RA6W1_H__ */ + +/** + * \} + * \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_sflash_map_ra6w1.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_sflash_map_ra6w1.h new file mode 100644 index 000000000000..860d975ed03d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_sflash_map_ra6w1.h @@ -0,0 +1,629 @@ +/** + **************************************************************************************** + * + * @file bsp_sflash_map_ra6w1.h + * + * @brief RA6W1_SFLASH Map + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#if !defined(__BSP_SFLASH_MAP_RA6W1_H__) +#define __BSP_SFLASH_MAP_RA6W1_H__ + +/* + * USER configurable fields ........................................................... + * SFLASH type for RA6W1 SDK + */ +#define RENESAS_AT25SL_8MB_OTA // Default Renesas AT25SL 8MB w/ OTA +#undef RENESAS_AT25SL_8MB // Default Renesas AT25SL 8MB w/o OTA +#undef NORMAL_4MB_OTA // Normal 4MB SFLASH w/ OTA +#undef NORMAL_4MB // Normal 4MB SFLASH w/o OTA + +// +// USER configurable fields ........................................................... +// Need to config by USER +#define CERT_WPA_ENT_USED (1) // Used = 1, Unused = 0 +#define CERT_OTA_USED (1) // Used = 1, Unused = 0 +#define CERT_HTTPS_CLI_USED (1) // Used = 1, Unused = 0 +#define CERT_HTTPS_SVR_USED (1) // Used = 1, Unused = 0 +#define CERT_MQTTS_CLI_USED (1) // Used = 1, Unused = 0 +#define CERT_ATCMD_USED (1) // Used = 1, Unused = 0 +#define CERT_AWS_USED (1) // Used = 1, Unused = 0 +#define CERT_MATTER_USED (1) // Used = 1, Unused = 0 +#define CERT_MISC1_USED (1) // Used = 1, Unused = 0 +#define CERT_MISC2_USED (1) // Used = 1, Unused = 0 +#define CERT_MISC3_USED (1) // Used = 1, Unused = 0 +#define CERT_MISC4_USED (1) // Used = 1, Unused = 0 +#define CERT_MISC5_USED (1) // Used = 1, Unused = 0 +#define CERT_MISC6_USED (1) // Used = 1, Unused = 0 +#define CERT_MISC7_USED (1) // Used = 1, Unused = 0 +#define CERT_MISC8_USED (1) // Used = 1, Unused = 0 +// .................................................................................... + +////////////////////////// SFLASH_MAP ////////////////////////////////// + +#if defined(RENESAS_AT25SL_8MB_OTA) // ==================== + +/* + * !!! Notice !!! + * + * Renese AT25SL Series 8MB SFLASH requires mutual exclusion operation + * in 1MB units for Write/Erase + Read operation. + * + */ + +/* + * < RA6W1 Renesas AT25SL 8MB SFALSH Map - w/ OTA > + * + * ............................................................................... + * 0x0000_0000 Product Header 4 KB + * 0x0000_1000 Product Header - Backup 4 KB + * + * 0x0000_2000 RTOS #0 2,560 KB + * 0x0028_2000 Reserved 508 KB + * .. 3MB ........................................................................ + * 0x0030_0000 NVRAM 40 KB + * 0x0030_A000 NVRAM - Backup (Multiplier 8) 280 KB + * + * 0x0035_0000 TLS_Cert_Base 704 KB + * 0x0035_0000 TLS Certificate WPA_Enterprise 16 KB or Unused + * 0x0035_4000 TLS Certificate OTA_Update 16 KB or Unused + * 0x0035_8000 TLS Certificate HTTPs Client 16 KB or Unused + * 0x0035_C000 TLS Certificate HTTPs Server 16 KB or Unused + * 0x0036_0000 TLS Certificate MQTTs Client 16 KB or Unused + * 0x0036_4000 TLS Certificate AT-CMD #0 ~ #15 64 KB ( 4KB * 16 ) or Unused + * 0x0037_4000 TLS Certificate AWS 20 KB or Unused + * 0x0037_9000 TLS Certificate Matter 20 KB or Unused + * 0x0037_E000 TLS Certificate MISC1 20 KB or Unused + * 0x0038_3000 TLS Certificate MISC2 20 KB or Unused + * 0x0038_8000 TLS Certificate MISC3 20 KB or Unused + * 0x0038_D000 TLS Certificate MISC4 20 KB or Unused + * 0x0039_2000 TLS Certificate MISC5 20 KB or Unused + * 0x0039_7000 TLS Certificate MISC6 20 KB or Unused + * 0x0039_C000 TLS Certificate MISC7 20 KB or Unused + * 0x003A_1000 TLS Certificate MISC8 20 KB or Unused + * 0x003F_E000 Secure Asset Product Area 4 KB or Unused + * .. 4MB ........................................................................ + * 0x0040_0000 RTOS #1 2,560 KB + * 0x0068_0000 Reserved 512 KB + * .. 7MB ........................................................................ + * 0x0070_0000 User Area #1 1,020 KB + * 0x007F_F000 Partition Table 4 KB + * .. 8MB ........................................................................ + * + */ + +// Area size + #define SF_PRODUCT_HDR_SIZE 0x00001000 // 4 KB + #define SF_RTOS_SIZE 0x00280000 // 2,048 KB + 64 KB * 8 + + #define SF_NVRAM_SIZE 0x0000A000 // 40 KB + #define SF_NVRAM_AREA_SIZE 0x00050000 // 320 KB + + #define SF_SYS_TLS_CERT_SIZE 0x00004000 // 16 KB + #define SF_SYS_TLS_ADD_CERT_SIZE 0x00005000 // 20 KB + #define SF_ATCMD_TLS_CERT_SIZE 0x00010000 // 64 KB + #define SF_TLS_AREA_SIZE 0x000B0000 // 704 KB + + #define SF_SECURE_ASSET_SIZE 0x00001000 // 4 KB + #define SF_USER_AREA_SIZE_ORI 0x000FF000 // 1,020 KB + + #define SF_PARTITION_TBL_SIZE 0x00001000 // 4 KB + +// Defined SFLASH address + #define SF_BASE_ADDR 0x00000000 + #define SF_NVRAM_BASE_ADDR 0x00300000 + #define SF_ASSET_PROD_BASE_ADDR 0x003FE000 + #define SF_RTOS_1_BASE_ADDR 0x00400000 + #if (TIN_SKU_BUILD_ID == TIN_SKU_WIFI6_B24_5_BLE || (defined(BSP_MCU_RRQ61051_208) || defined(BSP_MCU_RRQ61051_408))) + #define SF_USER_AREA_BASE_ADDR 0x00720000 + #else + #define SF_USER_AREA_BASE_ADDR 0x00700000 + #endif /* TIN_SKU_BUILD_ID == TIN_SKU_WIFI6_B24_5_BLE || (BSP_MCU_RRQ61051_208 || BSP_MCU_RRQ61051_408) */ + + #define SF_PRODUCT_HDR (SF_BASE_ADDR) + #define SF_PRODUCT_HDR_BACKUP (SF_BASE_ADDR + SF_PRODUCT_HDR_SIZE) + #define SF_RTOS_0 (SF_PRODUCT_HDR_BACKUP + SF_PRODUCT_HDR_SIZE) + + #define SF_NVRAM_AREA (SF_NVRAM_BASE_ADDR) + #define SF_NVRAM_BACKUP_AREA (SF_NVRAM_AREA + SF_NVRAM_SIZE) + + #define SF_TLS_CERT_BASE_ADDR (SF_NVRAM_AREA + SF_NVRAM_AREA_SIZE) + #define SF_TLS_CERT_WPA_ENT (SF_TLS_CERT_BASE_ADDR) + #define SF_TLS_CERT_OTA (SF_TLS_CERT_WPA_ENT + (SF_SYS_TLS_CERT_SIZE * CERT_WPA_ENT_USED)) + #define SF_TLS_CERT_HTTPS_CLI (SF_TLS_CERT_OTA + (SF_SYS_TLS_CERT_SIZE * CERT_OTA_USED)) + #define SF_TLS_CERT_HTTPS_SVR (SF_TLS_CERT_HTTPS_CLI + (SF_SYS_TLS_CERT_SIZE * CERT_HTTPS_CLI_USED)) + #define SF_TLS_CERT_MQTTS_CLI (SF_TLS_CERT_HTTPS_SVR + (SF_SYS_TLS_CERT_SIZE * CERT_HTTPS_SVR_USED)) + #define SF_TLS_CERT_ATCMD (SF_TLS_CERT_MQTTS_CLI + (SF_SYS_TLS_CERT_SIZE * CERT_MQTTS_CLI_USED)) + #define SF_TLS_CERT_AWS (SF_TLS_CERT_ATCMD + (SF_ATCMD_TLS_CERT_SIZE * CERT_ATCMD_USED)) + #define SF_TLS_CERT_MATTER (SF_TLS_CERT_AWS + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_AWS_USED)) + #define SF_TLS_CERT_MISC1 (SF_TLS_CERT_MATTER + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MATTER_USED)) + #define SF_TLS_CERT_MISC2 (SF_TLS_CERT_MISC1 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC1_USED)) + #define SF_TLS_CERT_MISC3 (SF_TLS_CERT_MISC2 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC2_USED)) + #define SF_TLS_CERT_MISC4 (SF_TLS_CERT_MISC3 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC3_USED)) + #define SF_TLS_CERT_MISC5 (SF_TLS_CERT_MISC4 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC4_USED)) + #define SF_TLS_CERT_MISC6 (SF_TLS_CERT_MISC5 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC5_USED)) + #define SF_TLS_CERT_MISC7 (SF_TLS_CERT_MISC6 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC6_USED)) + #define SF_TLS_CERT_MISC8 (SF_TLS_CERT_MISC7 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC7_USED)) + + #define SF_SECURE_ASSET_PROD (SF_ASSET_PROD_BASE_ADDR) + + #define SF_RTOS_1 (SF_RTOS_1_BASE_ADDR) + + #define SF_USER_AREA (SF_USER_AREA_BASE_ADDR) + #define SF_USER_AREA_SIZE (SF_USER_AREA_SIZE_ORI) + + #define SF_PARTITION_TBL (SF_USER_AREA + SF_USER_AREA_SIZE) // Fixed - Mandatory + #define SF_END (SF_PARTITION_TBL + SF_PARTITION_TBL_SIZE) + +#elif defined(RENESAS_AT25SL_8MB) // =========================================================== + +/* + * !!! Notice !!! + * + * Renese AT25SL Series 8MB SFLASH requires mutual exclusion operation + * in 1MB units for Write/Erase + Read operation. + * + */ + +/* + * < RA6W1 Renesas AT25SL 8MB SFALSH Map - w/o OTA > + * + * ............................................................................... + * 0x0000_0000 Product Header 4 KB + * 0x0000_1000 Product Header - Backup 4 KB + * + * 0x0000_2000 RTOS #0 2,560 KB + * 0x0028_2000 Reserved 508 KB + * .. 3MB ........................................................................ + * 0x0030_0000 NVRAM 40 KB + * 0x0030_A000 NVRAM - Backup (Multiplier 8) 280 KB + * 0x0035_0000 TLS_Cert_Base 704 KB + * 0x0035_2000 TLS Certificate WPA_Enterprise 16 KB or Unused + * 0x0035_6000 TLS Certificate OTA_Update 16 KB or Unused + * 0x0035_A000 TLS Certificate HTTPs Client 16 KB or Unused + * 0x0035_E000 TLS Certificate HTTPs Server 16 KB or Unused + * 0x0036_2000 TLS Certificate MQTTs Client 16 KB or Unused + * 0x0036_6000 TLS Certificate CoAPs Client 16 KB or Unused + * 0x0036_A000 TLS Certificate CoAPs Server 16 KB or Unused + * 0x0036_E000 TLS Certificate AT-CMD #0 ~ #15 64 KB ( 4KB * 16 ) or Unused + * 0x003F_E000 Secure Asset Product Area 128 B or Unused + * .. 4MB ........................................................................ + * 0x0040_0000 User Area 3,964 KB + * 0x007F_F000 Partition Table 4 KB + * .. 8MB ........................................................................ + * + */ + +// Area size + #define SF_PRODUCT_HDR_SIZE 0x00001000 // 4 KB + #define SF_RTOS_SIZE 0x00280000 // 2,048 KB + 64 KB * 8 + + #define SF_NVRAM_SIZE 0x0000A000 // 40 KB + #define SF_NVRAM_AREA_SIZE 0x00050000 // 320 KB + + #define SF_SYS_TLS_CERT_SIZE 0x00004000 // 16 KB + #define SF_SYS_TLS_ADD_CERT_SIZE 0x00005000 // 20 KB + #define SF_ATCMD_TLS_CERT_SIZE 0x00010000 // 64 KB + #define SF_TLS_AREA_SIZE 0x000B0000 // 704 KB + + #define SF_SECURE_ASSET_SIZE 0x00001000 // 4 KB + #define SF_USER_AREA_SIZE_ORI 0x003FF000 // 4,092 KB + + #define SF_PARTITION_TBL_SIZE 0x00001000 // 4 KB + +// Defined SFLASH address + #define SF_BASE_ADDR 0x00000000 + #define SF_NVRAM_BASE_ADDR 0x00300000 + #define SF_ASSET_PROD_BASE_ADDR 0x003FE000 + #define SF_USER_AREA_BASE_ADDR 0x00400000 + + #define SF_PRODUCT_HDR (SF_BASE_ADDR) + #define SF_PRODUCT_HDR_BACKUP (SF_BASE_ADDR + SF_PRODUCT_HDR_SIZE) + #define SF_RTOS_0 (SF_PRODUCT_HDR_BACKUP + SF_PRODUCT_HDR_SIZE) + + #define SF_TLS_CERT_BASE_ADDR (SF_NVRAM_AREA + SF_NVRAM_AREA_SIZE) + #define SF_TLS_CERT_WPA_ENT (SF_TLS_CERT_BASE_ADDR) + #define SF_TLS_CERT_OTA (SF_TLS_CERT_WPA_ENT + (SF_SYS_TLS_CERT_SIZE * CERT_WPA_ENT_USED)) + #define SF_TLS_CERT_HTTPS_CLI (SF_TLS_CERT_OTA + (SF_SYS_TLS_CERT_SIZE * CERT_OTA_USED)) + #define SF_TLS_CERT_HTTPS_SVR (SF_TLS_CERT_HTTPS_CLI + (SF_SYS_TLS_CERT_SIZE * CERT_HTTPS_CLI_USED)) + #define SF_TLS_CERT_MQTTS_CLI (SF_TLS_CERT_HTTPS_SVR + (SF_SYS_TLS_CERT_SIZE * CERT_HTTPS_SVR_USED)) + #define SF_TLS_CERT_ATCMD (SF_TLS_CERT_MQTTS_CLI + (SF_SYS_TLS_CERT_SIZE * CERT_MQTTS_CLI_USED)) + #define SF_TLS_CERT_AWS (SF_TLS_CERT_ATCMD + (SF_ATCMD_TLS_CERT_SIZE * CERT_ATCMD_USED)) + #define SF_TLS_CERT_MATTER (SF_TLS_CERT_AWS + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_AWS_USED)) + #define SF_TLS_CERT_MISC1 (SF_TLS_CERT_MATTER + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MATTER_USED)) + #define SF_TLS_CERT_MISC2 (SF_TLS_CERT_MISC1 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC1_USED)) + #define SF_TLS_CERT_MISC3 (SF_TLS_CERT_MISC2 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC2_USED)) + #define SF_TLS_CERT_MISC4 (SF_TLS_CERT_MISC3 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC3_USED)) + #define SF_TLS_CERT_MISC5 (SF_TLS_CERT_MISC4 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC4_USED)) + #define SF_TLS_CERT_MISC6 (SF_TLS_CERT_MISC5 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC5_USED)) + #define SF_TLS_CERT_MISC7 (SF_TLS_CERT_MISC6 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC6_USED)) + #define SF_TLS_CERT_MISC8 (SF_TLS_CERT_MISC7 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC7_USED) + + #define SF_NVRAM_AREA (SF_NVRAM_BASE_ADDR) + #define SF_NVRAM_BACKUP_AREA (SF_NVRAM_AREA + SF_NVRAM_SIZE) + + #define SF_SECURE_ASSET_PROD (SF_ASSET_PROD_BASE_ADDR) + + #define SF_USER_AREA (SF_USER_AREA_BASE_ADDR) + #define SF_USER_AREA_SIZE (SF_USER_AREA_SIZE_ORI) + + #define SF_PARTITION_TBL (SF_USER_AREA + SF_USER_AREA_SIZE) // Fixed - Mandatory + #define SF_END (SF_PARTITION_TBL + SF_PARTITION_TBL_SIZE) + +#elif defined(NORMAL_4MB_OTA) // =============================================================== + +/* + * < RA6W1 Normal 4MB SFALSH Map - w/ OTA > + * + * ............................................................................... + * 0x0000_0000 Product Header 4 KB + * 0x0000_1000 Product Header - Backup 4 KB + * 0x0000_2000 RTOS #0 1,792 KB + * 0x001C_2000 TLS_Cert_Base 208 KB + * 0x001C_2000 TLS Certificate WPA_Enterprise 16 KB or Unused + * 0x001C_6000 TLS Certificate OTA_Update 16 KB or Unused + * 0x001C_A000 TLS Certificate HTTPs Client 16 KB or Unused + * 0x001C_E000 TLS Certificate HTTPs Server 16 KB or Unused + * 0x001D_2000 TLS Certificate MQTTs Client 16 KB or Unused + * 0x001D_6000 TLS Certificate CoAPs Client 16 KB or Unused + * 0x001D_A000 TLS Certificate CoAPs Server 16 KB or Unused + * 0x001D_E000 TLS Certificate AT-CMD #0 ~ #15 64 KB ( 4KB * 16 ) or Unused + * 0x001F_6000 NVRAM 20 KB + * 0x001F_B000 NVRAM - Backup 20 KB + * ............................................................................... + * 0x0020_0000 RTOS #1 1,792 KB + * ............................................................................... + * 0x003C_0000 User Area 248 KB + * 0x003F_E000 Secure Asset Product Area 4 KB + * 0x003F_F000 Partition Table 4 KB + * ............................................................................... + */ + +// Area size + #define SF_PRODUCT_HDR_SIZE 0x00001000 // 4 KB + #define SF_RTOS_SIZE 0x001C0000 // 1,792 KB + #define SF_SYS_TLS_CERT_SIZE 0x00004000 // 16 KB + #define SF_SYS_TLS_ADD_CERT_SIZE 0x00005000 // 20 KB + #define SF_ATCMD_TLS_CERT_SIZE 0x00010000 // 64 KB + #define SF_TLS_AREA_SIZE 0x00034000 // 208 KB + #define SF_NVRAM_SIZE 0x00005000 // 20 KB + #define SF_SECURE_ASSET_SIZE 0x00001000 // 4 KB + #define SF_USER_AREA_SIZE_ORI 0x0003E000 // 248 KB + #define SF_PARTITION_TBL_SIZE 0x00001000 // 4 KB + +// Defined SFLASH address + #define SF_BASE_ADDR 0x00000000 + #define SF_ASSET_PROD_BASE_ADDR 0x003FE000 + + #define SF_PRODUCT_HDR (SF_BASE_ADDR) + #define SF_PRODUCT_HDR_BACKUP (SF_BASE_ADDR + SF_PRODUCT_HDR_SIZE) + #define SF_RTOS_0 (SF_PRODUCT_HDR_BACKUP + SF_PRODUCT_HDR_SIZE) + + #define SF_TLS_CERT_BASE_ADDR (SF_RTOS_0 + SF_RTOS_SIZE) + #define SF_TLS_CERT_WPA_ENT (SF_TLS_CERT_BASE_ADDR) + #define SF_TLS_CERT_OTA (SF_TLS_CERT_WPA_ENT + (SF_SYS_TLS_CERT_SIZE * CERT_WPA_ENT_USED)) + #define SF_TLS_CERT_HTTPS_CLI (SF_TLS_CERT_OTA + (SF_SYS_TLS_CERT_SIZE * CERT_OTA_USED)) + #define SF_TLS_CERT_HTTPS_SVR (SF_TLS_CERT_HTTPS_CLI + (SF_SYS_TLS_CERT_SIZE * CERT_HTTPS_CLI_USED)) + #define SF_TLS_CERT_MQTTS_CLI (SF_TLS_CERT_HTTPS_SVR + (SF_SYS_TLS_CERT_SIZE * CERT_HTTPS_SVR_USED)) + #define SF_TLS_CERT_ATCMD (SF_TLS_CERT_MQTTS_CLI + (SF_SYS_TLS_CERT_SIZE * CERT_MQTTS_CLI_USED)) + #define SF_TLS_CERT_AWS (SF_TLS_CERT_ATCMD + (SF_ATCMD_TLS_CERT_SIZE * CERT_ATCMD_USED)) + #define SF_TLS_CERT_MATTER (SF_TLS_CERT_AWS + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_AWS_USED)) + #define SF_TLS_CERT_MISC1 (SF_TLS_CERT_MATTER + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MATTER_USED)) + #define SF_TLS_CERT_MISC2 (SF_TLS_CERT_MISC1 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC1_USED)) + #define SF_TLS_CERT_MISC3 (SF_TLS_CERT_MISC2 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC2_USED)) + #define SF_TLS_CERT_MISC4 (SF_TLS_CERT_MISC3 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC3_USED)) + #define SF_TLS_CERT_MISC5 (SF_TLS_CERT_MISC4 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC4_USED)) + #define SF_TLS_CERT_MISC6 (SF_TLS_CERT_MISC5 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC5_USED)) + #define SF_TLS_CERT_MISC7 (SF_TLS_CERT_MISC6 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC6_USED)) + #define SF_TLS_CERT_MISC8 (SF_TLS_CERT_MISC7 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC7_USED) + + #define SF_NVRAM_AREA (SF_TLS_CERT_BASE_ADDR + SF_TLS_AREA_SIZE) + #define SF_NVRAM_BACKUP_AREA (SF_NVRAM_AREA + SF_NVRAM_SIZE) + + #define SF_RTOS_1 (SF_NVRAM_BACKUP_AREA + SF_NVRAM_SIZE) + + #define SF_SECURE_ASSET_PROD (SF_ASSET_PROD_BASE_ADDR) + + #define SF_USER_AREA_BASE (SF_RTOS_1 + SF_RTOS_SIZE) + + #define SF_USER_AREA (SF_USER_AREA_BASE) + #define SF_USER_AREA_SIZE (SF_USER_AREA_SIZE_ORI) + + #define SF_PARTITION_TBL (SF_USER_AREA + SF_USER_AREA_SIZE) + #define SF_END (SF_PARTITION_TBL + SF_PARTITION_TBL_SIZE) + +#elif defined(NORMAL_4MB) // ================================================================ + +/* + * < RA6W1 Normal 4MB SFALSH Map - w/o OTA > + * + * ............................................................................... + * 0x0000_0000 Product Header 4 KB + * 0x0000_1000 Product Header - Backup 4 KB + * 0x0000_2000 RTOS #0 1,792 KB + * 0x001C_2000 TLS_Cert_Base 208 KB + * 0x001C_2000 TLS Certificate WPA_Enterprise 16 KB or Unused + * 0x001C_6000 TLS Certificate OTA_Update 16 KB or Unused + * 0x001C_A000 TLS Certificate HTTPs Client 16 KB or Unused + * 0x001C_E000 TLS Certificate HTTPs Server 16 KB or Unused + * 0x001D_2000 TLS Certificate MQTTs Client 16 KB or Unused + * 0x001D_6000 TLS Certificate CoAPs Client 16 KB or Unused + * 0x001D_A000 TLS Certificate CoAPs Server 16 KB or Unused + * 0x001D_E000 TLS Certificate AT-CMD #0 ~ #15 64 KB ( 4KB * 16 ) or Unused + * 0x001F_6000 NVRAM 20 KB + * 0x001F_B000 NVRAM - Backup 20 KB + * ............................................................................... + * 0x0020_0000 User Area 2,040 KB + * 0x003F_E000 Secure Asset Product Area 4 KB + * 0x003F_F000 Partition Table 4 KB + * ............................................................................... + */ + +// Area size + #define SF_PRODUCT_HDR_SIZE 0x00001000 // 4 KB + #define SF_RTOS_SIZE 0x001C0000 // 1,792 KB + #define SF_SYS_TLS_CERT_SIZE 0x00004000 // 16 KB + #define SF_SYS_TLS_ADD_CERT_SIZE 0x00005000 // 20 KB + #define SF_ATCMD_TLS_CERT_SIZE 0x00010000 // 64 KB + #define SF_TLS_AREA_SIZE 0x00034000 // 208 KB + #define SF_NVRAM_SIZE 0x00005000 // 20 KB + #define SF_SECURE_ASSET_SIZE 0x00001000 // 4 KB + #define SF_USER_AREA_SIZE_ORI 0x0023E000 // 2,044 KB + #define SF_PARTITION_TBL_SIZE 0x00001000 // 4 KB + +// Defined SFLASH address + #define SF_BASE_ADDR 0x00000000 + #define SF_ASSET_PROD_BASE_ADDR 0x003FE000 + + #define SF_PRODUCT_HDR (SF_BASE_ADDR) + #define SF_PRODUCT_HDR_BACKUP (SF_BASE_ADDR + SF_PRODUCT_HDR_SIZE) + #define SF_RTOS_0 (SF_PRODUCT_HDR_BACKUP + SF_PRODUCT_HDR_SIZE) + + #define SF_TLS_CERT_BASE_ADDR (SF_RTOS_0 + SF_RTOS_SIZE) + #define SF_TLS_CERT_WPA_ENT (SF_TLS_CERT_BASE_ADDR) + #define SF_TLS_CERT_OTA (SF_TLS_CERT_WPA_ENT + (SF_SYS_TLS_CERT_SIZE * CERT_WPA_ENT_USED)) + #define SF_TLS_CERT_HTTPS_CLI (SF_TLS_CERT_OTA + (SF_SYS_TLS_CERT_SIZE * CERT_OTA_USED)) + #define SF_TLS_CERT_HTTPS_SVR (SF_TLS_CERT_HTTPS_CLI + (SF_SYS_TLS_CERT_SIZE * CERT_HTTPS_CLI_USED)) + #define SF_TLS_CERT_MQTTS_CLI (SF_TLS_CERT_HTTPS_SVR + (SF_SYS_TLS_CERT_SIZE * CERT_HTTPS_SVR_USED)) + #define SF_TLS_CERT_ATCMD (SF_TLS_CERT_MQTTS_CLI + (SF_SYS_TLS_CERT_SIZE * CERT_MQTTS_CLI_USED)) + #define SF_TLS_CERT_AWS (SF_TLS_CERT_ATCMD + (SF_ATCMD_TLS_CERT_SIZE * CERT_ATCMD_USED)) + #define SF_TLS_CERT_MATTER (SF_TLS_CERT_AWS + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_AWS_USED)) + #define SF_TLS_CERT_MISC1 (SF_TLS_CERT_MATTER + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MATTER_USED)) + #define SF_TLS_CERT_MISC2 (SF_TLS_CERT_MISC1 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC1_USED)) + #define SF_TLS_CERT_MISC3 (SF_TLS_CERT_MISC2 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC2_USED)) + #define SF_TLS_CERT_MISC4 (SF_TLS_CERT_MISC3 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC3_USED)) + #define SF_TLS_CERT_MISC5 (SF_TLS_CERT_MISC4 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC4_USED)) + #define SF_TLS_CERT_MISC6 (SF_TLS_CERT_MISC5 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC5_USED)) + #define SF_TLS_CERT_MISC7 (SF_TLS_CERT_MISC6 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC6_USED)) + #define SF_TLS_CERT_MISC8 (SF_TLS_CERT_MISC7 + (SF_SYS_TLS_ADD_CERT_SIZE * CERT_MISC7_USED) + + #define SF_NVRAM_AREA (SF_TLS_CERT_BASE_ADDR + SF_TLS_AREA_SIZE) + #define SF_NVRAM_BACKUP_AREA (SF_NVRAM_AREA + SF_NVRAM_SIZE) + + #define SF_SECURE_ASSET_PROD (SF_ASSET_PROD_BASE_ADDR) + + #define SF_USER_AREA_BASE (SF_NVRAM_BACKUP_AREA + SF_NVRAM_SIZE) + + #define SF_USER_AREA (SF_USER_AREA_BASE) + #define SF_USER_AREA_SIZE (SF_USER_AREA_SIZE_ORI) + + #define SF_PARTITION_TBL (SF_USER_AREA + SF_USER_AREA_SIZE) // Fixed - Mandatory + #define SF_END (SF_PARTITION_TBL + SF_PARTITION_TBL_SIZE) + +#else // Undefind SFLASH type ===================================================================== + + #error "Not defined SFLASH type/map !!!" + +#endif // __DEFAULT_4MB_SFLASH__ ================================================================== + +/* TLS Certificate detailed addresses */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate WPA_ENT */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#define SF_TLS_CERT_WPA_ENT_CA_ADDR SF_TLS_CERT_WPA_ENT +#define SF_TLS_CERT_WPA_ENT_CERTIFICATE_ADDR (SF_TLS_CERT_WPA_ENT_CA_ADDR + 0x1000) +#define SF_TLS_CERT_WPA_ENT_PRIVATE_KEY_ADDR (SF_TLS_CERT_WPA_ENT_CA_ADDR + 0x2000) +#define SF_TLS_CERT_WPA_ENT_DH_PARAMETER_ADDR (SF_TLS_CERT_WPA_ENT_CA_ADDR + 0x3000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate OTA */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_OTA_CA_ADDR SF_TLS_CERT_OTA +#define SF_TLS_CERT_OTA_CERTIFICATE_ADDR (SF_TLS_CERT_OTA_CA_ADDR + 0x1000) +#define SF_TLS_CERT_OTA_PRIVATE_KEY_ADDR (SF_TLS_CERT_OTA_CA_ADDR + 0x2000) +#define SF_TLS_CERT_OTA_DH_PARAMETER_ADDR (SF_TLS_CERT_OTA_CA_ADDR + 0x3000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Key HTTPS_CLI */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_HTTPS_CLI_CA_ADDR SF_TLS_CERT_HTTPS_CLI +#define SF_TLS_CERT_HTTPS_CLI_CERTIFICATE_ADDR (SF_TLS_CERT_HTTPS_CLI_CA_ADDR + 0x1000) +#define SF_TLS_CERT_HTTPS_CLI_PRIVATE_KEY_ADDR (SF_TLS_CERT_HTTPS_CLI_CA_ADDR + 0x2000) +#define SF_TLS_CERT_HTTPS_CLI_DH_PARAMETER_ADDR (SF_TLS_CERT_HTTPS_CLI_CA_ADDR + 0x3000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate HTTPS_SVR */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_HTTPS_SVR_CA_ADDR SF_TLS_CERT_HTTPS_SVR +#define SF_TLS_CERT_HTTPS_SVR_CERTIFICATE_ADDR (SF_TLS_CERT_HTTPS_SVR_CA_ADDR + 0x1000) +#define SF_TLS_CERT_HTTPS_SVR_PRIVATE_KEY_ADDR (SF_TLS_CERT_HTTPS_SVR_CA_ADDR + 0x2000) +#define SF_TLS_CERT_HTTPS_SVR_DH_PARAMETER_ADDR (SF_TLS_CERT_HTTPS_SVR_CA_ADDR + 0x3000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Key MQTT_CLI */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MQTT_CLI_CA_ADDR SF_TLS_CERT_MQTTS_CLI +#define SF_TLS_CERT_MQTT_CLI_CERTIFICATE_ADDR (SF_TLS_CERT_MQTT_CLI_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MQTT_CLI_PRIVATE_KEY_ADDR (SF_TLS_CERT_MQTT_CLI_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MQTT_CLI_DH_PARAMETER_ADDR (SF_TLS_CERT_MQTT_CLI_CA_ADDR + 0x3000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate ATCMD */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SFLASH_ATCMD_TLS_CERT_01 (SF_TLS_CERT_ATCMD) +#define SFLASH_ATCMD_TLS_CERT_02 (SFLASH_ATCMD_TLS_CERT_01 + 0x1000) +#define SFLASH_ATCMD_TLS_CERT_03 (SFLASH_ATCMD_TLS_CERT_01 + 0x2000) +#define SFLASH_ATCMD_TLS_CERT_04 (SFLASH_ATCMD_TLS_CERT_01 + 0x3000) +#define SFLASH_ATCMD_TLS_CERT_05 (SFLASH_ATCMD_TLS_CERT_01 + 0x4000) +#define SFLASH_ATCMD_TLS_CERT_06 (SFLASH_ATCMD_TLS_CERT_01 + 0x5000) +#define SFLASH_ATCMD_TLS_CERT_07 (SFLASH_ATCMD_TLS_CERT_01 + 0x6000) +#define SFLASH_ATCMD_TLS_CERT_08 (SFLASH_ATCMD_TLS_CERT_01 + 0x7000) +#define SFLASH_ATCMD_TLS_CERT_09 (SFLASH_ATCMD_TLS_CERT_01 + 0x8000) +#define SFLASH_ATCMD_TLS_CERT_10 (SFLASH_ATCMD_TLS_CERT_01 + 0x9000) +#define SFLASH_ATCMD_TLS_CERT_11 (SFLASH_ATCMD_TLS_CERT_01 + 0xA000) +#define SFLASH_ATCMD_TLS_CERT_12 (SFLASH_ATCMD_TLS_CERT_01 + 0xB000) +#define SFLASH_ATCMD_TLS_CERT_13 (SFLASH_ATCMD_TLS_CERT_01 + 0xC000) +#define SFLASH_ATCMD_TLS_CERT_14 (SFLASH_ATCMD_TLS_CERT_01 + 0xD000) +#define SFLASH_ATCMD_TLS_CERT_15 (SFLASH_ATCMD_TLS_CERT_01 + 0xE000) +#define SFLASH_ATCMD_TLS_CERT_16 (SFLASH_ATCMD_TLS_CERT_01 + 0xF000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate AWS */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_AWS_CA_ADDR SF_TLS_CERT_AWS +#define SF_TLS_CERT_AWS_INITIAL_CERT_ADDR (SF_TLS_CERT_AWS_CA_ADDR + 0x1000) +#define SF_TLS_CERT_AWS_INITIAL_PRIV_KEY_ADDR (SF_TLS_CERT_AWS_CA_ADDR + 0x2000) +#define SF_TLS_CERT_AWS_UNIQUE_CERT_ADDR (SF_TLS_CERT_AWS_CA_ADDR + 0x3000) +#define SF_TLS_CERT_AWS_UNIQUE_PRIV_KEY_ADDR (SF_TLS_CERT_AWS_CA_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate MATTER */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_MATTER_CERT_CD_ADDR SF_TLS_CERT_MATTER +#define SF_MATTER_CERT_DAC_CERTIFICATE_ADDR (SF_MATTER_CERT_CD_ADDR + 0x1000) +#define SF_MATTER_CERT_PAI_CERTIFICATE_ADDR (SF_MATTER_CERT_CD_ADDR + 0x2000) +#define SF_MATTER_CERT_DAC_PRIVATE_KEY_ADDR (SF_MATTER_CERT_CD_ADDR + 0x3000) +#define SF_MATTER_CERT_DAC_PUBLIC_KEY_ADDR (SF_MATTER_CERT_CD_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Miscellanoeous Application 1 */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MISC1_CA_ADDR SF_TLS_CERT_MISC1 +#define SF_TLS_CERT_MISC1_CERTIFICATE_ADDR (SF_TLS_CERT_MISC1_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MISC1_PRIVATE_KEY_ADDR (SF_TLS_CERT_MISC1_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MISC1_DH_PARAMETER_ADDR (SF_TLS_CERT_MISC1_CA_ADDR + 0x3000) +#define SF_TLS_CERT_MISC1_EXCHANGE_ADDR (SF_TLS_CERT_MISC1_CA_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Miscellanoeous Application 2 */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MISC2_CA_ADDR SF_TLS_CERT_MISC2 +#define SF_TLS_CERT_MISC2_CERTIFICATE_ADDR (SF_TLS_CERT_MISC2_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MISC2_PRIVATE_KEY_ADDR (SF_TLS_CERT_MISC2_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MISC2_DH_PARAMETER_ADDR (SF_TLS_CERT_MISC2_CA_ADDR + 0x3000) +#define SF_TLS_CERT_MISC2_EXCHANGE_ADDR (SF_TLS_CERT_MISC2_CA_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Miscellanoeous Application 3 */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MISC3_CA_ADDR SF_TLS_CERT_MISC3 +#define SF_TLS_CERT_MISC3_CERTIFICATE_ADDR (SF_TLS_CERT_MISC3_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MISC3_PRIVATE_KEY_ADDR (SF_TLS_CERT_MISC3_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MISC3_DH_PARAMETER_ADDR (SF_TLS_CERT_MISC3_CA_ADDR + 0x3000) +#define SF_TLS_CERT_MISC3_EXCHANGE_ADDR (SF_TLS_CERT_MISC3_CA_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Miscellanoeous Application 4 */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MISC4_CA_ADDR SF_TLS_CERT_MISC4 +#define SF_TLS_CERT_MISC4_CERTIFICATE_ADDR (SF_TLS_CERT_MISC4_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MISC4_PRIVATE_KEY_ADDR (SF_TLS_CERT_MISC4_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MISC4_DH_PARAMETER_ADDR (SF_TLS_CERT_MISC4_CA_ADDR + 0x3000) +#define SF_TLS_CERT_MISC4_EXCHANGE_ADDR (SF_TLS_CERT_MISC4_CA_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Miscellanoeous Application 5 */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MISC5_CA_ADDR SF_TLS_CERT_MISC5 +#define SF_TLS_CERT_MISC5_CERTIFICATE_ADDR (SF_TLS_CERT_MISC5_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MISC5_PRIVATE_KEY_ADDR (SF_TLS_CERT_MISC5_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MISC5_DH_PARAMETER_ADDR (SF_TLS_CERT_MISC5_CA_ADDR + 0x3000) +#define SF_TLS_CERT_MISC5_EXCHANGE_ADDR (SF_TLS_CERT_MISC5_CA_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Miscellanoeous Application 6 */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MISC6_CA_ADDR SF_TLS_CERT_MISC6 +#define SF_TLS_CERT_MISC6_CERTIFICATE_ADDR (SF_TLS_CERT_MISC6_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MISC6_PRIVATE_KEY_ADDR (SF_TLS_CERT_MISC6_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MISC6_DH_PARAMETER_ADDR (SF_TLS_CERT_MISC6_CA_ADDR + 0x3000) +#define SF_TLS_CERT_MISC6_EXCHANGE_ADDR (SF_TLS_CERT_MISC6_CA_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Miscellanoeous Application 7 */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MISC7_CA_ADDR SF_TLS_CERT_MISC7 +#define SF_TLS_CERT_MISC7_CERTIFICATE_ADDR (SF_TLS_CERT_MISC7_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MISC7_PRIVATE_KEY_ADDR (SF_TLS_CERT_MISC7_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MISC7_DH_PARAMETER_ADDR (SF_TLS_CERT_MISC7_CA_ADDR + 0x3000) +#define SF_TLS_CERT_MISC7_EXCHANGE_ADDR (SF_TLS_CERT_MISC7_CA_ADDR + 0x4000) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/* TLS Certificate Miscellanoeous Application 8 */ + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define SF_TLS_CERT_MISC8_CA_ADDR SF_TLS_CERT_MISC8 +#define SF_TLS_CERT_MISC8_CERTIFICATE_ADDR (SF_TLS_CERT_MISC8_CA_ADDR + 0x1000) +#define SF_TLS_CERT_MISC8_PRIVATE_KEY_ADDR (SF_TLS_CERT_MISC8_CA_ADDR + 0x2000) +#define SF_TLS_CERT_MISC8_DH_PARAMETER_ADDR (SF_TLS_CERT_MISC8_CA_ADDR + 0x3000) +#define SF_TLS_CERT_MISC8_EXCHANGE_ADDR (SF_TLS_CERT_MISC8_CA_ADDR + 0x4000) +#endif /* __BSP_SFLASH_MAP_RA6W1_H__ */ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_undisclosed_defs.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_undisclosed_defs.h new file mode 100644 index 000000000000..8c54a8c4125b --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/bsp_undisclosed_defs.h @@ -0,0 +1,65 @@ +/** + **************************************************************************************** + * + * @file bsp_undisclosed_defs.h + * + * @brief + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef BSP_UNDISCLOSED_DEFS_H_ +#define BSP_UNDISCLOSED_DEFS_H_ + +#ifdef BSP_UNDISCLOSED_SANITY_CHECK + +/* Add more defs, if needed, above dg_configUNDISCLOSED_LAST_DEF */ + + #if defined(dg_configUNDISCLOSED_HAPTIC_DIAGN_CONFIG) || \ + defined(dg_configUNDISCLOSED_UNSUPPORTED_FLASH_DEVICES) || \ + defined(dg_configUNDISCLOSED_LAST_DEF) || \ + defined(dg_configAUTOTEST_ENABLE) + + #error "dg_configUNDISCLOSED_XXX cannot be defined!!!" + #endif + +#endif /* BSP_UNDISCLOSED_SANITY_CHECK */ + +/* Enable Haptic diagnostic signals. */ +#ifndef dg_configUNDISCLOSED_HAPTIC_DIAGN_CONFIG + #define dg_configUNDISCLOSED_HAPTIC_DIAGN_CONFIG (0) +#endif + +/* Enable qspi-flash driver modules not supported officially by the SDK. */ +#ifndef dg_configUNDISCLOSED_UNSUPPORTED_FLASH_DEVICES + #define dg_configUNDISCLOSED_UNSUPPORTED_FLASH_DEVICES (0) +#endif + +/* Enable AUTOTEST. */ +#ifndef dg_configAUTOTEST_ENABLE + #define dg_configAUTOTEST_ENABLE (0) +#endif + +#endif /* BSP_UNDISCLOSED_DEFS_H_ */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/custom_config_sdk.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/custom_config_sdk.h new file mode 100644 index 000000000000..0164850e4732 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/custom_config_sdk.h @@ -0,0 +1,752 @@ +/** + **************************************************************************************** + * + * @file custom_config_sdk.h + * + * @brief Configuration for Generic-SDK + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __CUSTOM_CONFIG_SDK_H__ +#define __CUSTOM_CONFIG_SDK_H__ + +/// Global Define : Chipset Model +#if (TIN_SKU_BUILD_ID == TIN_SKU_WIFI6_B24_5_BLE || (defined(BSP_MCU_RRQ61051_208) || defined(BSP_MCU_RRQ61051_408))) + #define CHIPSET_NAME "RA6W2-RRQ61051" +#else + #define CHIPSET_NAME "RA6W1-RRQ61001" +#endif /* TIN_SKU_BUILD_ID == TIN_SKU_WIFI6_B24_5_BLE || (BSP_MCU_RRQ61051_208 || BSP_MCU_RRQ61051_408) */ + +/// +/// Features for RA6W1/RA6W2 SDK +/// + +#if (SIGMA_TEST_APP == 1) + #define SIGMA_TEST_ENABLE + #define STA_CERT_ENABLE + #undef ATCMD_IF_SUPPORT + #undef ATCMD_SECURE_CHANNEL +#endif + +// SDK Name +// Show the kind of SDK displayed by the "ver" command in the console. +// +// - SDK Version : VX.Y.Z.R SDK_NAME +// +#undef SDK_NAME +#define SDK_NAME "" // Default No name tag. + +// SDK Version number +// Define the SDK version number by the "ver" command in the console. +// +// - SDK Version : X.M.Y.Z.R +// +// #define SDK_VER_PRODUCT_LINE X // SDK Product line number +// #define SDK_VER_MODE M // SDK Mode number (Standalone:0 / Linux Driver:1) +// #define SDK_VER_TARGET Y // SDK Target release +// #define SDK_VER_BRANCH Z // SDK Branch number +// #define SDK_VER_R R // SDK R&D build number +// +#include "sdk_ver.h" +#if (CFG_WIFI == 1) + #include "rm_wifi.h" +#endif + +/////////////////////////////////////////////////////////////////////// +// +// Software module features of RA6W1/RA6W2 SDK +// +/////////////////////////////////////////////////////////////////////// + +// ----------------------- +// HW Related Features +// ----------------------- + +// +// Enable/Disable WPS button +// +// To enable this feature, +// : EVK board configuration +// connect BTN2 to P0_12 (Default PIN, See EVK Board manual) +// : customer can change its configuration +// ~/sdk/bsp/config/boards/brd_io_config_rrq61x.h +// +#define __SUPPORT_WPS_BTN__ + +// +// Enable/Disable Factory Reset button +// +// To enable this feature, +// : EVK board configuration +// connect BTN1 to P0_13 (Default PIN, See EVK Board manual) +// : customer can change its configuration +// ~/sdk/bsp/config/boards/brd_io_config_rrq61x.h +// +#define __SUPPORT_FACTORY_RESET_BTN__ + +// +// Enable/Disable RF antenna share for Wi-Fi & BT co-existence +// +#undef __SUPPORT_BTCOEX__ + +// +// UART2 interface connect to MCU for AT-CMD +// This interface (UART2) initialize when AT-CMD module start... +// +// When enable this feature, +// customer can change the default values for UART2 +// - DEFAULT_UART_BAUD : 115,200bps +// - UART_BITPERCHAR : 8bits +// - UART_PARITY : No parity +// - UART_STOPBIT : 1 stopbit +// - UART_FLOW_CTRL : No flow-control +// +// : Or can change UART2 configuration values thought ATB command. +// See AT-CMD user manual. +#undef __SUPPORT_UART2__ + +// +// Enable/Disable OSPI sflash api +// Remove it after FSP merged +#ifndef RRQ61X_OSPI_W_ENABLED + #define RRQ61X_OSPI_W_ENABLED +#endif /* RRQ61X_OSPI_W_ENABLED */ + +// ----------------------- +// Wi-Fi Features +// ----------------------- + +// +// Support Wi-Fi WPA3-Personal features. ( SAE, OWE ) +// +// Note #1) See Wi-Fi specification to understand WPA3 SAE and OWE operation. +// Note #2) If "__SUPPORT_ATCMD__" is enabled, this feature is default enabled also. +// +// +#define __SUPPORT_WPA3_PERSONAL__ + +// +// Support Wi-Fi WPA Enterprise feature. +// +// This feature is internal feature in ~/library/libsupplicant.a +// When enable this feature, more detail features are support below sub-features. +// In sub-feature, WPA3-Enterprise feature will be selected. Default is Enable. +// +// Note) If "__SUPPORT_ATCMD__" is enabled, this feature is default enabled also. +// Refer to AT-CMD user's guide document for how to use it. +// +#define __SUPPORT_WPA_ENTERPRISE__ + +// +// Support customer call-back functions to notify Wi-Fi connection status. +// +// This features notify the Wi-Fi connection status through registered customer call-back function. +// - Wi-Fi connection status +// - Wi-Fi disconnection status +// - Wi-Fi connection failed status +// +// Customers can change these call-back function to whatever operation they want. +// - static void user_wifi_conn(void *arg) +// - static void user_wifi_conn_fail(void *arg) +// - static void user_wifi_disconn(void *arg) +// +// These functions are registered through the "void rm_wifi_register_wifi_notify_cb(void)" +// in ~/projects/rrq61x/rrq61x/src/user_app.c +// And when start the RA6W1/RA6W2, "register_wifi_notifi_cb()" is called in net_stack_init(). +// +// In case of enabled "AT-CMD feature", the RA6W1/RA6W2 notifies the connection status to MCU. +// Customer can check this function "atcmd_asynchony_event()" +// in ~/sdk/interfaces/wifi/system/src/at_cmd/atcmd.c +// These notification are reported through internal events operation. +// +// - STA connect OK +// : +WFJAP:1,TEST_SSID,IP_ADDR +// - STA connect Fail +// : +WFJAP:0,TIMEOUT +// : +WFJAP:0,WRONGPWD +// : +WFJAP:0,ACCESSLIMIT +// : +WFJAP:0,OTHER,reason_code +// - STA disconnect +// : +WFDAP:0,AUTH_NOT_VALID +// : +WFDAP:0,DEAUTH +// : +WFDAP:0,INACTIVITY +// : +WFDAP:0,APBUSY +// : +WFDAP:0,OTHER,reason_code +// +#undef __SUPPORT_WIFI_CONN_CB__ + +// +// Support Wi-Fi Concurrent-mode. +// +// Wi-Fi Concurrent mode means two interface will be enabled. +// One (wlan0) is STA and the other (wlan1) is Soft-AP. +// +// In easy-setup, three types of Wi-Fi operation mode will be provided. +// SYSMODE(WLAN MODE) ? +// 1. Station +// 2. Soft-AP +// 3. Station & SOFT-AP <= Wi-Fi Concurrent-mode +// MODE ? [1/2/3/Quit] (Default Station) : +// +#define __SUPPORT_WIFI_CONCURRENT__ + +// ----------------------- +// System Features +// ----------------------- + +// +// Fast Connection on SLEEP mode 2 +// +// Enable/Disable Fast-connection feature. +// This function is internal one and Customer just can select enable/disable when SDK rebuild. +// +// And AT-CMD mode, two AT-CMDs are supported to handle by MCU. +// : AT+GETFASTCONN +// : AT+SETFASTCONN +// +#define __SUPPORT_FAST_CONN_SLEEP_2__ + +// +// Support cipher suites of TLS session by H/W engine. +// +// When enable this feature, only HW cipher-suites of CC312 HW enbine are used to communicate for TLS. +// This operation set in each TLS application to start TLS operation. +// +// #if defined(__SUPPORT_TLS_HW_CIPHER_SUITES__) +// preset = MBEDTLS_SSL_PRESET_RRQ_HW; +// #endif /* __SUPPORT_TLS_HW_CIPHER_SUITES__ */ +#undef __SUPPORT_TLS_HW_CIPHER_SUITES__ + +// +// Enable/Disable AT-CMD module +// +// When this feature is enabled, more detailed sub-features are supported. +// Customer can check all AT-CMDs in ~/sdk/interfaces/wifi/system/src/at_cmd/atcmd.c +// +#if (ATCMD_IF_SUPPORT == 1) + #define __SUPPORT_ATCMD__ +#else + #undef __SUPPORT_ATCMD__ +#endif // (ATCMD_IF_SUPPORT == 1) + +// +// Support FAT filesystem +// +// Configurations are defined in ~/sdk/middleware/storage/fat/ffconf.h +#undef __SUPPORT_FAT_FS__ + +// ----------------------- +// Network Features +// ----------------------- + +// +// Support IPv6 feature +// Sub feature is defined in ~/sdk/interfaces/wifi/stack/lwip/src/include/lwipopts.h +// +#ifndef __SUPPORT_IPV4__ + #define __SUPPORT_IPV4__ 1 +#endif + +#ifndef __SUPPORT_IPV6__ + #define __SUPPORT_IPV6__ 1 +#endif + +// +// Support DHCP Server on the RA6W1/RA6W2 Soft-AP mode. +// +#define __SUPPORT_DHCP_SVR__ + +// +// Support SNTP Client feature +// +// This feature enable SNTP client to get current time from the defined Internet time server. +// +#if (CFG_WIFI == 1) + #define __SUPPORT_SNTP_CLIENT__ +#endif + +// +// Support Websocket Client +// +// This feature enable Websocket client to communicate with peer Websocket server. +// +#define __SUPPORT_WEBSOCKET_CLIENT__ + +// +// Support "nslookup" network utility +// +// This function is used to get IP-address from doman-name. +// Support console-command under "net" command layer. +// +// Default disabled. +// +#define __SUPPORT_NSLOOKUP__ + +// +// Support Auto-start HTTP server application when system starting. +// +// Customer can check this task in ~/core/system/src/common/main/sys_apps.c +// +// static const app_task_info_t sys_apps_table[] = { +// ... +// #if defined ( __HTTP_SVR_AUTO_START__ ) +// { APP_HTTP_SVR, auto_run_http_svr, 256, (OS_TASK_PRIORITY_NORMAL + 6), TRUE, FALSE, HTTP_SVR_PORT, RUN_AP_MODE }, +// #endif // __HTTP_SVR_AUTO_START__ +// +// Note) If "__SUPPORT_ATCMD__" is enabled, this feature is default enabled also. +// Refer to AT-CMD user's guide document for how to use it. +// +#undef __HTTP_SVR_AUTO_START__ + +// +// Support CLI command on Console for HTTP-Server operation +// This feature supports to check the operation status with console command. +// +// NET : Network +// ------- : -------------------------------- +// http-server : http-server -I [wlan0|wlan1] [start|stop] +// +// These commands operate with own IP-address and 80 port number as default. +// +#undef __SUPPORT_HTTP_SERVER_FOR_CLI__ + +// +// Support CLI command on Console for HTTP-Client operation +// This feature supports to check the operation status with console command. +// +// NET : Network +// ------- : -------------------------------- +// http-client : http-client help +// +// [/RRQ61000/NET] # http-client +// +// Usage: HTTP Client +// Name +// http-client - HTTP Client +// SYNOPSIS +// http-client [OPTION]...URL +// DESCRIPTION +// Request client's method to URL +// -i [wlan0|wlan1] +// Set interface of HTTP Client +// -status +// Display status of HTTP Client +// -help +// Display help +// -head +// Request HEAD method to URI +// -get +// Request GET method to URI +// -post RESOURCE +// Request POST method to URI with RESOURCE +// -put RESOURCE +// Request PUT method to URI with RESOURCE +// -incoming Size +// Set incoming buffer size of TLS Contents +// -outgoing Size +// Set outgoing buffer size of TLS Contents +// -sni +// Set SNI for TLS extension +// -alpn +// Set ALPN for TLS extension +// +#undef __SUPPORT_HTTP_CLIENT_FOR_CLI__ + +// +// Support DNS 2nd cache internally. +// +// This function supports semi-cache operation to reduce DNS query time. +// The address found as a new domain name is stored in the memory, +// and when a new DNS Query is performed, the address is first found in the cache area. +// This caching IP addresses are also save in NVRAM to reload when booting time. +// +// Stores up to 25 domain-names and IP address. +// The maximum length of domain name is 128 Bytes. +// +// Note) If this feature is enabled, +// do not use 4KB from SFLASH_USER_AREA_START area for other purpose. +// +#undef __DNS_2ND_CACHE_SUPPORT__ + +#ifdef __DNS_2ND_CACHE_SUPPORT__ + #undef __DNS_2ND_CACHE_INFO__ +#endif /* __DNS_2ND_CACHE_SUPPORT__ */ + +// +// Support "dns cache" info utility +// +// This function is for viewing DNS cache information. +// Support console-command under "net" command layer. +// +// Default disabled. +#undef __DNS_CACHE_INFO__ + +// +// Support User DHCP-client hostname function. +// +// This feature support to set user DHCP hostname rather than default value (RA6WX-XXYY). +// When enable this feature, console command is enabled. +// +// Note #1) This feature complies with RFCs(952, 1123). +// : RFCs(952, 1123) mandate that a hostname's labels may contain only +// the ASCII letters 'a' through 'z' (case-insensitive), +// the digits '0' through '9', and the hyphen. +// Hostname labels cannot begin or end with a hyphen. +// No other symbols, punctuation characters, or blank spaces are permitted. +// +// Note #2) If "__SUPPORT_ATCMD__" is enabled, this feature is default enabled also. +// +// - AT+NWDHCHN +// - AT+NWDHCHNDEL +// +// Refer to AT-CMD user's guide document for how to use it. +// +#undef __USER_DHCP_HOSTNAME__ + +// +// Support iPerf tool for network performance measurement. +// +// This test operation can operate using by console commands. +// +// Note) iPerf 2.X version is compatible but don't compatible with iPerf V3.X on peer device. +// +// [/RRQ61000/NET] # iperf -help +// Usage: iperf -I [WLAN0|WLAN1] [-s|-c host][options] +// iperf [-h] [-v] +// +// Client/Server: +// -I Interface [WLAN0|WLAN1] +// -i seconds between periodic bandwidth reports +// -u use UDP rather than TCP +// -p, # server port to listen on/connect to +// -f, [kmKM] format to report: Kbits, Mbits, KBytes, MBytes +// -d finsh service +// ex) iperf -I [wlan0|wlan1] -d -c -u : udp clinet +// iperf -I [wlan0|wlan1] -d -c : tcp clinet +// iperf -I [wlan0|wlan1] -d -u : udp server +// iperf -I [wlan0|wlan1] -d : tcp server +// +// Server specific: +// -s run in server mode +// -T # Rx Time Out Min:1 sec. 'F' Forever +// +// Client specific: +// -c run in client mode, connecting to +// -t # time in seconds to transmit for (default 10 secs) +// -x # tcp API mode default:basic tcp(API) 1:Altcp 2:Socket +// -y # Transmit delay, tick 1 ~ 100 +// -l # PacketSize option (UDP default 1470, IPv6 1448 TCP 1000) +// -n # UDP Tx packet number +// -P, # Pair Index (0,1,2) +// (default Max, Step 1~100 Mbps) +// -O use Main Packet Pool +// +// Miscellaneous: +// -h print this message +// -v print version +// +// Refer to "RA6W1/RA6W2 Getting Started Guide" document for more detailed information +// to use iPerf tool on the RA6W1/RA6W2. +// +#if (CFG_WIFI == 1) + #define __SUPPORT_IPERF__ // support iperf + #undef __SUPPORT_IPERF3__ // support iperf3 + #define __SUPPORT_WIFI_DBG__ // support wifi debug +#endif + +// +// Easy-setup on console +// +// Support CLI command on Console to create/save Wi-Fi connection profile in NVRAM. +// +#if CFG_WIFI +#define __SUPPORT_EASY_SETUP__ // Easy Setup application. +#endif +// ------------------- +// User Features +// ------------------- + +// +// User can set maximum size of http-client's tx buffer. (Default 4KB, Available 2KB~8KB) +// +// HTTPC_REQ_DATA_MAX_SIZE affects the size of TX_PAYLOAD_MAX_SIZE and USER_ATCMD_BUF defined in atcmd.h. +// TX_PAYLOAD_MAX_SIZE and USER_ATCMD_BUF must always be greater than HTTPC_REQ_DATA_MAX_SIZE. +// +// #define TX_PAYLOAD_MAX_SIZE HTTPC_REQ_DATA_MAX_SIZE +// #define USER_ATCMD_BUF (TX_PAYLOAD_MAX_SIZE + 32) +// +#define HTTPC_REQ_DATA_MAX_SIZE (1024 * 4) +#if (HTTPC_REQ_DATA_MAX_SIZE < (1024 * 2)) + #error "Supporting buffer size error : Too small !!!" +#elif (HTTPC_REQ_DATA_MAX_SIZE > (1024 * 8)) + #error "Supporting buffer size error : Too large !!!" +#endif + +/////////////////////////////////////////////////////////////////////// +// +// SUB-features for Generic-SDK +// +/////////////////////////////////////////////////////////////////////// +// + +#if !defined(RENESAS_AT25SL_8MB_OTA) && !defined(NORMAL_4MB_OTA) + #undef __SUPPORT_OTA__ +#endif // !RENESAS_AT25SL_8MB_OTA && !NORMAL_4MB_OTA + +#if defined(CONFIG_PLT_TEST) + #define __SUPPORT_PRODTEST__ + #ifndef __SUPPORT_ATCMD__ + #define __SUPPORT_ATCMD__ + #endif +#endif + +#if defined __SUPPORT_FAST_CONN_SLEEP_2__ + #define __SUPPORT_DHCPC_IP_TO_STATIC_IP__ + #undef __BOOT_CONN_TIME_PRINT__ +#endif // __SUPPORT_FAST_CONN_SLEEP_2__ + +#if defined(__SUPPORT_ATCMD__) + +// +// Default interface of RRQ61x EVK is UART2. +// Customer can change the type of host-interfaces among four types listed below. +// __ATCMD_IF_UART2__ / __ATCMD_IF_UART3__ / __ATCMD_IF_SPI__ / __ATCMD_IF_SDIO__ +// When one is enabled, the other 3 should be disabled. +// + #if (ATCMD_IF_SUPPORT == 1) + #undef __ATCMD_IF_UART2__ // AT-CMD over UART2 + #undef __ATCMD_IF_UART3__ // AT-CMD over UART3 + #undef __ATCMD_IF_SPI__ // AT-CMD over SPI + #undef __ATCMD_IF_SDIO__ // AT-CMD over SDIO + #else + +/* UART3 is dedicated to FSP, so UART2 is used for AT-CMD */ + #define __ATCMD_IF_UART2__ // AT-CMD over UART2 + #undef __ATCMD_IF_UART3__ // AT-CMD over UART3 + #undef __ATCMD_IF_SPI__ // AT-CMD over SPI + #undef __ATCMD_IF_SDIO__ // AT-CMD over SDIO + #endif // (ATCMD_IF_SUPPORT == 1) + + #define __SUPPORT_TCP_RECVDATA_HEX_MODE__ // Support AT+TCPDATAMODE command + #undef __ENABLE_TXFIFO_CHK_IN_LOW_BAUDRATE__ + #define __SUPPORT_NOTIFY_RTC_WAKEUP__ + #undef __USER_UART_CONFIG__ // Support Customer's UART configuration + + #undef __TRIGGER_DPM_MCU_WAKEUP__ // MCU Wakeup-triggering when DPM UC wakeup + #define __DPM_WAKEUP_NOTICE_ADDITIONAL__ // Report DPM Wakeup RTC/ETC + #undef __SUPPORT_DPM_ABNORM_MSG__ // Send message to MCU when wake-up from DPM Abnormal stat + #undef __SUPPORT_DPM_EXT_WU_MON__ // DPM monitor for External Wakeup + #if defined(__SUPPORT_DPM_EXT_WU_MON__) + #undef __SUPPORT_UC_WU_MON__ // DPM monitor for UC Wakeup + #endif // __SUPPORT_DPM_EXT_WU_MON__ + + #undef __DISABLE_ESC_DATA_ECHO__ // Echo ESC data input ( Data Tx Mode ) + #if defined(__DISABLE_ESC_DATA_ECHO__) + #define __ENABLE_ESC_DATA_DUMP__ // Tx Data dump on UART2 + #endif // __DISABLE_ESC_DATA_ECHO__ + + #undef __SUPPORT_HTTP_SERVER_FOR_ATCMD__ // HTTP server + #undef __SUPPORT_HTTP_SERVER_FOR_CLI__ + + #undef __SUPPORT_HTTP_CLIENT_FOR_ATCMD__ // HTTP client + #undef __SUPPORT_HTTP_CLIENT_FOR_CLI__ + +// +// Support User-format to send HTTP-Client request ( header + body ) +// +// When a customer requests an http-client using AT-CMD, +// the header format already defined in http_client.c is not used, but the header is written in free form. +// If there is data to be sent, such as PUT or POST, it can be configured in the form of header + data. +// +// This function is used by MCU through AT-CMDs. +// : AT+NWHTC=,message,'XXXXX' +// +// Note) Refer to AT-CMD user's guide document for how to use it. +// + #define __SUPPORT_HTTP_CLIENT_USER_MSG__ + + #define __SUPPORT_WPA3_PERSONAL__ // Wi-Fi WPA3-Personal ( SAE, OWE ) + #define __SUPPORT_WPA_ENTERPRISE__ // Wi-Fi WPA Enterprise + #define __SUPPORT_FAST_CONN_SLEEP_2__ + + #undef __ENABLE_TRANSFER_MNG__ // Ring-Buffer for throughput + #define __USER_DHCP_HOSTNAME__ // User DHCP-client hostname + #define __SUPPORT_DETAILED_ERR_CODE__ // Support detailed error code + + #define __SUPPORT_RSSI_CMD__ // AT+WFRSSI + #if (ATCMD_IF_SUPPORT == 1) + #define __SUPPORT_ATCMD_TLS__ // TLS session + #else + #undef __SUPPORT_ATCMD_TLS__ // TLS session + #endif // (ATCMD_IF_SUPPORT == 1) + #undef __SUPPORT_USER_CMD_HELP__ // User AT-CMD Help + #undef __SUPPORT_PERI_CTRL__ // Support LED/I2C/PWM/ADC over AT-CMD + #undef __SUPPORT_LMAC_RF_CMD__ // AT-CMDs for LMAC/RF + #undef __SUPPORT_PERI_CMD__ // AT-CMDs for peripheral devices + +// Reconfig for AT-CMD + #undef __SUPPORT_HELLO_WORLD__ +#endif // __SUPPORT_ATCMD__ + +// If RAM build mode then always enable LMAC RF CMDs ... +#if (dg_configCODE_LOCATION == NON_VOLATILE_IS_NONE) && defined(CONFIG_PLT_TEST) + #undef __SUPPORT_FAST_CONN_SLEEP_2__ + #undef __SUPPORT_OTA__ + #undef __SUPPORT_MQTT__ + #undef __SUPPORT_HTTP_SERVER_FOR_ATCMD__ // HTTP server + #undef __SUPPORT_HTTP_CLIENT_FOR_ATCMD__ // HTTP client + #undef __SUPPORT_WPA3_PERSONAL__ // Wi-Fi WPA3-Personal ( SAE, OWE ) + #undef __SUPPORT_WPA_ENTERPRISE__ // Wi-Fi WPA Enterprise +#endif + +#if defined(__SUPPORT_PRODTEST__) + #define __USER_UART_CONFIG__ // Set to default, not to read from NVRam + #define __SUPPORT_PRODTEST_CONSOLE__ // Enable if requires for quick test + #define __SUPPORT_TCS_CMD__ + #ifdef __SUPPORT_TCS_CMD__ + #define TEST_TCS_OTP // For test OTP + #endif + #ifndef __SUPPORT_LMAC_RF_CMD__ + #define __SUPPORT_LMAC_RF_CMD__ + #endif +#endif + +#if defined(__SUPPORT_BTCOEX__) + #undef __SUPPORT_BTCOEX_1PIN__ // 1PIN BTCOEX +#endif // __SUPPORT_BTCOEX__ + +#if defined(__SUPPORT_FACTORY_RESET_BTN__) + #define __SUPPORT_FACTORY_RST_APMODE__ // Factory reset AP-Mode + #undef __SUPPORT_FACTORY_RST_STAMODE__ // Factory reset STA-Mode +#endif // __SUPPORT_FACTORY_RESET_BTN__ + +#if defined(__SUPPORT_OTA__) + #undef __OTA_UPDATE_MCU_FW__ + #if defined(__OTA_UPDATE_MCU_FW__) && !defined(__ATCMD_IF_SPI__) && !defined(__ATCMD_IF_SDIO__) + #if (ATCMD_IF_SUPPORT == 1) + #undef __SUPPORT_UART2__ + #else + #define __SUPPORT_UART2__ + #endif // (ATCMD_IF_SUPPORT == 1) + #endif // __OTA_UPDATE_MCU_FW__ ... +#endif // __SUPPORT_OTA__ + +#if defined(__SUPPORT_WPA_ENTERPRISE__) + #define __SUPPORT_WPA3_ENTERPRISE__ + + #if defined(__SUPPORT_WPA3_ENTERPRISE__) + #define __SUPPORT_WPA3_ENTERPRISE_192B__ // Unsupported on RA6W1/RA6W2 + #endif // __SUPPORT_WPA3_ENTERPRISE__ +#endif /* __SUPPORT_WPA_ENTERPRISE__ */ + +#if defined(__SUPPORT_IPERF__) + #undef __IPERF_BANDWIDTH__ // Debug only + #undef __IPERF_PRINT_MIB__ // Print iPerf MIB Info. + #undef __LIB_IPERF_PRINT_MIB__ // Print iPerf MIB Info. +#endif // __SUPPORT_IPERF__ + +#if defined(__SUPPORT_EASY_SETUP__) + #define __SUPPORT_APP_CONSOLE_INPUT__ // Handle application's console input + #undef __SUPPORT_DFS_CH_IN_SOFTAP__ // Support DFS channel in SoftAP +#endif // __SUPPORT_EASY_SETUP__ + +#if defined(__SUPPORT_WPS_BTN__) || defined(__SUPPORT_FACTORY_RESET_BTN__) + +// +// Enable LED for WPS PBC and Factory Reset +// +// To enable this feature, +// : EVK board configuration +// connect LED0 to P1_14 (Default PIN, See EVK Board manual) +// : customer can change its configuration +// ~/sdk/bsp/config/boards/brd_io_config_rrq61x.h +// + #if defined (LED0) + #define __SUPPORT_EVK_LED__ + #endif + #define __SUPPORT_FACTORY_RST_CONCURR_MODE__ +#endif /* defined (__SUPPORT_WPS_BTN__) || defined (__SUPPORT_FACTORY_RESET_BTN__) */ + +/////////////////////////////////////////////////////////////////////// +// +// DEPENDENT-features for customer SDK +// +/////////////////////////////////////////////////////////////////////// + +#if defined(__SUPPORT_ATCMD__) + #if defined(__ATCMD_IF_SDIO__) + #undef __SUPPORT_WPS_BTN__ // WPS button + #undef __SUPPORT_FACTORY_RESET_BTN__ // Factory reset Button + #endif // __ATCMD_IF_SDIO__ + + #if defined(__SUPPORT_OTA__) + #define __OTA_UPDATE_MCU_FW__ + #if defined(__OTA_UPDATE_MCU_FW__) && !defined(__ATCMD_IF_SPI__) && !defined(__ATCMD_IF_SDIO__) + #if (ATCMD_IF_SUPPORT == 1) + #undef __SUPPORT_UART2__ + #else + #define __SUPPORT_UART2__ + #endif // (ATCMD_IF_SUPPORT == 1) + #endif // __OTA_UPDATE_MCU_FW__ + #endif // __SUPPORT_OTA__ + + #if defined(__SUPPORT_WIFI_PROVISIONING__) + #define __PROVISION_ATCMD__ // provisioining at cmd + #endif // __SUPPORT_WIFI_PROVISIONING__ + + #ifdef __SUPPORT_WEBSOCKET_CLIENT__ + #define __SUPPORT_WEBSOCKET_CLIENT_FOR_ATCMD__ + #endif // __SUPPORT_WEBSOCKET_CLIENT__ + + #if defined(__SUPPORT_LMAC_RF_CMD__) + #define __ENABLE_LMAC_CMD__ + #define __ENABLE_LMAC_TX_CMD__ + #define __ENABLE_RF_CMD__ + #endif // __SUPPORT_LMAC_RF_CMD__ +#endif // __SUPPORT_ATCMD__ + +#if defined(__SUPPORT_HTTP_SERVER_FOR_CLI__) || defined(__SUPPORT_HTTP_SERVER_FOR_ATCMD__) + #undef __HTTP_SVR_AUTO_START__ +#endif // __SUPPORT_HTTP_SERVER_FOR_CLI__ || __SUPPORT_HTTP_SERVER_FOR_ATCMD__ + +//////////////////////////////////////////////////////////////////////////// +// +// !!! Notice !!! +// Do not remove this line and do not move the location in this file. +// + +#include "sys_feature_sdk.h" + +//////////////////////////////////////////////////////////////////////////// + +#if (CFG_WIFI == 0) + #undef __SUPPORT_SNTP_CLIENT__ + #undef __SUPPORT_P2P__ +#endif + +#endif // __CUSTOM_CONFIG_SDK_H__ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/sdk_ver.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/sdk_ver.h new file mode 100644 index 000000000000..abb06b8f97ac --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/sdk_ver.h @@ -0,0 +1,66 @@ +/** + **************************************************************************************** + * + * @file sdk_ver.h + * + * @brief Configuration for SDK Version + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __SDK_VER_H__ +#define __SDK_VER_H__ + +// SDK Version number +#undef SDK_VER_PRODUCT_LINE +#undef SDK_VER_MODE +#undef SDK_VER_TARGET +#if (TIN_SKU_BUILD_ID == TIN_SKU_WIFI6_B24_5_BLE || (defined (BSP_MCU_RRQ61051_208) || defined (BSP_MCU_RRQ61051_408))) + #define SDK_VER_PRODUCT_LINE 8 // SDK Product line number + #define SDK_VER_MODE 0 // SDK Mode number (Standalone:0 / Linux Driver:1) + #define SDK_VER_TARGET 3 // SDK Target release + #define SDK_VER_BRANCH 0 // SDK Branch number + #define SDK_VER_R 6 // SDK R&D build number +#else + #define SDK_VER_PRODUCT_LINE 8 // SDK Product line number + #define SDK_VER_MODE 0 // SDK Mode number (Standalone:0 / Linux Driver:1) + #define SDK_VER_TARGET 3 // SDK Target release + #define SDK_VER_BRANCH 0 // SDK Branch number + #define SDK_VER_R 6 // SDK R&D build number +#endif /* TIN_SKU_BUILD_ID == TIN_SKU_WIFI6_B24_5_BLE || (BSP_MCU_RRQ61051_208 || BSP_MCU_RRQ61051_408) */ + +#ifdef SIGMA_TEST_ENABLE +#define t_XSTR(i) #i +#define t_STR(i) t_XSTR(i) +#define SIGMA_SDK_VERSION (t_STR(SDK_VER_PRODUCT_LINE) "." \ + t_STR(SDK_VER_MODE) "." \ + t_STR(SDK_VER_TARGET) "." \ + t_STR(SDK_VER_BRANCH) "." \ + t_STR(SDK_VER_R)) +#endif //SIGMA_TEST_ENABLE + +#endif // __SDK_VER_H__ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/sys_feature_sdk.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/sys_feature_sdk.h new file mode 100644 index 000000000000..93b1cb537afb --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/include/sys_feature_sdk.h @@ -0,0 +1,106 @@ +/** + **************************************************************************************** + * + * @file sys_feature_sdk.h + * + * @brief Define for common system features + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __SYS_COMMON_FEATURES_H__ +#define __SYS_COMMON_FEATURES_H__ + +#if CFG_WIFI +// Wi-Fi configuration features +#include "ra6w1_wifi_features.h" +#endif /* CFG_WIFI */ + +// Console Prompt +#define PROMPT "/" CHIPSET_NAME + +/////////////////////////////////////////////////////////////////////// +// +// Main features for customer SDK +// +/////////////////////////////////////////////////////////////////////// + +// +// System features ................................................... +// + +// wifi re-connect stops when wifi conn fail by wrong key +#undef __WIFI_CONN_RETRY_STOP_AT_WK_CONN_FAIL__ + +// Log message for Code run-time +#undef __RUNTIME_CALCULATION__ + +// SIGMA Throughput Test for Wi-Fi Certification +#undef __SUPPORT_SIGMA_TEST__ + + +/////////////////////////////////////////////////////////////////////// +// +// Sub features +// +/////////////////////////////////////////////////////////////////////// + +#if defined (__WIFI_CONN_RETRY_STOP_AT_WK_CONN_FAIL__) + #undef __DPM_ABN_SLEEP1_BY_WK_CONN_FAIL__ // optional: dpm abnormal sleep1 when wifi conn fail by wrong key +#endif // __WIFI_CONN_RETRY_STOP_AT_WK_CONN_FAIL__ + +// Wi-Fi Certification features +#if defined ( __SUPPORT_SIGMA_TEST__ ) + #define __SUPPORT_SIGMA_THROUGHPUT__ + #define __SUPPORT_SIGMA_UAPSD__ +#endif // __SUPPORT_SIGMA_TEST__ + +/////////////////////////////////////////////////////////////////////// +// +// Dependent features for customer SDK +// +/////////////////////////////////////////////////////////////////////// + +// Wi-Fi Certification features +#if defined ( __SUPPORT_SIGMA_TEST__ ) + #undef __SUPPORT_WPS_BTN__ + + #define __SUPPORT_UART2__ + #undef __SUPPORT_ATCMD__ + + #define __SUPPORT_IEEE80211W__ // IEEE 802.11W(PMF) +#endif // __SUPPORT_SIGMA_TEST__ + +#if defined ( __ENABLE_UMAC_CMD__ ) + #define __ENABLE_LMAC_TX_CMD__ +#endif // __ENABLE_UMAC_CMD__ + +#if defined (__SUPPORT_WPS_BTN__) || defined (__SUPPORT_FACTORY_RESET_BTN__) +#include "sdk_defs.h" +#endif // __SUPPORT_WPS_BTN__ || __SUPPORT_FACTORY_RESET_BTN__ + +#endif // __SYS_COMMON_FEATURES_H__ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/middleware_defaults.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/middleware_defaults.h new file mode 100644 index 000000000000..5758d59bd78a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/middleware_defaults.h @@ -0,0 +1,495 @@ +/** + * \{ + * \addtogroup MIDDLEWARE_CONFIG_DEFAULTS + * + * \brief Middleware default configuration values + * + * The following tags are used to describe the type of each configuration option. + * \{ + */ + +/** + **************************************************************************************** + * + * @file middleware_defaults.h + * + * @brief Middleware. System Configuration file default values. + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef MIDDLEWARE_DEFAULTS_H_ +#define MIDDLEWARE_DEFAULTS_H_ + +/** + * \addtogroup ADAPTER_SELECTION Adapters enabled by default + * + * \brief Adapter selection + * + * When enabled the specific adapter is included in the compilation of the SDK. + * - 0 : Disabled + * - 1 : Enabled + * + * The default option can be overridden in the application configuration file. + * + * \{ + * Adapter | Setting | Default option + * ------------------------------ | -------------------------------------- | :------------------: + * Table not yet fixed | dg_configXXXXX_ADAPTER | 1 + * + */ + +/* -------------------------------- Adapters (ad_*) selection -------------------------------- */ + +#ifndef dg_configFLASH_ADAPTER + #define dg_configFLASH_ADAPTER (0) +#endif + +#ifndef dg_configI2C_ADAPTER + #define dg_configI2C_ADAPTER (0) +#endif + +#ifndef dg_configNVMS_ADAPTER + #define dg_configNVMS_ADAPTER (0) +#endif + +#ifndef dg_configNVMS_FLASH_CACHE + #define dg_configNVMS_FLASH_CACHE (0) +#endif + +#ifndef dg_configNVMS_VES + #define dg_configNVMS_VES (0) +#endif + +#ifndef dg_configSPI_ADAPTER + #define dg_configSPI_ADAPTER (0) +#endif + +#ifndef dg_configUART_ADAPTER + #define dg_configUART_ADAPTER (0) +#endif + +#ifndef dg_configGPADC_ADAPTER + #define dg_configGPADC_ADAPTER (0) +#endif + +#ifndef dg_configSDADC_ADAPTER + #define dg_configSDADC_ADAPTER (0) +#endif + +#ifdef dg_configTEMPSENS_ADAPTER + #error "Configuration option dg_configTEMPSENS_ADAPTER is no longer supported" +#endif + +#ifdef dg_configBATTERY_ADAPTER + #error "Configuration option dg_configBATTERY_ADAPTER is no longer supported" +#endif + +#ifndef dg_configNVPARAM_ADAPTER + #define dg_configNVPARAM_ADAPTER (0) +#endif + +#ifndef dg_configNVPARAM_APP_AREA + #define dg_configNVPARAM_APP_AREA (0) +#endif + +#ifndef dg_configCRYPTO_ADAPTER + #define dg_configCRYPTO_ADAPTER (0) +#endif + +#ifndef dg_configKEYBOARD_SCANNER_ADAPTER + #define dg_configKEYBOARD_SCANNER_ADAPTER (0) +#endif + +#if ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + #ifndef dg_configSYS_AUDIO_MGR + #define dg_configSYS_AUDIO_MGR (0) + #endif +#endif /* DEVICE_FAMILY */ + +#if (DEVICE_FAMILY == DA1468X) + + #ifndef dg_configRF_ADAPTER + #define dg_configRF_ADAPTER (0) + #endif + + #if (dg_configSNC_ADAPTER == 1) + #error "dg_configSNC_ADAPTER is not supported in DA14680 devices" + #else + #undef dg_configSNC_ADAPTER + #define dg_configSNC_ADAPTER (0) + #endif + + #if (dg_configISO7816_ADAPTER == 1) + #error "dg_configISO7816_ADAPTER is not supported in DA14680 devices" + #else + #undef dg_configISO7816_ADAPTER + #define dg_configISO7816_ADAPTER (0) + #endif + + #if (dg_configLCDC_ADAPTER == 1) + #error "dg_configLCDC_ADAPTER is not supported in DA14680 devices" + #else + #undef dg_configLCDC_ADAPTER + #define dg_configLCDC_ADAPTER (0) + #endif + + #if (dg_configPMU_ADAPTER == 1) + #error "dg_configPMU_ADAPTER is not supported in DA14680 devices" + #else + #undef dg_configPMU_ADAPTER + #define dg_configPMU_ADAPTER (0) + #endif + + #if (dg_configHAPTIC_ADAPTER == 1) + #error "dg_configHAPTIC_ADAPTER is not supported in DA14680 devices" + #else + #undef dg_configHAPTIC_ADAPTER + #define dg_configHAPTIC_ADAPTER (0) + #endif + +#elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + + #ifndef dg_configSNC_ADAPTER + #define dg_configSNC_ADAPTER (0) + #endif + + #ifndef dg_configISO7816_ADAPTER + #define dg_configISO7816_ADAPTER (0) + #endif + + #ifndef dg_configLCDC_ADAPTER + #define dg_configLCDC_ADAPTER (0) + #endif + + #ifndef dg_configPMU_ADAPTER + #define dg_configPMU_ADAPTER (0) + #endif + + #ifndef dg_configHAPTIC_ADAPTER + #define dg_configHAPTIC_ADAPTER (0) + #elif dg_configHAPTIC_ADAPTER + #if (!(dg_configUSE_HW_ERM || dg_configUSE_HW_LRA)) + #error \ + "Configuration option dg_configHAPTIC_ADAPTER also requires either the dg_configUSE_HW_LRA or the dg_configUSE_HW_ERM configuration options to be set." + #endif + #endif + + #ifdef dg_configRF_ADAPTER + #error "dg_configRF_ADAPTER is not supported in DA14690 devices" + #endif + +#endif /* DEVICE_FAMILY */ + +/* ---------------------------------------------------------------------------------------------- */ + +/** + * \} + */ + +/** + * \addtogroup CONSOLE_IO_SETTINGS Console I/O Settings + * + * \brief Console IO configuration settings + * + * \{ + * Description | Setting | Default option + * ----------------------------------------- | -------------------------- | :---------------: + * Enable serial console module | dg_configUSE_CONSOLE | 0 + * Enable serial console stubbed API | dg_configUSE_CONSOLE_STUBS | 0 + * Enable Command Line Interface module | dg_configUSE_CLI | 0 + * Enable Command Line Interface stubbed API | dg_configUSE_CLI_STUBS | 0 + * + * \see console.h cli.h + * + * \note CLI module requires dg_configUSE_CONSOLE to be enabled. + */ + +/* -------------------------------------- Console IO configuration settings --------------------- */ + +#ifndef dg_configUSE_CONSOLE + #define dg_configUSE_CONSOLE (0) +#endif + +#ifndef dg_configUSE_CONSOLE_STUBS + #define dg_configUSE_CONSOLE_STUBS (0) +#endif + +#ifndef dg_configUSE_CLI + #define dg_configUSE_CLI (0) +#endif + +#ifndef dg_configUSE_CLI_STUBS + #define dg_configUSE_CLI_STUBS (0) +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/** + * \} + */ + +/** + * \addtogroup MIDDLEWARE_DEBUG_SETTINGS Debug Settings + * + * \{ + */ + +/* -------------------------------------- Debug settings ---------------------------------------- */ + +/** + * \brief Enable task monitoring. + * + * \note Task monitoring can only be enabled if RTT or RETARGET is enabled + */ +#ifndef dg_configENABLE_TASK_MONITORING + #define dg_configENABLE_TASK_MONITORING (0) +#endif + +#if ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + +/** + * \brief Enable Micro Trace Buffer + * + * \note MTB is available only on Cortex-M33. + * + */ + #ifndef dg_configENABLE_MTB + #define dg_configENABLE_MTB (0) + #endif +#endif /* DEVICE_FAMILY */ + +/* ---------------------------------------------------------------------------------------------- */ + +/* ---------------------------------- OS related configuration ---------------------------------- */ + +/** + * \brief Monitor OS heap allocations + */ +#ifndef dg_configTRACK_OS_HEAP + #define dg_configTRACK_OS_HEAP (0) +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/** + * \} + */ + +/* ---------------------------------- SYSTEM CONFIGURATION ------------------------------------ */ + +/** + * \brief Enable gpadc monitoring. + * + * \note The application must not explicitly set dg_configUSE_SYS_ADC to 1.\n + * Use instead dg_configRF_ENABLE_RECALIBRATION\n + */ + +#ifndef dg_configUSE_SYS_ADC + #define dg_configUSE_SYS_ADC (0) +#endif + +/** + * \brief When set to 1, the sys charger service is used to charge the battery. + */ +#ifndef dg_configUSE_SYS_CHARGER + #define dg_configUSE_SYS_CHARGER (0) +#endif + +/** + * \brief When set to 1, the sys usb service is used to manage: + * - VBUS attach / detach and USB suspend / resume operations. + * - Notifications towards SDK and applications. + * - Suspend / resume sleep. + * - Suspend / resume DC/DC if in use. + * + * \note The service is automatically enabled when charging or USB enumeration + * are involved (see dg_configUSE_SYS_CHARGER , dg_configUSE_USB_ENUMERATION). + * It's recommended to be enabled when: + * - The power supply is a non rechargeable battery and the application is not + * interested in USB enumeration. + * - The only source of power supply is VBUS e.g a USB dongle. + */ +#ifndef dg_configUSE_SYS_USB + #define dg_configUSE_SYS_USB (0) +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +/* ----------------------------------- Driver dependencies -------------------------------------- */ + +/* If USB charger is enebled, we need to enable GPADC and Battery adapters as well */ +#if (dg_configUSE_USB_CHARGER == 1) + #undef dg_configGPADC_ADAPTER + #define dg_configGPADC_ADAPTER (1) +#endif + +/* + * SYS_CHARGER will else enable SYS_USB which implements the USB and VBUS interrupt handlers + */ +#if (dg_configUSE_SYS_CHARGER == 1) + #undef dg_configUSE_HW_USB_CHARGER + #define dg_configUSE_HW_USB_CHARGER (1) + #undef dg_configUSE_HW_CHARGER + #define dg_configUSE_HW_CHARGER (1) + #undef dg_configUSE_HW_USB + #define dg_configUSE_HW_USB (1) + #undef dg_configUSE_SYS_USB + #define dg_configUSE_SYS_USB (1) +#endif + +/* + * For USB_ENUMERATION to work, SYS_USB is also enabled, and library usb_lib needs to be linked + * with the active project + */ +#if (dg_configUSE_USB_ENUMERATION == 1) + #undef dg_configUSE_SYS_USB + #define dg_configUSE_SYS_USB (1) + #ifndef dg_configUSB_SUSPEND_MODE + #define dg_configUSB_SUSPEND_MODE USB_SUSPEND_MODE_NONE + #elif (dg_configUSB_SUSPEND_MODE == USB_SUSPEND_MODE_PAUSE) + #if ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + #error "USB_SUSPEND_MODE_PAUSE is currently not supported" + #endif + #endif +#endif + +/* + * SYS_USB can be explicitly enabled, even if dg_configUSE_SYS_CHARGER and dg_configUSE_USB_ENUMERATION + * are not used. This will enable the VBUS and USB interrupt handlers, but no functionality will be + * attached to them + */ +#if (dg_configUSE_SYS_USB == 1) + #undef dg_configUSE_HW_USB + #define dg_configUSE_HW_USB (1) + #if (DEVICE_FAMILY == DA1468X) + #undef dg_configUSE_HW_USB_CHARGER + #define dg_configUSE_HW_USB_CHARGER (1) + #endif +#endif + +/* If RF recalibration is enabled or RCX is used as low power clock, we need to enable SNC and GPADC as well */ +#if (dg_configRF_ENABLE_RECALIBRATION || (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_RCX && \ + defined(OS_FREERTOS))) + #undef dg_configUSE_HW_GPADC + #define dg_configUSE_HW_GPADC (1) + #undef dg_configGPADC_ADAPTER + #define dg_configGPADC_ADAPTER (1) + #if ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + #if (dg_configRF_ENABLE_RECALIBRATION) + #undef dg_configUSE_SYS_ADC + #define dg_configUSE_SYS_ADC (1) + #endif + #undef dg_configUSE_SNC_HW_GPADC + #define dg_configUSE_SNC_HW_GPADC (1) + #undef dg_configUSE_HW_SENSOR_NODE + #define dg_configUSE_HW_SENSOR_NODE (1) + #undef dg_configSNC_ADAPTER + #define dg_configSNC_ADAPTER (1) + #undef dg_configUSE_STATIC_IO_CONFIG + #define dg_configUSE_STATIC_IO_CONFIG (1) + #endif +#endif + +/** + * + * \brief RTC-to-PDC event period, in 10ms + * + * When RCX is set as the low power clock or RF calibration is enabled and Real Time Clock is used + * dg_configRTC_PDC_EVENT_PERIOD defines the RTC-to-PDC event period that will be used for RTC event controller + * configuration. + * + */ +#if (dg_configRF_ENABLE_RECALIBRATION || (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_RCX && \ + defined(OS_FREERTOS))) + #ifndef dg_configRTC_PDC_EVENT_PERIOD + #define dg_configRTC_PDC_EVENT_PERIOD (100) // in 10ms + #endif +#else + #ifdef dg_configRTC_PDC_EVENT_PERIOD + #undef dg_configRTC_PDC_EVENT_PERIOD + #endif +#endif + +/** + * + * \brief RCX calibration polling interval counter + * + * dg_configRCX_CAL_POLL_INT defines the number of RTC-to-PDC events that SYS_RCX ucode should wait before executing its code. + * + */ +#if (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_RCX && defined(OS_FREERTOS)) + #ifndef dg_configRCX_CAL_POLL_INT + #define dg_configRCX_CAL_POLL_INT (1) // in dg_configRTC_PDC_EVENT_PERIOD * 10ms - calibration interval = 1sec + #endif +#endif + +/** + * + * \brief RF calibration polling interval counter + * + * dg_configRF_CAL_POLL_INT defines the number of RTC-to-PDC events that SYS_ADC ucode should wait before executing its code + * when RF calibration is enabled. + * + */ +#if (dg_configRF_ENABLE_RECALIBRATION) + #ifndef dg_configRF_CAL_POLL_INT + #define dg_configRF_CAL_POLL_INT (1) // in dg_configRTC_PDC_EVENT_PERIOD * 10ms - calibration interval = 1sec + #endif +#endif + +/* If RF is enabled, we need to enable GPADC adapter as well */ +#if dg_configRF_ADAPTER + #undef dg_configGPADC_ADAPTER + #define dg_configGPADC_ADAPTER (1) +#endif + +/* + * \brief Enable the RTC correction mechanism + * + * When RCX is set as the low power clock and Real Time Clock is used (i.e. dg_configUSE_HW_RTC is defined), + * setting this macro to 1 enables the RTC correction mechanism. + */ +#if (BSP_CFG_LP_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_RCX && defined(OS_FREERTOS) && dg_configUSE_HW_RTC) + #ifndef dg_configRTC_CORRECTION + #define dg_configRTC_CORRECTION (1) + #endif +#else + #if dg_configRTC_CORRECTION + #pragma \ + message "dg_configRTC_CORRECTION is only used in RTOS based projects when RCX is set as low power clock. Forcing to 0." + #undef dg_configRTC_CORRECTION + #define dg_configRTC_CORRECTION (0) + #endif +#endif + +/* ---------------------------------------------------------------------------------------------- */ + +#endif /* MIDDLEWARE_DEFAULTS_H_ */ + +/** + \} + \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/partition_table.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/partition_table.h new file mode 100644 index 000000000000..7007fddd7bb7 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/config/partition_table.h @@ -0,0 +1,89 @@ +/** + **************************************************************************************** + * + * @file ra6w1/config/partition_table.h + * + * @brief Partition table selection. Image partition's size definition. + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +/* + * When partition_table is not overridden by adding a custom partition_table.h file to a project + * then this file is used to select partition table by macro definition. + * + * To use layout other than SDK one, add include path into the project settings that will point + * to a folder with the custom partition_table file. + */ + +#if ((DEVICE_FAMILY == DA1640X)) + + #if defined(RENESAS_AT25SL_8MB_OTA) + #include "8MB/at25sl/suota/partition_table.h" + #elif defined(RENESAS_AT25SL_8MB) + #include "8MB/at25sl/partition_table.h" + #elif defined(NORMAL_4MB_OTA) + #include "4MB/suota/partition_table.h" + #elif defined(NORMAL_4MB) + #include "4MB/partition_table.h" + #elif defined(NORMAL_8MB_OTA) + #include "8MB/suota/partition_table.h" + #elif defined(NORMAL_8MB) + #include "8MB/partition_table.h" + #else + #if defined OS_BAREMETAL + #include "4MB/default_partition_table.h" + #else + #error "Not defined SFLASH partition !!!" + #endif + #endif + +#else + + #include "4MB/partition_table.h" // Temporary ... for FPGA + +#endif /* DEVICE_FAMILY */ + +/* + * Define a maximal size of the image which could be written to QSPI - based on the partition sizes. + */ + +#if defined(NVMS_FW_EXEC_PART_SIZE) && defined(NVMS_FW_UPDATE_PART_SIZE) // for dual image by OTA + + #if (NVMS_FW_EXEC_PART_SIZE < NVMS_FW_UPDATE_PART_SIZE) + #define IMAGE_PARTITION_SIZE NVMS_FW_EXEC_PART_SIZE + #else + #define IMAGE_PARTITION_SIZE NVMS_FW_UPDATE_PART_SIZE + #endif /* NVMS_FW_EXEC_PART_SIZE < NVMS_FW_UPDATE_PART_SIZE */ + +#elif defined(NVMS_FIRMWARE_PART_SIZE) // for single image + + #define IMAGE_PARTITION_SIZE NVMS_FIRMWARE_PART_SIZE + +#else + #error "At least one partition where application could be placed should be defined!" +#endif /* defined(NVMS_FW_EXEC_PART_SIZE) && defined(NVMS_FW_UPDATE_PART_SIZE) */ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/hw_sys.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/hw_sys.h new file mode 100644 index 000000000000..d09f0427a3c1 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/hw_sys.h @@ -0,0 +1,473 @@ +/** + * \addtogroup PLA_DRI_PER_ANALOG + \{ + * \addtogroup HW_SYS System Hardware Driver + \{ + * \brief System Driver + */ + +/** + **************************************************************************************** + * + * @file hw_sys.h + * + * @brief System Driver header file. + * + * Copyright (C) 2017-2020 Dialog Semiconductor. + * This computer program includes Confidential, Proprietary Information + * of Dialog Semiconductor. All Rights Reserved. + * + **************************************************************************************** + */ + +#ifndef HW_SYS_H_ +#define HW_SYS_H_ + +#include "sdk_defs.h" + +typedef enum +{ + HW_SYS_REMAP_ADDRESS_0_TO_ROM, + HW_SYS_REMAP_ADDRESS_0_TO_OTP, + HW_SYS_REMAP_ADDRESS_0_TO_QSPI_FLASH, + HW_SYS_REMAP_ADDRESS_0_TO_RAM, + + /* XXX Values for test/debugging purposes are omitted */ +} HW_SYS_REMAP_ADDRESS_0; + +static inline HW_SYS_REMAP_ADDRESS_0 hw_sys_get_memory_remapping (void) +{ + HW_SYS_REMAP_ADDRESS_0 value; + GLOBAL_INT_DISABLE(); + value = REG_GETF(CRG_TOP, SYS_CTRL_REG, REMAP_ADR0); + GLOBAL_INT_RESTORE(); + + return value; +} + +#if (DEVICE_FAMILY == DA1468X) || ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + #if dg_configUSE_HW_SYS + + #include "sdk_defs.h" + #include "hw_pd.h" + + #if ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + #include + +/* \brief Specifies the HW BSR mask used for accessing the SW BSR */ + #define SW_BSR_HW_BSR_MASK (0x3) + +/* + * \brief Enumerations used when accessing the HW BSR register + */ +typedef enum +{ + HW_BSR_MASTER_NONE = 0, + HW_BSR_MASTER_SNC = 1, + HW_BSR_MASTER_SYSCPU = 2, + HW_BSR_MASTER_CMAC = 3, + HW_BSR_MASTER_NUM, +} HW_BSR_MASTER_ID; + +/* + * \brief HW BSR position + */ +typedef enum +{ + HW_BSR_SW_POS = 0, + HW_BSR_PLL_ENABLE_POS = 2, + HW_BSR_POWER_CTRL_POS = 28, + HW_BSR_WAKEUP_CONFIG_POS = 30, +} HW_BSR_POS; + +/* + * \brief Enumerations used when accessing the SW BSR variable + */ +typedef enum +{ + SW_BSR_MASTER_NONE = 1 << HW_BSR_MASTER_NONE, + SW_BSR_MASTER_SNC = 1 << HW_BSR_MASTER_SNC, + SW_BSR_MASTER_SYSCPU = 1 << HW_BSR_MASTER_SYSCPU, + SW_BSR_MASTER_CMAC = 1 << HW_BSR_MASTER_CMAC, +} SW_BSR_MASTER_ID; + +typedef enum +{ + BSR_PERIPH_ID_SNC = 0, + BSR_PERIPH_ID_SPI1 = 1, + BSR_PERIPH_ID_SPI2 = 2, + BSR_PERIPH_ID_UART1 = 3, + BSR_PERIPH_ID_UART2 = 4, + BSR_PERIPH_ID_UART3 = 5, + BSR_PERIPH_ID_I2C1 = 6, + BSR_PERIPH_ID_I2C2 = 7, + BSR_PERIPH_ID_MOTOR = 8, + BSR_PERIPH_ID_GPADC = 9, + BSR_PERIPH_ID_SDADC = 10, + BSR_PERIPH_ID_MAX = 16, +} HW_SYS_BSR_PERIPH_ID; + +/** + * \brief Register configuration + * + */ +typedef struct +{ + __IO uint32_t * addr; //!< Register address + uint32_t value; //!< Register value +} hw_sys_reg_config_t; + +/* + * Export hw_sys_sw_bsr so that other masters have access to its address. + */ +extern __RETAINED uint32_t hw_sys_sw_bsr[BSR_PERIPH_ID_MAX]; + + #endif /* DA1469X */ + +__STATIC_INLINE void hw_sys_set_memory_remapping (HW_SYS_REMAP_ADDRESS_0 value) +{ + GLOBAL_INT_DISABLE(); + REG_SETF(CRG_TOP, SYS_CTRL_REG, REMAP_ADR0, value); + GLOBAL_INT_RESTORE(); +} + +/** + * \brief Enable Cache retainability. + * + */ +__STATIC_INLINE void hw_sys_set_cache_retained (void) +{ + GLOBAL_INT_DISABLE(); + REG_SET_BIT(CRG_TOP, PMU_CTRL_REG, RETAIN_CACHE); + GLOBAL_INT_RESTORE(); +} + + #if (DEVICE_FAMILY == DA1468X) + +/** + * \brief Enable ECC microcode RAM retainment. + * + */ +__STATIC_INLINE void hw_sys_set_eccram_retained (void) +{ + GLOBAL_INT_DISABLE(); + REG_SET_BIT(CRG_TOP, PMU_CTRL_REG, RETAIN_ECCRAM); + GLOBAL_INT_RESTORE(); +} + + #endif /* DEVICE_FAMILY */ + +/** + * \brief Setup the Retention Memory configuration. + * + */ +__STATIC_INLINE void hw_sys_setup_retmem (void) +{ + GLOBAL_INT_DISABLE(); + + #if (DEVICE_FAMILY == DA1468X) + REG_SETF(CRG_TOP, PMU_CTRL_REG, RETAIN_RAM, dg_configMEM_RETENTION_MODE); + #elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + CRG_TOP->RAM_PWR_CTRL_REG = dg_configMEM_RETENTION_MODE; + #endif /* DEVICE_FAMILY */ + + GLOBAL_INT_RESTORE(); +} + +/** + * \brief Disable memory retention. + * + */ +__STATIC_INLINE void hw_sys_no_retmem (void) +{ + GLOBAL_INT_DISABLE(); + #if (DEVICE_FAMILY == DA1468X) + CRG_TOP->PMU_CTRL_REG &= ~(REG_MSK(CRG_TOP, PMU_CTRL_REG, RETAIN_RAM) | + REG_MSK(CRG_TOP, PMU_CTRL_REG, RETAIN_CACHE) | + REG_MSK(CRG_TOP, PMU_CTRL_REG, RETAIN_ECCRAM)); + #elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + REG_CLR_BIT(CRG_TOP, PMU_CTRL_REG, RETAIN_CACHE); + CRG_TOP->RAM_PWR_CTRL_REG = 0x5555; + #endif /* DEVICE_FAMILY */ + GLOBAL_INT_RESTORE(); +} + +/** + * \brief Prepare RESET type tracking. + */ +__STATIC_FORCEINLINE void hw_sys_track_reset_type (void) +{ + #if ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) || ((DEVICE_FAMILY == DA1468X) && \ + (DEVICE_REVISION == DEVICE_REV_B)) + CRG_TOP->RESET_STAT_REG = 0; + #endif +} + +/** + * \brief Enable the clock-less sleep mode. + * + */ +__STATIC_INLINE void hw_sys_enable_clockless (void) +{ + GLOBAL_INT_DISABLE(); + REG_SET_BIT(CRG_DEEPSLP, DEEP_SLEEP_CTRL_REG, CLKLESS_ENABLE); + GLOBAL_INT_RESTORE(); +} + +/** + * \brief Disable the clock-less sleep mode. + * + */ +__STATIC_INLINE void hw_sys_disable_clockless (void) +{ + GLOBAL_INT_DISABLE(); + REG_CLR_BIT(CRG_DEEPSLP, DEEP_SLEEP_CTRL_REG, CLKLESS_ENABLE); + GLOBAL_INT_RESTORE(); +} + +/** + * \brief Activate the "Reset on wake-up" functionality. + * + */ +__STATIC_INLINE void hw_sys_enable_reset_on_wup (void) +{ + GLOBAL_INT_DISABLE(); + REG_SET_BIT(CRG_TOP, PMU_CTRL_REG, RESET_ON_WAKEUP); + GLOBAL_INT_RESTORE(); +} + + #if (DEVICE_FAMILY == DA1468X) + +/** + * \brief Set (part of) the preferred settings. + * + */ +void hw_sys_set_preferred_values(void); + + #elif ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + +/** + * \brief Set the preferred settings of a power domain. + * + * \param [in] pd power domain + */ +void hw_sys_set_preferred_values(HW_PD pd); + + #endif + +/** + * \brief Set the GPIO used for the SW cursor to High-Z. + * + */ +void hw_sys_setup_sw_cursor(void); + +/** + * \brief Triggers the GPIO used for the SW cursor. + * + */ +void hw_sys_trigger_sw_cursor(void); + +/** + * \brief Enable the debugger. + * + */ +__STATIC_FORCEINLINE void hw_sys_enable_debugger (void) +{ + GLOBAL_INT_DISABLE(); + REG_SET_BIT(CRG_TOP, SYS_CTRL_REG, DEBUGGER_ENABLE); + GLOBAL_INT_RESTORE(); +} + +/** + * \brief Disable the debugger. + * + */ +__STATIC_FORCEINLINE void hw_sys_disable_debugger (void) +{ + GLOBAL_INT_DISABLE(); + REG_CLR_BIT(CRG_TOP, SYS_CTRL_REG, DEBUGGER_ENABLE); + GLOBAL_INT_RESTORE(); +} + +/** + * \brief Check if the debugger is attached. + * + * \return true, if the debugger is attached, else false. + * + */ +__STATIC_FORCEINLINE bool hw_sys_is_debugger_attached (void) +{ + return REG_GETF(CRG_TOP, SYS_STAT_REG, DBG_IS_ACTIVE) != 0; +} + +/** + * \brief Trigger a GPIO when ASSERT_WARNING() or ASSERT_ERROR() hits. + * + */ +__RETAINED_CODE void hw_sys_assert_trigger_gpio(void); + + #if ((DEVICE_FAMILY == DA1469X) || (DEVICE_FAMILY == DA1487X)) + +/** + * \brief Try to lock a BSR entry + * + * \param [in] sw_bsr_master_id The SW BSR ID of the relevant master + * \param [in] pos The position of the entry in BSR. Valid positions are provided in HW_BSR_POS. + * + * \return true if the BSR entry has been acquired, else false. + * + */ +bool hw_sys_hw_bsr_try_lock(HW_BSR_MASTER_ID hw_bsr_master_id, HW_BSR_POS pos); + +/** + * \brief Unlock a BSR entry + * + * \param [in] sw_bsr_master_id The SW BSR ID of the relevant master + * \param [in] pos The position of the entry in BSR. Valid positions are provided in HW_BSR_POS. + * + */ +void hw_sys_hw_bsr_unlock(HW_BSR_MASTER_ID hw_bsr_master_id, HW_BSR_POS pos); + +/** + * \brief Initializes the software busy status register. + */ +void hw_sys_sw_bsr_init(void); + +/** + * \brief Tries to acquire exclusive access to a specific peripheral when + * it is also used by other masters (SNC or CMAC). + * + * \param [in] sw_bsr_master_id The SW BSR ID of the relevant master + * \param [in] periph_id The peripheral id for which exclusive access must be granted. + * Valid range is (0 - BSR_PERIPH_ID_MAX). Check HW_SYS_BSR_PERIPH_ID. + * + * \return true if peripheral exclusive access has been acquired, else false. + */ +bool hw_sys_sw_bsr_try_acquire(SW_BSR_MASTER_ID sw_bsr_master_id, uint32_t periph_id); + +/** + * \brief Checks if exclusive access to a specific peripheral has been acquired + * from a given master. + * + * \param [in] sw_bsr_master_id The SW BSR ID of the relevant master + * \param [in] periph_id The peripheral id for which exclusive access will be checked. + * Valid range is (0 - BSR_PERIPH_ID_MAX). Check HW_SYS_BSR_PERIPH_ID. + * \return true if peripheral exclusive access has been acquired from the specific master, else false. + */ +bool hw_sys_sw_bsr_acquired(SW_BSR_MASTER_ID sw_bsr_master_id, uint32_t periph_id); + +/** + * \brief Releases the exclusive access from a specific peripheral so it + * it can be also used by other masters (SNC or CMAC). + * + * \param [in] sw_bsr_master_id The SW BSR ID of the relevant master + * \param [in] periph_id The peripheral id for which exclusive access must be released. + * Valid range is (0 - BSR_PERIPH_ID_MAX). Check HW_SYS_BSR_PERIPH_ID. + */ +void hw_sys_sw_bsr_release(SW_BSR_MASTER_ID sw_bsr_master_id, uint32_t periph_id); + +/** + * \brief Enables the COM power domain. + * + */ +void hw_sys_pd_com_enable(void); + +/** + * \brief Disables the COM power domain. If it has not + * been enabled by any other modules, it will be disabled. + */ +void hw_sys_pd_com_disable(void); + +/** + * \brief Enables the PERIPH power domain. + * + */ +void hw_sys_pd_periph_enable(void); + +/** + * \brief Disables the PERIPH power domain. If it has not + * been enabled by any other modules, it will be disabled. + */ +void hw_sys_pd_periph_disable(void); + +/** + * \brief Add register configuration entries in the system register configuration table + * + * \param [in] config pointer to the structure containing the register configuration + * \param [in] num_of_entries the number of entries in the register configuration structure + * + * \return the index of the first entry in the configuration table + */ +uint32_t hw_sys_reg_add_config(hw_sys_reg_config_t * config, uint32_t num_of_entries); + +/** + * \brief Get a register configuration entry + * + * \param [in] index the index of the entry in the register configuration table + * + * \return a pointer to the register configuration entry + */ +hw_sys_reg_config_t * hw_sys_reg_get_config(uint32_t index); + +/** + * \brief Modify a register configuration entry + * + * \param [in] index the index of the entry in the register configuration table + * \param [in] addr the new register address + * \param [in] value the new register value + */ +void hw_sys_reg_modify_config(uint32_t index, __IO uint32_t * addr, uint32_t value); + +/** + * \brief Get the number of entries in the system register configuration table + * + * \return a pointer to the number of entries + */ +uint32_t * hw_sys_reg_get_num_of_config_entries(void); + +/** + * \brief Apply system register configuration + * + * Configure non-retained system registers using the entries in the system register + * configuration table. + */ +__RETAINED_CODE void hw_sys_reg_apply_config(void); + +/** + * \brief Checks whether there are register entries in CS for the following registers + * - CLK_FREQ_TRIM_REG + * - XTAL32M_CTRL0_REG + * If any of the above is missing, the function applies the default values + * for specific fields + * - CLK_FREQ_TRIM_REG: XTAL32M_TRIM + * - XTAL32M_CTRL0_REG: XTAL32M_CXCOMP_ENABLE + */ +void hw_sys_apply_default_values(void); + + #if !DEVICE_FPGA + +/** + * \brief Calculates the PLL_MIN_CURRENT value needed for tuning the PLL lock time + * + * \note This function has to be called only once during startup. + */ +void hw_sys_pll_calculate_min_current(void); + +/** + * \brief Sets the PLL_MIN_CURRENT value needed for tuning the PLL lock time + * + * \note This function should be called every time the timers power domain powers off and on. + */ +void hw_sys_pll_set_min_current(void); + + #endif /* !DEVICE_FPGA */ + #endif /* DA1469X */ + + #endif /* dg_configUSE_HW_SYS */ +#endif /* DEVICE_FAMILY */ +#endif /* HW_SYS_H_ */ + +/** + * \} + * \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/iface_defs.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/iface_defs.h new file mode 100644 index 000000000000..4c94bdde495a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/iface_defs.h @@ -0,0 +1,167 @@ +/** + **************************************************************************************** + * + * @file iface_defs.h + * + * @brief Featrue define + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __IFACE_DEFS_H__ +#define __IFACE_DEFS_H__ + +/* + * Interface definitions + */ + +/* NVRAM KEYWORD START */ + +#define NETMODE "NETMODE" +#define NETMODE_WIFI_PROFILE "netmode" + +#define WIFI_PROFILE_DNSSVR_0 "dns_0" +#define WIFI_PROFILE_DNSSVR_1 "dns_1" +#define WIFI_PROFILE_DNSSVR_2ND_0 "dns_2nd_0" +#define WIFI_PROFILE_DNSSVR_2ND_1 "dns_2nd_1" +#define STATIC_IP_ADDRESS "ipaddress" +#define STATIC_IP_NETMASK "subnetmask" +#define STATIC_IP_GATEWAY "gateway" +#define STATIC_IPV6_ADDRESS "IPV6ADDR" + +/* DHCP Server */ +#define DHCP_SERVER_START_IP "1:DHCPD_S_IP" +#define DHCP_SERVER_END_IP "1:DHCPD_E_IP" +#define DHCP_SERVER_LEASE_TIME "1:DHCPD_TIME" +#define DHCP_SERVER_DNS "1:DHCPD_DNS" +#define DHCP_SERVER_RESPONSE_DELAY "1:DHCPD_RESP_DELAY" + +#define DHCPV6_SERVER_START_IP "DHCPV6D_S_IP" +#define DHCPV6_SERVER_END_IP "DHCPV6D_E_IP" +#define DHCPV6_SERVER_DNS "DHCPV6D_DNS" +#define DHCPV6_SERVER_LEASE_TIME "DHCPV6D_TIME" + +#define ENV_SYS_MODE "SYSMODE" +#define ENV_SWITCH_SYSMODE "SWITCH_SYSMODE" +#define ENV_KEY_TEMP_STATIC_IP "0:TEMP_STATIC_IP" // Temporarily use a static IPaddress. + +/* NVRAM KEYWORD END */ + +/* NETWORK Define */ +#define NETMODE_DHCPCLIENT "dhcp" +#define IPADDR_LEN 16 +#define IP6ADDR_LEN 40 +#define DHCPCLIENT 1 +#define STATIC_IP 2 + +#define WLAN0_IFACE 0 +#define WLAN1_IFACE 1 +#define ETH0_IFACE 2 +#define NONE_IFACE 9 + +#define IFACE_UP 1 +#define IFACE_DOWN 0 + +#define GET_MACADDR 0 +#define GET_IPADDR 1 +#define GET_SUBNET 2 +#define GET_GATEWAY 3 +#define GET_MTU 4 +#define GET_DNS 5 +#define GET_DNS_2ND 6 +#define GET_IPV6 7 + +/* #################################################### */ + +enum dhcp_client_state +{ + DHCP_CLIENT_CREATE, + DHCP_CLIENT_INFO, + DHCP_CLIENT_STOP, + DHCP_CLIENT_START, + DHCP_CLIENT_FORCING_RENEW, + DHCP_CLIENT_RELEASE, + DHCP_CLIENT_STATUS /* add by sj.lee 21060721 */ +}; + +enum dhcp_server_state +{ + DHCP_SERVER_STATE_STATUS, + DHCP_SERVER_STATE_START, + DHCP_SERVER_STATE_STOP, + DHCP_SERVER_STATE_RANGE, + DHCP_SERVER_STATE_LEASE_TIME, + DHCP_SERVER_STATE_LEASE_TABLE, + DHCP_SERVER_STATE_DNS, + DHCP_SERVER_STATE_RESPONSE_DELAY, + DHCP_SERVER_STATE_DEBUG, + DHCP_SERVER_STATE_HELP, + DHCP_SERVER_STATE_STATUS_AT /* add by sj.lee for AT_CMD */ +}; + +enum network_state +{ + P2P_NET_GO, + P2P_NET_CLIENT, + P2P_NET_DEVICE, + INF_NET_STATION +}; + +/* DEFALUT VALUE */ +/* HTTP Server */ +#define DEFAULT_HTTP_SERVER_PORT 80 + +#define DEFAULT_IPADDR_WLAN0 "172.16.0.100" +#define DEFAULT_SUBNET_WLAN0 "255.255.255.0" +#define DEFAULT_GATEWAY_WLAN0 "172.16.0.1" +#define DEFAULT_DNS_WLAN0 "8.8.8.8" /* Google DNS */ +#define DEFAULT_DNS_2ND "208.67.222.222" /* OpenDNS */ + +#define DEFAULT_IPADDR_WLAN1 "10.0.0.1" +#define DEFAULT_SUBNET_WLAN1 "255.255.255.0" +#define DEFAULT_GATEWAY_WLAN1 "10.0.0.1" +#define DEFAULT_DNS_WLAN1 "8.8.8.8" /* Google DNS */ + +#define DEFAULT_NETMODE_WLAN0 DHCPCLIENT +#define DEFAULT_NETMODE_WLAN1 STATIC_IP + +/* DHCP Server */ +#define MAX_DHCP_LEASE_COUNT 10 +#define DEFAULT_DHCP_LEASE_COUNT 10 +#define MAX_DHCP_SERVER_LEASE_TIME 3600 * 24 +#define MIN_DHCP_SERVER_LEASE_TIME 60 +#define DEFAULT_DHCP_SERVER_LEASE_TIME 1800 + +#define P2P_GO_IP_ADDR "192.168.20.1" +#define P2P_GO_NETMASK "255.255.255.0" +#define P2P_GO_IP_DHCP_START "192.168.20.2" +#define P2P_GO_IP_DHCP_END "192.168.20.11" +#define P2P_GO_DNS_IP "8.8.8.8" + +#define IPADDR_ANY_STR "0.0.0.0" + +#endif /* __IFACE_DEFS_H__ */ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/interrupts.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/interrupts.h new file mode 100644 index 000000000000..e638f0290549 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/interrupts.h @@ -0,0 +1,154 @@ +/** + * \addtogroup PLA_BSP_SYSTEM + * \{ + * \addtogroup BSP_INTERRUPTS Interrupts + * + * \brief Interrupt priority configuration + * + * \{ + */ + +/** + **************************************************************************************** + * + * @file ra6w1/interrupts.h + * + * @brief Interrupt priority configuration + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef INTERRUPTS_H_ + #define INTERRUPTS_H_ + + #include + + #ifdef __cplusplus +extern "C" { + #endif + +/** + * \brief Setup interrupt priorities + * + * When CPU is reset all interrupts have some priority setup. + * Reset -3 + * NMI -2 + * HardFault -1 + * All other interrupts have configurable priority that is set to 0. + * If some interrupts should have priority other then default, this function should be called. + * Argument \p prios can specify only those interrupts that need to have value other than default. + * For memory efficiency table with priorities for each interrupt consist of interrupt priority + * tag PRIORITY_x followed by interrupts that should have this priority, interrupts names are from + * enum IRQn_Type. + * + * \note If interrupt priorities do not need to be changed dynamically at runtime, best way to + * specify static configuration is to create table named __dialog_interrupt_priorities that will + * be used automatically at startup. + * + * Most convenient way to prepare such table is to use macros like in example below: + * + * \code{.c} + * INTERRUPT_PRIORITY_CONFIG_START(__dialog_interrupt_priorities) + * PRIORITY_0, // Start interrupts with priority 0 (highest) + * SVCall_IRQn, + * PendSV_IRQn, + * SysTick_IRQn, + * PRIORITY_1, // Start interrupts with priority 1 + * BLE_WAKEUP_LP_IRQn, + * BLE_GEN_IRQn, + * FTDF_WAKEUP_IRQn, + * FTDF_GEN_IRQn, + * PRIORITY_2, + * SRC_IN_IRQn, + * SRC_OUT_IRQn, + * PRIORITY_3, + * UART_IRQn, + * UART2_IRQn, + * INTERRUPT_PRIORITY_CONFIG_END + * \endcode + * + * Table __dialog_interrupt_priorities can now be used to call this function. + * Table can specify all interrupts or only those that need to be changed. + * + * \param [in] prios table with interrupts and priorities to setup + * + */ +void set_interrupt_priorities(const int8_t prios[]); + +/** + * \brief Check whether running in interrupt context. + * + * \return true if the CPU is serving an interrupt. + */ +__STATIC_INLINE bool in_interrupt (void) +{ + return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0; +} + +/** + * \brief Default interrupt priorities table. + * + */ +extern const int8_t __dialog_interrupt_priorities[]; + + #define LAST_IRQn (96) // WIFI_RC_IRQn + +/* + * Following macros allow easy way to build table with interrupt priorities. + * See example in set_interrupt_priorities function description. + */ + +/* UNCRUSTIFY-OFF */ +#define INTERRUPT_PRIORITY_CONFIG_START(name) const int8_t name[] = { +/* UNCRUSTIFY-ON */ + #define PRIORITY_0 (LAST_IRQn + 1) + #define PRIORITY_1 (LAST_IRQn + 2) + #define PRIORITY_2 (LAST_IRQn + 3) + #define PRIORITY_3 (LAST_IRQn + 4) + #define PRIORITY_4 (LAST_IRQn + 5) + #define PRIORITY_5 (LAST_IRQn + 6) + #define PRIORITY_6 (LAST_IRQn + 7) + #define PRIORITY_7 (LAST_IRQn + 8) + #define PRIORITY_8 (LAST_IRQn + 9) + #define PRIORITY_9 (LAST_IRQn + 10) + #define PRIORITY_10 (LAST_IRQn + 11) + #define PRIORITY_11 (LAST_IRQn + 12) + #define PRIORITY_12 (LAST_IRQn + 13) + #define PRIORITY_13 (LAST_IRQn + 14) + #define PRIORITY_14 (LAST_IRQn + 15) + #define PRIORITY_15 (LAST_IRQn + 16) + #define PRIORITY_TABLE_END (LAST_IRQn + 17) + #define INTERRUPT_PRIORITY_CONFIG_END PRIORITY_TABLE_END}; + + #ifdef __cplusplus +} + #endif + +#endif /* INTERRUPTS_H_ */ + +/** + * \} + * \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/osal/osal.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/osal/osal.h new file mode 100644 index 000000000000..682d2f8cd62c --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/osal/osal.h @@ -0,0 +1,1339 @@ +/** + * \addtogroup MID_RTO_OSAL + * + * \brief OS Abstraction Layer + * + * \{ + */ + +/** + **************************************************************************************** + * + * @file osal.h + * + * @brief OS abstraction layer API + * + * Copyright (c) 2023-2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef OSAL_H_ +#define OSAL_H_ + +#include "FreeRTOS.h" + +#if defined(OS_FREERTOS) + + #include + #include + #include + #include + #ifdef RM_STDIO_W + #include "rm_stdio_w_cfg.h" + #endif + +/** + * \brief Check whether running in interrupt context. + * + * \return true if the CPU is serving an interrupt. + */ +__STATIC_INLINE bool in_interrupt (void) +{ + return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0; +} + + #define OS_STACK_WORD_SIZE (sizeof(StackType_t)) + + #define OS_TASK TaskHandle_t + #define OS_TASK_STATUS TaskStatus_t + #define OS_TASK_CREATE_SUCCESS pdPASS + #define OS_TASK_NOTIFY_SUCCESS pdPASS + #define OS_TASK_NOTIFY_FAIL pdFALSE + #define OS_TASK_NOTIFY_NO_WAIT 0 + #define OS_TASK_NOTIFY_FOREVER portMAX_DELAY + #define OS_TASK_NOTIFY_ALL_BITS 0xFFFFFFFF + + #ifndef OS_TASK_PRIORITY_LOWEST + #define OS_TASK_PRIORITY_LOWEST tskIDLE_PRIORITY + #endif // OS_TASK_PRIORITY_LOWEST + #define OS_TASK_PRIORITY_NORMAL tskIDLE_PRIORITY + 1 + #define OS_TASK_PRIORITY_NORMAL_MAX (OS_TASK_PRIORITY_NORMAL + 9) // 10 + #ifndef OS_TASK_PRIORITY_HIGHEST + #define OS_TASK_PRIORITY_HIGHEST configMAX_PRIORITIES - 1 + #endif // OS_TASK_PRIORITY_HIGHEST + + #define OS_MUTEX SemaphoreHandle_t + #define OS_MUTEX_TAKEN pdTRUE + #define OS_MUTEX_NOT_TAKEN pdFALSE + #define OS_MUTEX_CREATE_SUCCESS 1 + #define OS_MUTEX_CREATE_FAILED 0 + #define OS_MUTEX_NO_WAIT 0 + #define OS_MUTEX_FOREVER portMAX_DELAY + + #define OS_EVENT SemaphoreHandle_t + #define OS_EVENT_CREATE_SUCCESS 1 + #define OS_EVENT_CREATE_FAILED 0 + #define OS_EVENT_SIGNALED pdTRUE + #define OS_EVENT_NOT_SIGNALED pdFALSE + #define OS_EVENT_NO_WAIT 0 + #define OS_EVENT_FOREVER portMAX_DELAY + + #define OS_EVENT_GROUP EventGroupHandle_t + #define OS_EVENT_GROUP_OK pdTRUE + #define OS_EVENT_GROUP_FAIL pdFALSE + #define OS_EVENT_GROUP_FOREVER portMAX_DELAY + + #define OS_QUEUE QueueHandle_t + #define OS_QUEUE_FULL errQUEUE_FULL + #define OS_QUEUE_EMPTY pdFALSE + #define OS_QUEUE_OK pdTRUE + #define OS_QUEUE_NO_WAIT 0 + #define OS_QUEUE_FOREVER portMAX_DELAY + + #define OS_TIMER TimerHandle_t + #define OS_TIMER_SUCCESS pdPASS + #define OS_TIMER_FAIL pdFAIL + #define OS_TIMER_FOREVER portMAX_DELAY + + #define OS_BASE_TYPE BaseType_t + #define OS_UBASE_TYPE UBaseType_t + + #define OS_OK pdPASS + #define OS_FAIL pdFAIL + + #define OS_TICK_TIME TickType_t + #define OS_PERIOD_MS portTICK_PERIOD_MS + + #define OS_ASSERT configASSERT + +/** + * \brief OS Notification action + */ +typedef enum +{ + OS_NOTIFY_NO_ACTION = eNoAction, /**< subject task receives event, but its notification value is not updated */ + OS_NOTIFY_SET_BITS = eSetBits, /**< notification value of subject task will be bitwise ORed with task value */ + OS_NOTIFY_INCREMENT = eIncrement, /**< notification value of subject task will be incremented by one */ + OS_NOTIFY_VAL_WITH_OVERWRITE = eSetValueWithOverwrite, /**< notification value of subject task is unconditionally set to task value */ + OS_NOTIFY_VAL_WITHOUT_OVERWRITE = eSetValueWithoutOverwrite, /**< if subject task has a notification pending then notification value + * will be set to task value otherwise task value is not updated */ +} OS_NOTIFY_ACTION; + +/** + * \brief OS Task state + */ +typedef enum +{ + OS_TASK_RUNNING = eRunning, /**< Task is in running state, a task is querying the state of itself */ + OS_TASK_READY = eReady, /**< Task is in a ready state */ + OS_TASK_BLOCKED = eBlocked, /**< Task is in blocked state */ + OS_TASK_SUSPENDED = eSuspended, /**< Task is in the suspended state, or is in the blocked state with an infinite time out */ + OS_TASK_DELETED = eDeleted, /**< Task is deleted, but its TCB has not yet been freed */ +} OS_TASK_STATE; + +/** + * \brief Converts a time in milliseconds to a time in ticks + * + * \param [in] time_in_ms time in milliseconds + * + * \return time in ticks + * + */ + #define OS_TIME_TO_TICKS(time_in_ms) portCONVERT_MS_2_TICKS(time_in_ms) + +/** + * \brief Return current OS task handle + * + * \return current task handle of type OS_TASK + * + */ + #define OS_GET_CURRENT_TASK() xTaskGetCurrentTaskHandle() + +/** + * \brief Create OS task + * + * Function creates OS task. Task is added to ready list. + * + * \param [in] name task name + * \param [in] task_func starting point of task + * \param [in] arg parameter past to \p task_func on task start + * \param [in] stack_size stack size allocated for task in bytes + * \param [in] priority number specifying task priority + * \param [in,out] task OS specific task handle + * + * \return OS_TASK_CREATE_SUCCESS if task was created successfully + * + */ + #if (dg_configSYSTEMVIEW == 0) + #define OS_TASK_CREATE(name, task_func, arg, stack_size, priority, task) \ + xTaskCreate((task_func), (name), (((stack_size) - 1) / sizeof(StackType_t) + 1), (arg), (priority), &(task)) + #else + #define OS_TASK_CREATE(name, task_func, arg, stack_size, priority, task) \ + xTaskCreate((task_func), \ + (name), \ + (((stack_size + dg_configSYSTEMVIEW_STACK_OVERHEAD) - 1) / sizeof(StackType_t) + 1), \ + (arg), \ + (priority), \ + &(task)) + #endif /* (dg_configSYSTEMVIEW == 1) */ + +/** + * \brief Delete OS task + * + * Function deletes OS task. + * + * \param [in,out] task OS specific task handle + * + */ + #define OS_TASK_DELETE(task) vTaskDelete(task) + +/** + * \brief Get the priority of an OS task + * + * Function returns the priority of an OS task. + * + * \param [in] task OS specific task handle. if NULL, the running task is assummed. + * + * \return the priority of the task (OS_UBASE_TYPE) + * + */ + #define OS_TASK_PRIORITY_GET(task) uxTaskPriorityGet(task) + +/** + * \brief Set the priority of an OS task + * + * Function sets the priority of an OS task. + * + * \param [in] task OS specific task handle + * \param [in] prio OS new priority + * + */ + #define OS_TASK_PRIORITY_SET(task, prio) vTaskPrioritySet(task, prio) + +/** + * \brief The running OS task yields control to the scheduler + * + * Function requests a context switch to another task. + * + */ + #define OS_TASK_YIELD() portYIELD() + +/** + * \brief Send an event directly to task + * + * Must not be called from ISR! + * + * \param [in] task id of task to notify + * \param [in] value used to update the notification value of the subject \p task + * \param [in] action action that performs when notify is occurred + * + * \return OS_TASK_NOTIFY_FAIL if \p action is set as OS_NOTIFY_VAL_WITHOUT_OVERWRITE and \p task + * already had a notification pending, OS_TASK_NOTIFY_SUCCESS otherwise + * + */ + #define OS_TASK_NOTIFY(task, value, action) xTaskNotify((task), (value), (action)) + +/** + * \brief Notify OS task sending an event and return previous notification value + * + * Must not be called from ISR! + * + * \param [in] task id of task to notify + * \param [in] value used to update the notification value of the subject \p task + * \param [in] action action that performs when notify is occurred + * \param [out] prev_value pointer to previous notification value - optional - can be set to NULL + * + * \return OS_TASK_NOTIFY_FAIL if \p action is set as OS_NOTIFY_VAL_WITHOUT_OVERWRITE and \p task + * already had a notification pending, OS_TASK_NOTIFY_SUCCESS otherwise + * + */ + #define OS_TASK_NOTIFY_AND_QUERY(task, value, action, prev_value) xTaskNotifyAndQuery((task), (value), (action), \ + (prev_value)) + +/** + * \brief Send an event and unblock OS task with updating notification value + * + * A version of OS_TASK_NOTIFY that can be called from ISR. + * + * \param [in] task id of task to notify + * \param [in] value used to update the notification value of the subject \p task + * \param [in] action action that performs when notify is occurred + * + * \return OS_TASK_NOTIFY_FAIL if \p action is set as OS_NOTIFY_VAL_WITHOUT_OVERWRITE and \p task + * already had a notification pending, OS_TASK_NOTIFY_SUCCESS otherwise + * + */ + #define OS_TASK_NOTIFY_FROM_ISR(task, value, action) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xTaskNotifyFromISR(task, value, action, &need_switch); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Notify task and receive OS task notification value + * + * Must not called from ISR! Use OS_TASK_NOTIFY_GIVE_FROM_ISR instead. + * + * \param [in] task id of task to notify + * + * \return OS_TASK_NOTIFY_GIVE calls OS_TASK_NOTIFY with action set to OS_NOTIFY_INCREMENT resulting + * in all calls returning OS_TASK_NOTIFY_SUCCESS + * + */ + #define OS_TASK_NOTIFY_GIVE(task) xTaskNotifyGive(task) + +/** + * \brief Notify task from ISR + * + * Send notification from interrupt service routine (ISR) to \p task that can unblock the receiving + * task and optionally update the receiving task's notification value. + * This function is safe to call from ISR. + * + * \param [in] task id of task to notify + * + */ + #define OS_TASK_NOTIFY_GIVE_FROM_ISR(task) \ + ({ \ + BaseType_t need_switch; \ + vTaskNotifyGiveFromISR(task, &need_switch); \ + portEND_SWITCHING_ISR(need_switch); \ + }) + +/** + * \brief Clear to zero or decrement task notification value on exit + * + * \param [in] clear_on_exit = pdFASLE: RTOS task's notification value is decremented before + * OS_TASK_NOTIFY_TAKE() exits, + * pdTRUE: the RTOS task's notification value is reset to 0 before + * OS_TASK_NOTIFY_TAKE() exits. + * \param [in] time_to_wait maximum time to wait in the blocked state for a notification to be + * received if a notification is not already pending when + * OS_TASK_NOTIFY_TAKE() is called + * + * \return the value of the task's notification value before it is decremented or cleared + * + */ + #define OS_TASK_NOTIFY_TAKE(clear_on_exit, time_to_wait) ulTaskNotifyTake((clear_on_exit), (time_to_wait)) + +/** + * \brief Wait for the calling task to receive a notification + * + * \param [in] entry_bits any bits set in entry_bits will be cleared in calling notification value + * before enters to OS_TASK_NOTIFY_WAIT + * \param [in] exit_bits any bits set in exit_bits will be cleared in calling notification value + * before OS_TASK_NOTIFY_WAIT function exits if a notification was received + * \param [out] value pointer to task's notification value, if not required can be set to NULL + * \param [in] ticks_to_wait maximum time to wait in the blocked state for a notification to be + * received if a notification is not already pending when + * OS_TASK_NOTIFY_WAIT is called + * + * \return OS_TASK_NOTIFY_SUCCESS if notification was received or was already pending when + * OS_TASK_NOTIFY_WAIT was called + * OS_TASK_NOTIFY_FAIL if the call OS_TASK_NOTIFY_WAIT timed out before notification was + * received + * + */ + #define OS_TASK_NOTIFY_WAIT(entry_bits, exit_bits, value, ticks_to_wait) \ + xTaskNotifyWait((entry_bits), (exit_bits), (value), (ticks_to_wait)) + +/** + * \brief Resume task + * + * Make \p task ready to run. + * + * \param [in] task id of task to resume + * + */ + #define OS_TASK_RESUME(task) vTaskResume(task) + +/** + * \brief Resume task + * + * Make \p task ready to run. This function is safe to call from ISR. + * + * \param [in] task id of task to resume + * + */ + #define OS_TASK_RESUME_FROM_ISR(task) xTaskResumeFromISR(task) + +/** + * \brief Suspend task + * + * Remove \p task from execution queue. Task will not be run + * until OS_TASK_RESUME or OS_TASK_RESUME_FROM_ISR is called. + * + * \param [in] task id of task to suspend + * + */ + #define OS_TASK_SUSPEND(task) vTaskSuspend(task) + +/** + * \brief Suspend task + * + * Remove \p task from execution queue. Task will not be run + * until OS_TASK_RESUME or OS_TASK_RESUME_FROM_ISR is called. + * This function is safe to call from ISR. + * + * \param [in] task id of task to suspend + * + */ + #define OS_TASK_SUSPEND_FROM_ISR(task) vTaskSuspendFromISR(task) + +/** + * \brief Create OS mutex + * + * Function creates OS mutex. + * + * \param [in,out] mutex + * + * \return OS_MUTEX_CREATE_SUCCESS when mutex was created successfully, OS_MUTEX_CREATE_FAILED + * otherwise + */ + #define OS_MUTEX_CREATE(mutex) \ + ({ \ + (mutex) = xSemaphoreCreateRecursiveMutex(); \ + mutex != NULL ? OS_MUTEX_CREATE_SUCCESS : OS_MUTEX_CREATE_FAILED; \ + }) + +/** + * \brief Delete OS mutex + * + * Function deletes OS mutex. + * + * \param [in] mutex + * + */ + #define OS_MUTEX_DELETE(mutex) vSemaphoreDelete(mutex) + +/** + * \brief Relase mutex + * + * Decrease mutex count, when numer of calls to OS_MUTEX_GET equals number of calls to + * OS_MUTEX_PUT, mutex can be acquired by other task. + * + * \param [in] mutex id of mutex to realse + * + */ + #define OS_MUTEX_PUT(mutex) xSemaphoreGiveRecursive(mutex) + +/** + * \brief Acquire mutex + * + * Access to shared resource can be guarded by mutex. When task wants to get access + * to this resource call OS_MUTEX_GET. If mutex was not taken by any task yet it, call + * will succeed and mutex will be assigned to calling task. Next call to already acquired + * mutex from same task will succeed. If mutex is already taken by other task calling + * task will wait for specified time before failing. + * For non-blocking acquire \p timeout can be OS_MUTEX_NO_WAIT, for infinite wait till + * mutex is released OS_MUTEX_FOREVER should be used. + * + * \param [in] mutex id of mutex to acquire + * \param [in] timeout number of ticks that to acquire mutex + * + */ + #define OS_MUTEX_GET(mutex, timeout) xSemaphoreTakeRecursive((mutex), (timeout)) + +/** + * \brief Create OS event + * + * Function creates OS event that can be used to synchronize. + * + * \param [in,out] event + * + */ + #define OS_EVENT_CREATE(event) do {(event) = xSemaphoreCreateBinary();} while (0) + +/** + * \brief Delete OS event + * + * Function destroys OS event. + * + * \param [in] event item to delete + * + */ + #define OS_EVENT_DELETE(event) vSemaphoreDelete(event) + +/** + * \brief Set event in signaled state + * + * Set event in signaled stated so OS_EVENT_WAIT will release waiting task if any. + * Event will remain in signaled stated till call to OS_EVENT_WAIT releases one task. + * This function should not be called from ISR. + * + * \param [in] event + * + */ + #define OS_EVENT_SIGNAL(event) xSemaphoreGive(event) + +/** + * \brief Set event in signaled state + * + * Set event in signaled stated so OS_EVENT_WAIT will release waiting task if any. + * Event will remain in signaled stated till call to OS_EVENT_WAIT releases one task. + * This function is safe to call from ISR. + * + * \param [in] event + * + */ + #define OS_EVENT_SIGNAL_FROM_ISR(event) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xSemaphoreGiveFromISR(event, &need_switch); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Wait for event + * + * This function wait for \p event to be in signaled stated. + * If event was already in signaled state or become signaled in specified time + * function will return OS_EVENT_SIGNALED. + * To check if event is already signaled use OS_EVENT_NO_WAIT as timeout. + * To wait till event is signaled use OS_EVENT_FOREVERE. + * This function can't be used in ISR. + * + * \param [in] event if of event to wait on + * \param [in] timeout number of ticks to wait + * + * \return OS_EVENT_SIGNALED if event was signaled other value if not + * + */ + #define OS_EVENT_WAIT(event, timeout) xSemaphoreTake((event), (timeout)) + +/** + * \brief Check if event is signaled without waiting + * + * This function will return immediately with OS_EVENT_SIGNALED if event + * was in signaled state already. In case the event is signaled, its state + * changes to not signaled after calling this function. + * + * \param [in] event if of event to wait on + * + * \return OS_EVENT_SIGNALED if event was signaled other value if not + * + */ + #define OS_EVENT_CHECK(event) xSemaphoreTake((event), OS_EVENT_NO_WAIT) + + #define OS_EVENT_YIELD(higherPriorityTaskWoken) portYIELD_FROM_ISR(higherPriorityTaskWoken) + +/** + * \brief Create OS event group + * + * Function creates OS event group + * + * \return event group handle if successful, otherwise NULL + * + */ + #define OS_EVENT_GROUP_CREATE() xEventGroupCreate() + +/** + * \brief Event group wait bits + * + * Function reads bits within event group optionally entering the Blocked state (with a timeout) + * to wait for a bit or group of bits to become set. + * + * \param [in] event_group the event group in which the bits are being tested + * \param [in] bits_to_wait a bitwise value to test inside the event group + * \param [in] clear_on_exit = OS_OK: any bits set in the value passed as the bits_to_wait + * parameter will be cleared in the event group before + * xEventGroupWaitBits returns + * OS_FAIL: bits in the event group are not altered when the call + * to xEventGroupWaitBits() returns + * \param [in] wait_for_all = OS_OK: xEventGroupWaitBits() will return when either *all* bits + * set in the value passed as the bits_to_wait parameter are set in + * the event group + * OS_FAIL: xEventGroupWaitBits() will return when *any* of the bits set + * in the value passed as the bits_to_wait parameter are set in the event + * group + * \param [in] timeout maximum amount of time to wait for one/all of the bits specified + * by bits_to_wait to become set + * + * \return the value of the event group at the time either the event bits being waited for + * became set, or the timeout expired + * + */ + #define OS_EVENT_GROUP_WAIT_BITS(event_group, bits_to_wait, clear_on_exit, wait_for_all, timeout) \ + xEventGroupWaitBits((event_group), (bits_to_wait), (clear_on_exit), (wait_for_all), (timeout)) + +/** + * \brief Event group set bits + * + * Set bits (flags) within an event group + * + * \param [in] event_group the event group in which the bits are to be set + * \param [in] bits_to_set a bitwise value that indicates the bit or bits to set in the event group + * + * \return the value of the event group at the time the call to xEventGroupSetBits() returns + * + */ + #define OS_EVENT_GROUP_SET_BITS(event_group, bits_to_set) xEventGroupSetBits((event_group), (bits_to_set)) + +/** + * \brief Set event group bits from ISR + * + * Set bits (flags) within an RTOS event group that can be called from an ISR. + * + * \param [in] event_group the event group in which the bits are to be set + * \param [in] bits_to_set a bitwise value that indicates the bit or bits to set in the event group + * + * \return if the message was sent to the RTOS daemon task then OS_OK is returned, + * otherwise OS_FAIL is returned + * + */ + #define OS_EVENT_GROUP_SET_BITS_FROM_ISR(event_group, bits_to_set) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xEventGroupSetBitsFromISR((event_group), (bits_to_set), &(need_switch)); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Clear event group bits + * + * Function clear bits (flags) within an event group. + * + * \param [in] event_group the event group in which the bits are to be cleared + * \param [in] bits_to_clear a bitwise value that indicates the bit or bits to clear + * in the event group + * + * \return value of the event group before the specified bits were cleared + * + */ + #define OS_EVENT_GROUP_CLEAR_BITS(event_group, bits_to_clear) xEventGroupClearBits((event_group), (bits_to_clear)) + +/** + * \brief Clear event group bits from an interrupt + * + * Function clear bits (flags) within an event group from an interrupt. + * + * \param [in] event_group the event group in which the bits are to be cleared + * \param [in] bits_to_clear a bitwise value that indicates the bit or bits to clear + * in the event group + * + * \return value of the event group before the specified bits were cleared + * + */ + #define OS_EVENT_GROUP_CLEAR_BITS_FROM_ISR(event_group, bits_to_clear) \ + xEventGroupClearBitsFromISR((event_group), (bits_to_clear)) + +/** + * \brief Get event group bits + * + * Function returns the current value of the event bits (event flags) in an event group. + * + * \param [in] event_group the event group being queried + * + * \return value of the event bits in the event group at the time + * OS_EVENT_GROUP_GET_BITS() was called + * + */ + #define OS_EVENT_GROUP_GET_BITS(event_group) xEventGroupGetBits(event_group) + +/** + * \brief Get event group bits from an interrupt + * + * Function returns the current value of the event bits (event flags) in an event group from an + * interrupt + * + * \param [in] event_group the event group being queried + * + * \return value of the event bits in the event group at the time OS_EVENT_GROUP_GET_BITS_FROM_ISR() + * was called + * + */ + #define OS_EVENT_GROUP_GET_BITS_FROM_ISR(event_group) xEventGroupGetBitsFromISR(event_group) + +/** + * \brief Synchronize event group bits + * + * Atomically set bits (flags) within an event group, then wait for a combination of bits to be + * set within the same event group. + * + * \param [in] event_group event group in which the bits are being set and tested + * \param [in] bits_to_set bit or bits to set in the event group before determining if all + * the bits specified by the bits_to_wait parameter are set + * \param [in] bits_to_wait a bitwise value that indicates the bit or bits to test inside + * the event group + * \param [in] timeout maximum amount of time (specified in 'ticks') to wait for all the bits + * specified by the bits_to_wait parameter value to become set + * + * \return value of the event group at the time either the bits being waited for became set, + * or the block time expired + * + */ + #define OS_EVENT_GROUP_SYNC(event_group, bits_to_set, bits_to_wait, timeout) \ + xEventGroupSync((event_group), (bits_to_set), (bits_to_wait), (timeout)) + +/** + * \brief Delete event group + * + * Function deletes an event group. + * + * \param [in] event_group the event group being deleted. + * + */ + #define OS_EVENT_GROUP_DELETE(event_group) vEventGroupDelete(event_group) + +/** + * \brief Create OS queue + * + * Function creates OS queue that can contain \p max_items of specified size. + * + * \param [in,out] queue queue to initialize + * \param [in] item_size queue element size + * \param [in] max_items max number of items that queue can store + * + */ + #define OS_QUEUE_CREATE(queue, item_size, max_items) \ + do {(queue) = xQueueCreate((max_items), (item_size));} while (0) + +/** + * \brief Deletes OS queue + * + * Function deletes OS. + * + * \param [in] queue queue to delete + * + */ + #define OS_QUEUE_DELETE(queue) vQueueDelete(queue) + +/** + * \brief Put element in queue + * + * Function adds element into queue if there is enough room for it. + * If there is no room in queue for \p timeout ticks element is not + * put in queue and error is returned. + * + * \param [in] queue id of queue to put item to + * \param [in] item pointer to element to enqueue + * \param [in] timeout max time in ticks to wait for space in queue + * + * \return OS_QUEUE_FULL if there was no place in queue + * OS_QUEUE_OK if message was put in queue + * + */ + #define OS_QUEUE_PUT(queue, item, timeout) xQueueSendToBack((queue), (item), (timeout)) + +/** + * \brief Put element in queue + * + * Function adds element into queue if there is enough room for it. + * If there is no room in queue error is returned immediately. + * + * This is safe to call from ISR. + * + * \param [in] queue id of queue to put item to + * \param [in] item pointer to element to enqueue + * + * \return OS_QUEUE_FULL if there was no place in queue + * OS_QUEUE_OK if message was put in queue + * + */ + #define OS_QUEUE_PUT_FROM_ISR(queue, item) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xQueueSendToBackFromISR((queue), (item), &need_switch); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Get element from queue + * + * Function adds element into queue if there is enough room for it. + * If there is nothing in queue for \p timeout ticks error is returned. + * Use OS_QUEUE_NO_WAIT for \p timeout to get message without waiting. + * Use OS_QUEUE_FOREVER to wait till message arrives. + * + * \param [in] queue id of queue to get item from + * \param [out] item pointer to buffer that will receive element from queue + * \param [in] timeout max time in ticks to wait for element in queue + * + * \return OS_QUEUE_EMPTY if there was nothing in queue + * OS_QUEUE_OK if message was get from queue + * + */ + #define OS_QUEUE_GET(queue, item, timeout) xQueueReceive((queue), (item), (timeout)) + +/** + * \brief Peek element on queue + * + * Function gets element from queue without removing it. + * If there is nothing in queue for \p timeout ticks error is returned. + * Use OS_QUEUE_NO_WAIT for \p timeout to get message without waiting. + * Use OS_QUEUE_FOREVER to wait till message arrives. + * + * \param [in] queue id of queue to peek item from + * \param [out] item pointer to buffer that will receive element from queue + * \param [in] timeout max time in ticks to wait for element in queue + * + * \return OS_QUEUE_EMPTY if there was nothing in queue + * OS_QUEUE_OK if message was get from queue + * + */ + #define OS_QUEUE_PEEK(queue, item, timeout) xQueuePeek((queue), (item), (timeout)) + +/** + * \brief Get the number of messages stored in the queue + * + * \param [in] queue id of the queue to check. + */ + #define OS_QUEUE_MESSAGES_WAITING(queue) uxQueueMessagesWaiting((queue)) + +/** + * \brief Create software timer + * + * Function creates software timer with given timeout + * + * \param [in] name timer name + * \param [in] period timer period in ticks + * \param [in] reload indicates if callback will be called once or multiple times + * \param [in] timer_id identifier which can be used to identify timer in callback function + * \param [in] callback callback called when timer expires + * + * \return OS_TIMER if timer created successfully, otherwise null + */ + #define OS_TIMER_CREATE(name, period, reload, timer_id, callback) \ + xTimerCreate((name), (period), ((reload) ? pdTRUE : pdFALSE), ((void *) (timer_id)), (callback)) + +/** + * \brief Get timer ID + * + * Function returns timer_id assigned in OS_TIMER_CREATE + * + * \param [in] timer timer handle + * + * \return timer id + */ + #define OS_TIMER_GET_TIMER_ID(timer) pvTimerGetTimerID(timer) + +/** + * \brief Check if timer is active + * + * Function checks timer status + * + * \param [in] timer timer handle + * + * \return true if timer is active, otherwise false + */ + #define OS_TIMER_IS_ACTIVE(timer) xTimerIsTimerActive(timer) + +/** + * \brief Start timer + * + * Function starts timer + * + * \param [in] timer timer handle returned in OS_TIMER_CREATE + * \param [in] timeout max time in ticks to wait until command is sent + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * or OS_TIMER_FAIL if timeout occur + */ + #define OS_TIMER_START(timer, timeout) xTimerStart((timer), (timeout)) + +/** + * \brief Stop timer + * + * Function stops timer + * + * \param [in] timer timer handle returned in OS_TIMER_CREATE + * \param [in] timeout max time in ticks to wait until command is sent + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * or OS_TIMER_FAIL if timeout occur + */ + #define OS_TIMER_STOP(timer, timeout) xTimerStop((timer), (timeout)) + +/** + * \brief Change timer's period + * + * Functions updates timer's period + * + * \param [in] timer timer handle + * \param [in] period new timer's period + * \param [in] timeout max time in ticks to wait until command is sent + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * or OS_TIMER_FAIL if timeout occur + */ + #define OS_TIMER_CHANGE_PERIOD(timer, period, timeout) \ + xTimerChangePeriod((timer), (period), (timeout)) + +/** + * \brief Delete timer + * + * Function deletes previously created timer + * + * \param [in] timer timer handle + * \param [in] timeout max time in ticks to wait until command is sent + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * or OS_TIMER_FAIL if timeout occur + */ + #define OS_TIMER_DELETE(timer, timeout) xTimerDelete((timer), (timeout)) + +/** + * \brief Reset timer + * + * Function restarts previously created timer + * + * \param [in] timer timer handle + * \param [in] timeout max time in ticks to wait until command is sent + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * or OS_TIMER_FAIL if timeout occur + */ + #define OS_TIMER_RESET(timer, timeout) xTimerReset((timer), (timeout)) + +/** + * \brief Start timer from ISR + * + * Version of OS_TIMER_START that can be called from an interrupt service + * routine + * + * \param [in] timer timer handle + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * otherwise OS_TIMER_FAIL + * + * \sa OS_TIMER_START() + */ + #define OS_TIMER_START_FROM_ISR(timer) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xTimerStartFromISR((timer), &(need_switch)); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Stop timer from ISR + * + * Version of OS_TIMER_STOP that can be called from an interrupt service + * routine + * + * \param [in] timer timer handle + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * otherwise OS_TIMER_FAIL + * + * \sa OS_TIMER_STOP() + */ + #define OS_TIMER_STOP_FROM_ISR(timer) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xTimerStopFromISR((timer), &(need_switch)); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Reset timer from ISR + * + * Version of OS_TIMER_RESET that can be called from an interrupt service + * routine + * + * \param [in] timer timer handle + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * otherwise OS_TIMER_FAIL + * + * \sa OS_TIMER_RESET() + */ + #define OS_TIMER_RESET_FROM_ISR(timer) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xTimerResetFromISR((timer), &(need_switch)); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Change timer period from ISR + * + * Version of OS_TIMER_CHANGE_PERIOD that can be called from an interrupt service + * routine + * + * \param [in] timer timer handle + * \param [in] period new timer period + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * otherwise OS_TIMER_FAIL + * + * \sa OS_TIMER_CHANGE_PERIOD + */ + #define OS_TIMER_CHANGE_PERIOD_FROM_ISR(timer, period) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xTimerChangePeriodFromISR((timer), (period), &(need_switch)); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Reset timer from ISR + * + * Version of OS_TIMER_RESET that can be called from an interrupt service + * routine + * + * \param [in] timer timer handle + * + * \return OS_TIMER_SUCCESS if command has been sent successfully, + * otherwise OS_TIMER_FAIL + * + * \sa OS_TIMER_RESET() + */ + #define OS_TIMER_RESET_FROM_ISR(timer) \ + ({ \ + BaseType_t need_switch, ret; \ + ret = xTimerResetFromISR((timer), &(need_switch)); \ + portEND_SWITCHING_ISR(need_switch); \ + ret; \ + }) + +/** + * \brief Delay execution of task for specified time + * + * This function delays in OS specific way execution of current task. + * + * \param [in] ticks number of ticks to wait + * + */ + #define OS_DELAY(ticks) vTaskDelay(ticks) + +/** + * \brief Get current tick count + * + * \return current tick count + * + */ + #define OS_GET_TICK_COUNT() xTaskGetTickCount() + +/** + * \brief Convert from OS ticks to ms + * + * \param [in] ticks tick count to convert + * + * \return value in ms + * + */ + #define OS_TICKS_2_MS(ticks) portCONVERT_TICKS_2_MS(ticks) + +/** + * \brief Convert from ms to OS ticks + * + * \param [in] ms milliseconds to convert + * + * \return value in OS ticks + * + */ + #define OS_MS_2_TICKS(ms) portCONVERT_MS_2_TICKS(ms) + +/** + * \brief Delay execution of task for specified time + * + * This function delays in OS specific way execution of current task. + * + * \param [in] ms number of ms to wait + * + */ + #define OS_DELAY_MS(ms) OS_DELAY(OS_MS_2_TICKS(ms)) + +/** + * \brief Enter critical section from non-ISR context + * + * This allows to enter critical section from non-ISR context. + * Implementation will disable interrupts with nesting counter. + * This function can be called several times by task but requires same + * number of OS_LEAVE_CRITICAL_SECTION calls to allow task switching and interrupts + * again. + * + * \sa OS_LEAVE_CRITICAL_SECTION + * + */ + #define OS_ENTER_CRITICAL_SECTION() \ + do { \ + OS_ASSERT(!in_interrupt()); \ + portENTER_CRITICAL(); \ + } while (0) + +/** + * \brief Enter critical section from ISR context + * + * This function allows to enter critical section from ISR context. + * It can be called several times from within ISR context but requires same + * number of OS_LEAVE_CRITICAL_SECTION calls to restore interrupt status. + * + * \sa OS_LEAVE_CRITICAL_SECTION_FROM_ISR + * + */ + #define OS_ENTER_CRITICAL_SECTION_FROM_ISR(critical_section_status) \ + do { \ + OS_ASSERT(in_interrupt()); \ + critical_section_status = portSET_INTERRUPT_MASK_FROM_ISR(); \ + } while (0) + +/** + * \brief Leave critical section from non-ISR context. + * + * Function restores interrupts and task switching. + * Number of calls to this function must match number of calls to OS_ENTER_CRITICAL_SECTION. + * + * \sa OS_ENTER_CRITICAL_SECTION + * + */ + #define OS_LEAVE_CRITICAL_SECTION() \ + do { \ + OS_ASSERT(!in_interrupt()); \ + portEXIT_CRITICAL(); \ + } while (0) + +/** + * \brief Leave critical section from ISR context + * + * Function restores interrupts from ISR context. + * Number of calls to this function must match number of calls to OS_ENTER_CRITICAL_SECTION_FROM_ISR. + * + * \sa OS_ENTER_CRITICAL_SECTION_FROM_ISR + * + */ + #define OS_LEAVE_CRITICAL_SECTION_FROM_ISR(critical_section_status) \ + do { \ + OS_ASSERT(in_interrupt()); \ + portCLEAR_INTERRUPT_MASK_FROM_ISR(critical_section_status); \ + } while (0) + +/** + * \brief Name for OS memory allocation function + * + * \sa OS_MALLOC + * + */ + #define OS_MALLOC_FUNC pvPortMalloc + +/** + * \brief Name for non-retain memory allocation function + * + * \sa OS_MALLOC_FUNC + * + */ + #define OS_MALLOC_NORET_FUNC pvPortMalloc + +/** + * \brief Allocate memory from OS provided heap + * + * \sa OS_FREE + * + */ + #define OS_MALLOC(size) OS_MALLOC_FUNC(size) + +/** + * \brief Allocate memory from non-retain heap + * + * \sa OS_FREE + * + */ + #define OS_MALLOC_NORET(size) OS_MALLOC_NORET_FUNC(size) + +/** + * \brief Name for OS free memory function + * + * \sa OS_FREE + * + */ + #define OS_FREE_FUNC vPortFree + +/** + * \brief Name for non-retain memory free function + * + * \sa OS_FREE_NORET + * \sa OS_MALLOC_NORET + * + */ + #define OS_FREE_NORET_FUNC vPortFree + +/** + * \brief Free memory allocated by OS_MALLOC() + * + * \sa OS_MALLOC + * + */ + #define OS_FREE(addr) OS_FREE_FUNC(addr) + +/** + * \brief Free memory allocated by OS_MALLOC_NORET() + * + * \sa OS_MALLOC_NORET + * + */ + #define OS_FREE_NORET(addr) OS_FREE_NORET_FUNC(addr) + + #if (configUSE_TRACE_FACILITY == 1) + +/** + * \brief Get task status + * + * Function gets the status of a task + * + * \param [in] task_status where the status of the task is stored + * \param [in] status_size the size of the above container + * + * \return the number of the monitored tasks + * + */ + #define OS_GET_TASKS_STATUS(task_status, status_size) uxTaskGetSystemState(task_status, status_size, NULL) + #else + #define OS_GET_TASKS_STATUS(task_status, status_size) + #endif + + #if (INCLUDE_uxTaskGetStackHighWaterMark == 1) + +/** + * \brief Get task status + * + * Function gets the status of a task + * + * \param [in] task_id the task id of the tracked task + * + * \return high water mark of the stack in bytes + * + */ + #define OS_GET_STACK_WATERMARK(task_id) uxTaskGetStackHighWaterMark(task_id) + #else + #define OS_GET_STACK_WATERMARK(task_id) + #endif + +/** + * \brief Get heap min water mark size + * + * Function gets heap min water mark size + * + * + * \return The heap min water mark size in bytes + * + */ + #define OS_GET_HEAP_WATERMARK() xPortGetMinimumEverFreeHeapSize() + +/** + * \brief Get current free heap size + * + * Function gets heap current available size + * + * + * \return Current free heap size in bytes + * + */ + #define OS_GET_FREE_HEAP_SIZE() xPortGetFreeHeapSize() + +/** + * \brief Get current number OS tasks + * + * Function gets current number OS tasks + * + * + * \return the current number of OS tasks + * + */ + #define OS_GET_TASKS_NUMBER() uxTaskGetNumberOfTasks() + + #if (INCLUDE_pcTaskGetTaskName == 1) + +/** + * \brief Get task name + * + * Function gets task name + * + * \param [in] task_id the task id of the monitored task + * + * \return a string pointer, points to the name of task + * + */ + #define OS_GET_TASK_NAME(task_id) pcTaskGetTaskName(task_id) + #else + #define OS_GET_TASK_NAME(task_id) + #endif + + #if (INCLUDE_eTaskGetState == 1) + +/** + * \brief Get task state + * + * Function gets task state + * + * \param [in] task_id the task id of the monitored task + * + * \return the task state in OS_TASK_STATE + * + */ + #define OS_GET_TASK_STATE(task_id) eTaskGetState(task_id) + #else + #define OS_GET_TASK_STATE(task_id) + #endif + + #if (INCLUDE_uxTaskPriorityGet == 1) + +/** + * \brief Get task priority + * + * Function gets task priority + * + * \param [in] task_id the task id of the monitored task + * + * \return the task priority + * + */ + #define OS_GET_TASK_PRIOTITY(task_id) uxTaskPriorityGet(task_id) + #else + #define OS_GET_TASK_PRIOTITY(task_id) + #endif + +#endif /*defined(OS_FREERTOS)*/ + +#if defined OS_BAREMETAL + #include + +/* + * Basic set of macros that can be used in non OS environment. + */ + #define PRIVILEGED_DATA + #define OS_MALLOC malloc + #define OS_FREE free + #ifndef RELEASE_BUILD + #define OS_ASSERT(a) do {if (!(a)) {__BKPT(0);}} while (0) + #else + #define OS_ASSERT(a) ((void) (a)) + #endif + +#endif + +#endif /* OSAL_H_ */ + +/** + * \} + * \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/ra6w1_platform_nvparam.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/ra6w1_platform_nvparam.h new file mode 100644 index 000000000000..738c4c1dc612 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/ra6w1_platform_nvparam.h @@ -0,0 +1,2102 @@ +/** + * \addtogroup MID_SYS_ADAPTERS + * \{ + * \addtogroup ADAPTER_CONFIGURATION + * \{ + */ + +/** + **************************************************************************************** + * + * @file ra6w1_platform_nvparam.h + * + * @brief Configuration of non-volatile parameters on platform + * + * Copyright (c) 2024 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef PLATFORM_NVPARAM_H_ + +// Do NOT modify this Definition Directive !! +#define PLATFORM_NVPARAM_H_ + +#undef CONFIG_UNUSED + +#include "ad_nvparam_defs.h" +#include "common_def.h" + +#if (dg_configNVPARAM_ADAPTERv2 == 1) + +/* + * Parameters length need to include 2 extra bytes for parameter header. + * Variable-length parameters length need to include 4 extra bytes for parameter header and length. + */ + #define NVPARAM_HEAD_SIZE 2 + #define STR_END 1 + #define PARAM_STR_EXTRA (NVPARAM_HEAD_SIZE + STR_END) + #define PARAM_IPADDR_LEN (16 + PARAM_STR_EXTRA) + #define PARAM_IP6ADDR_LEN (40 + PARAM_STR_EXTRA) + #define UINT32_LEN 4 + #define INT32_LEN 4 + #define UINT16_LEN 2 + #define UINT8_LEN 1 + + #define STR_INT32_LEN (11 + PARAM_STR_EXTRA) + #define STR_INT16_LEN (7 + PARAM_STR_EXTRA) + #define STR_INT8_LEN (4 + PARAM_STR_EXTRA) + + #define NPRO_0 "N0_" + #define NPRO_1 "N1_" + +/// List of NVEE lengths + +// bootcfg +//= ============================================================================= + #define NVEE_LEN_BOOT_CHIP 9 + PARAM_STR_EXTRA + #define NVEE_LEN_BOOT_PLATFORM 13 + PARAM_STR_EXTRA + #define NVEE_LEN_BOOT_CLK_CPU UINT32_LEN + #define NVEE_LEN_BOOT_CLK_BUS UINT32_LEN + #define NVEE_LEN_BOOT_BAUD UINT32_LEN + #define NVEE_LEN_BOOT_BIT UINT32_LEN + #define NVEE_LEN_BOOT_STOP UINT8_LEN + +// devcfg +//= ============================================================================= + + #define NVEE_LEN_WLANMAC (12 + PARAM_STR_EXTRA) + #define NVEE_LEN_ATCMD_UART_BAUDRATE (UINT32_LEN) + #define NVEE_LEN_ATCMD_UART_BITS (UINT32_LEN) + #define NVEE_LEN_ATCMD_UART_PARITY (UINT32_LEN) + #define NVEE_LEN_ATCMD_UART_STOPBIT (UINT32_LEN) + #define NVEE_LEN_ATCMD_UART_FLOWCTRL (UINT32_LEN) + +// wificfg +//= ============================================================================= + +// Supplicant Global Config + #define NVEE_LEN_uuid (40 + PARAM_STR_EXTRA) + #define NVEE_LEN_auto_uuid STR_INT32_LEN + +/** + * device_name - Device Name (WPS) + * User-friendly description of device; up to 32 octets encoded in + * UTF-8 + */ + #define NVEE_LEN_device_name (32 + PARAM_STR_EXTRA) + +/** + * manufacturer - Manufacturer (WPS) + * The manufacturer of the device (up to 64 ASCII characters) + */ + #define NVEE_LEN_manufacturer 64 + +/** + * model_name - Model Name (WPS) + * Model of the device (up to 32 ASCII characters) + */ + #define NVEE_LEN_model_name (32 + PARAM_STR_EXTRA) + +/** + * model_number - Model Number (WPS) + * Additional device description (up to 32 ASCII characters) + */ + #define NVEE_LEN_model_number (32 + PARAM_STR_EXTRA) + +/** + * serial_number - Serial Number (WPS) + * Serial number of the device (up to 32 characters) + */ + #define NVEE_LEN_serial_number (32 + PARAM_STR_EXTRA) + +/** + * device_type - Primary Device Type (WPS) + */ + #define NVEE_LEN_device_type (21 + PARAM_STR_EXTRA) /* WPS_DEV_TYPE_BUFSIZE */ + +/** + * config_methods - Config Methods + * + * This is a space-separated list of supported WPS configuration + * methods. For example + #define "label virtual_display virtual_push_button + * keypad". + * Available methods: usba ethernet label display ext_nfc_token + * int_nfc_token nfc_interface push_button keypad + * virtual_display physical_display + * virtual_push_button physical_push_button. + */ + #define NVEE_LEN_config_methods (256 + PARAM_STR_EXTRA) + #define NVEE_LEN_p2p_ssid_postfix (23 + PARAM_STR_EXTRA) // SSID_MAX_LEN-(DIRECT-xx) = 32-9 = 23 + #define NVEE_LEN_p2p_group_idle STR_INT32_LEN + #define NVEE_LEN_p2p_listen_channel STR_INT32_LEN + #define NVEE_LEN_p2p_oper_channel STR_INT32_LEN + #define NVEE_LEN_p2p_find_timeout STR_INT32_LEN + #define NVEE_LEN_p2p_go_intent STR_INT32_LEN + #define NVEE_LEN_wmm_enabled STR_INT32_LEN + #define NVEE_LEN_wmm_ps_enabled STR_INT32_LEN + #define NVEE_LEN_ap_max_inactivity STR_INT32_LEN + #define NVEE_LEN_ap_send_ka STR_INT32_LEN + #define NVEE_LEN_bss_max_count STR_INT32_LEN + #define NVEE_LEN_bss_expiration_age STR_INT32_LEN + #define NVEE_LEN_bss_expiration_scan_count STR_INT32_LEN + #define NVEE_LEN_filter_ssids STR_INT32_LEN + #define NVEE_LEN_filter_rssi STR_INT32_LEN + #define NVEE_LEN_max_num_sta STR_INT32_LEN + #define NVEE_LEN_ap_isolate STR_INT32_LEN + #define NVEE_LEN_disassoc_low_ack STR_INT32_LEN + #define NVEE_LEN_hs20 STR_INT32_LEN + #define NVEE_LEN_interworking STR_INT32_LEN + #define NVEE_LEN_hessid (6 + PARAM_STR_EXTRA) // ETH_ALEN 6 /* Octets in one ethernet addr */ + #define NVEE_LEN_access_network_type STR_INT32_LEN + #define NVEE_LEN_go_interworking STR_INT32_LEN + #define NVEE_LEN_go_access_network_type STR_INT32_LEN + #define NVEE_LEN_go_internet STR_INT32_LEN + #define NVEE_LEN_go_venue_group STR_INT32_LEN + #define NVEE_LEN_go_venue_type STR_INT32_LEN + #define NVEE_LEN_pbc_in_m1 STR_INT32_LEN + #define NVEE_LEN_wps_nfc_dev_pw_id STR_INT32_LEN + #define NVEE_LEN_ext_password_backend (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_p2p_go_max_inactivity STR_INT32_LEN + #define NVEE_LEN_auto_interworking STR_INT32_LEN + #define NVEE_LEN_okc STR_INT32_LEN + #define NVEE_LEN_pmf STR_INT32_LEN + #define NVEE_LEN_dtim_period STR_INT32_LEN + #define NVEE_LEN_beacon_int STR_INT32_LEN + #define NVEE_LEN_sae_groups (18 + PARAM_STR_EXTRA) // 3*MAX_SAE_GROUPS + #define NVEE_LEN_ignore_old_scan_res STR_INT32_LEN + #define NVEE_LEN_scan_cur_freq STR_INT32_LEN + #define NVEE_LEN_sched_scan_interval STR_INT32_LEN + #define NVEE_LEN_sched_scan_start_delay STR_INT32_LEN + #define NVEE_LEN_external_sim STR_INT32_LEN + #define NVEE_LEN_tdls_external_control STR_INT32_LEN + +/** + * wowlan_triggers - Wake-on-WLAN triggers + * + * If set, these wowlan triggers will be configured. + */ + #define NVEE_LEN_wowlan_triggers (32 + PARAM_STR_EXTRA) + +/** + * bgscan - Background scan and roaming parameters or %NULL if none + * + * This is an optional set of parameters for background scanning and + * roaming within a network (ESS). For more detailed information see + * ssid block documentation. + * + * The variable defines default bgscan behavior for all BSS station + * networks except for those which have their own bgscan configuration. + */ + #define NVEE_LEN_bgscan (32 + PARAM_STR_EXTRA) + +/** + * autoscan - Automatic scan parameters or %NULL if none + * + * This is an optional set of parameters for automatic scanning + * within an interface in following format: + * : + */ + #define NVEE_LEN_autoscan (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_p2p_search_delay STR_INT32_LEN + #define NVEE_LEN_mac_addr (6 + PARAM_STR_EXTRA) + #define NVEE_LEN_rand_addr_lifetime STR_INT32_LEN + #define NVEE_LEN_preassoc_mac_addr STR_INT32_LEN + #define NVEE_LEN_key_mgmt_offload STR_INT32_LEN + #define NVEE_LEN_user_mpm STR_INT32_LEN + #define NVEE_LEN_max_peer_links STR_INT32_LEN + #define NVEE_LEN_cert_in_cb STR_INT32_LEN + #define NVEE_LEN_mesh_max_inactivity STR_INT32_LEN + #define NVEE_LEN_dot11RSNASAERetransPeriod STR_INT32_LEN + #define NVEE_LEN_reassoc_same_bss_optim STR_INT32_LEN + #define NVEE_LEN_wps_priority STR_INT32_LEN + #define NVEE_LEN_wpa_rsc_relaxation STR_INT32_LEN + +/** + * sched_scan_plans - Scan plans for scheduled scan + * + * Each scan plan specifies the interval between scans and the number of + * iterations. The last scan plan only specifies the scan interval and + * will be run infinitely. + * + * format: ... + */ + #define NVEE_LEN_sched_scan_plans (32 + PARAM_STR_EXTRA) + +/** + * non_pref_chan - Non-preferred channels list + #define separated by spaces. + * + * format: op_class:chan:preference:reason<:detail> + * Detail is optional. + */ + #define NVEE_LEN_non_pref_chan (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_mbo_cell_capa STR_INT32_LEN + #define NVEE_LEN_disassoc_imminent_rssi_threshold STR_INT32_LEN + #define NVEE_LEN_oce STR_INT32_LEN + #define NVEE_LEN_gas_address3 STR_INT32_LEN + #define NVEE_LEN_ftm_responder STR_INT32_LEN + #define NVEE_LEN_ftm_initiator STR_INT32_LEN + +/** + * osu_dir - OSU provider information directory + * + * If set + #define allow FETCH_OSU control interface command to be used to fetch + * OSU provider information into all APs and store the results in this + * directory. + */ + #define NVEE_LEN_osu_dir STR_INT32_LEN + #define NVEE_LEN_fst_group_id (16 + PARAM_STR_EXTRA) // FST_MAX_GROUP_ID_LEN (IFNAMSIZ) + #define NVEE_LEN_fst_priority STR_INT32_LEN + #define NVEE_LEN_fst_llt STR_INT32_LEN + #define NVEE_LEN_gas_rand_addr_lifetime STR_INT32_LEN + #define NVEE_LEN_gas_rand_mac_addr STR_INT32_LEN + #define NVEE_LEN_dpp_config_processing STR_INT32_LEN + #define NVEE_LEN_STA_roam STR_INT32_LEN + #define NVEE_LEN_STA_roam_thold STR_INT32_LEN + #define NVEE_LEN_greenfield STR_INT32_LEN + #define NVEE_LEN_ht_protection STR_INT32_LEN + #define NVEE_LEN_rts_threshold STR_INT32_LEN + #define NVEE_LEN_acl_cmd STR_INT32_LEN + #define NVEE_LEN_country_code (3 + PARAM_STR_EXTRA) + #define NVEE_LEN_tls_ver STR_INT32_LEN + #define NVEE_LEN_rootca_chk STR_INT32_LEN + #define NVEE_LEN_peap_ver STR_INT32_LEN + #define NVEE_LEN_supp_log_mask STR_INT32_LEN + #define NVEE_LEN_supp_wpa_log_mask STR_INT32_LEN + #define NVEE_LEN_setband STR_INT32_LEN + #define NVEE_LEN_p2p_ps STR_INT32_LEN + #define NVEE_LEN_TEMP_PIN STR_INT32_LEN + #define NVEE_LEN_fast_reauth STR_INT32_LEN + #define NVEE_LEN_fast_pac (512 + PARAM_STR_EXTRA) + #define NVEE_LEN_fast_pac_len STR_INT32_LEN + +// ============================================================================= +// Supplicant Network Profile 0 +// ============================================================================= + #define NVEE_LEN_N0_profile STR_INT32_LEN + #define NVEE_LEN_N0_ssid (32 * 2 + PARAM_STR_EXTRA) + #define NVEE_LEN_N0_scan_ssid STR_INT32_LEN + #define NVEE_LEN_N0_bssid (17 + PARAM_STR_EXTRA) // MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" + #define NVEE_LEN_N0_bssid_hint STR_INT32_LEN + #define NVEE_LEN_N0_bssid_blacklist STR_INT32_LEN + #define NVEE_LEN_N0_bssid_whitelist STR_INT32_LEN + #define NVEE_LEN_N0_psk (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_N0_psk_raw (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_N0_mem_only_psk STR_INT32_LEN + +/** + * sae_password - SAE password + * + * This parameter can be used to set a password for SAE. By default, the + * passphrase value is used if this separate parameter is not used, but + * passphrase follows the WPA-PSK constraints (8..63 characters) even + * though SAE passwords do not have such constraints. + */ + #define NVEE_LEN_N0_sae_password (128 + 2 + PARAM_STR_EXTRA) + +/** + * sae_password_id - SAE password identifier + * + * This parameter can be used to identify a specific SAE password. If + * not included, the default SAE password is used instead. + */ + #define NVEE_LEN_N0_sae_password_id (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_N0_proto (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_N0_key_mgmt (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_N0_bg_scan_period STR_INT32_LEN + #define NVEE_LEN_N0_pairwise (50 + PARAM_STR_EXTRA) // wpa_config_write_cipher +// wpa_config_write_cipher + #define NVEE_LEN_N0_group (50 + PARAM_STR_EXTRA) // wpa_config_write_cipher + #define NVEE_LEN_N0_group_mgmt (50 + PARAM_STR_EXTRA) // wpa_config_write_cipher +// wpa_config_write_cipher + #define NVEE_LEN_N0_auth_alg (30 + PARAM_STR_EXTRA) + +/** + * bgscan - Background scan and roaming parameters or %NULL if none + * + * This is an optional set of parameters for background scanning and + * roaming within a network (ESS) in following format: + * : + */ + #define NVEE_LEN_N0_bgscan (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_autoscan (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + +/** + * scan_freq - Array of frequencies to scan or %NULL for all + * + * This is an optional zero-terminated array of frequencies in + * megahertz (MHz) to include in scan requests when searching for this + * network. This can be used to speed up scanning when the network is + * known to not use all possible channels. + */ + #define NVEE_LEN_N0_scan_freq (640 + PARAM_STR_EXTRA) // Unknown Size (expected size: channel count * 5, 2Ghz + 5Ghz) // 56 EA : 56(CH)*10(int)+56(space)+24(Margin) + #define NVEE_LEN_N0_freq_list (640 + PARAM_STR_EXTRA) // Unknown Size (expected size: channel count * 5, 2Ghz + 5Ghz) // 56 EA : 56(CH)*10(int)+56(space)+24(Margin) + #define NVEE_LEN_N0_eap (100 + PARAM_STR_EXTRA) // wpa_config_write_eap + #define NVEE_LEN_N0_identity (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_anonymous_identity (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + + #define NVEE_LEN_N0_imsi_identity (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_password (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_phase1 (20 + PARAM_STR_EXTRA) // Unknown Size (expected size: aboud: 20) + #define NVEE_LEN_N0_phase2 (20 + PARAM_STR_EXTRA) // Unknown Size (expected size: aboud: 20) + #define NVEE_LEN_N0_eapol_flags STR_INT32_LEN + #define NVEE_LEN_N0_wep_key0 (26 + PARAM_STR_EXTRA) // MAX_WEP_KEY_LEN + #define NVEE_LEN_N0_wep_key1 (26 + PARAM_STR_EXTRA) // MAX_WEP_KEY_LEN + #define NVEE_LEN_N0_wep_key2 (26 + PARAM_STR_EXTRA) // MAX_WEP_KEY_LEN + #define NVEE_LEN_N0_wep_key3 (26 + PARAM_STR_EXTRA) // MAX_WEP_KEY_LEN + #define NVEE_LEN_N0_priority STR_INT32_LEN + #define NVEE_LEN_N0_eap_workaround STR_INT32_LEN + #define NVEE_LEN_N0_pac_file (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_fragment_size STR_INT32_LEN + #define NVEE_LEN_N0_ocsp STR_INT32_LEN + #define NVEE_LEN_N0_sim_num STR_INT32_LEN + #define NVEE_LEN_N0_mode STR_INT32_LEN + #define NVEE_LEN_N0_no_auto_peer STR_INT32_LEN + #define NVEE_LEN_N0_frequency STR_INT32_LEN + #define NVEE_LEN_N0_fixed_freq STR_INT32_LEN + #define NVEE_LEN_N0_acs STR_INT32_LEN + #define NVEE_LEN_N0_proactive_key_caching STR_INT32_LEN + #define NVEE_LEN_N0_disabled STR_INT32_LEN + #define NVEE_LEN_N0_pbss STR_INT32_LEN + #define NVEE_LEN_N0_wps_disabled STR_INT32_LEN + #define NVEE_LEN_N0_fils_dh_group STR_INT32_LEN + #define NVEE_LEN_N0_ieee80211w STR_INT32_LEN + #define NVEE_LEN_N0_id_str (256 + PARAM_STR_EXTRA) + #define NVEE_LEN_N0_ignore_broadcast_ssid STR_INT32_LEN + #define NVEE_LEN_N0_dtim_period STR_INT32_LEN + #define NVEE_LEN_N0_beacon_int STR_INT32_LEN + #define NVEE_LEN_N0_isolate STR_INT32_LEN + #define NVEE_LEN_N0_ap_max_inactivity STR_INT32_LEN + #define NVEE_LEN_N0_ap_power (8 + PARAM_STR_EXTRA) // auto, ... + #define NVEE_LEN_N0_update_identifier STR_INT32_LEN + #define NVEE_LEN_N0_roaming_consortium_selection (15 + PARAM_STR_EXTRA) // MAX_ROAMING_CONS_OI_LEN + +/** + * mac_addr - MAC address policy + * + * 0 = use permanent MAC address + * 1 = use random MAC address for each ESS connection + * 2 = like 1, but maintain OUI (with local admin bit set) + * + * Internally, special value -1 is used to indicate that the parameter + * was not specified in the configuration (i.e., default behavior is + * followed). + */ + #define NVEE_LEN_N0_mac_addr STR_INT32_LEN + #define NVEE_LEN_N0_mesh_basic_rates (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_dot11MeshMaxRetries STR_INT32_LEN + #define NVEE_LEN_N0_dot11MeshRetryTimeout STR_INT32_LEN + #define NVEE_LEN_N0_dot11MeshConfirmTimeout STR_INT32_LEN + #define NVEE_LEN_N0_dot11MeshHoldingTimeout STR_INT32_LEN + #define NVEE_LEN_N0_mesh_rssi_threshold STR_INT32_LEN // -255 ~1 + #define NVEE_LEN_N0_wpa_ptk_rekey STR_INT32_LEN + #define NVEE_LEN_N0_wpa_deny_ptk0_rekey STR_INT32_LEN + #define NVEE_LEN_N0_group_rekey STR_INT32_LEN + #define NVEE_LEN_N0_dpp_connector (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_dpp_netaccesskey (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_dpp_netaccesskey_expiry STR_INT32_LEN + #define NVEE_LEN_N0_dpp_csign (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_owe_group STR_INT32_LEN + #define NVEE_LEN_N0_owe_only STR_INT32_LEN + #define NVEE_LEN_N0_owe_ptk_workaround STR_INT32_LEN + #define NVEE_LEN_N0_multi_ap_backhaul_sta STR_INT32_LEN + #define NVEE_LEN_N0_ft_eap_pmksa_caching STR_INT32_LEN + #define NVEE_LEN_N0_beacon_prot STR_INT32_LEN + #define NVEE_LEN_N0_transition_disable STR_INT32_LEN + #define NVEE_LEN_N0_sae_pk STR_INT32_LEN + #define NVEE_LEN_N0_wifi_mode STR_INT32_LEN + +/** + * mixed_cell - Whether mixed cells are allowed + * + * This option can be used to configure whether so called mixed cells, + * i.e., networks that use both plaintext and encryption in the same + * SSID, are allowed. This is disabled (0) by default. Enable by + * setting this to 1. + */ + #define NVEE_LEN_N0_mixed_cell STR_INT32_LEN + #define NVEE_LEN_N0_ht STR_INT32_LEN + #define NVEE_LEN_N0_ht40 STR_INT32_LEN + #define NVEE_LEN_N0_disable_ht STR_INT32_LEN + #define NVEE_LEN_N0_disable_ht40 STR_INT32_LEN + #define NVEE_LEN_N0_disable_sgi STR_INT32_LEN + #define NVEE_LEN_N0_disable_ldpc STR_INT32_LEN + #define NVEE_LEN_N0_ht40_intolerant STR_INT32_LEN + #define NVEE_LEN_N0_tx_stbc STR_INT32_LEN + #define NVEE_LEN_N0_rx_stbc STR_INT32_LEN + #define NVEE_LEN_N0_disable_max_amsdu STR_INT32_LEN + #define NVEE_LEN_N0_ampdu_factor STR_INT32_LEN + #define NVEE_LEN_N0_ampdu_density STR_INT32_LEN + #define NVEE_LEN_N0_ht_mcs (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_max_oper_chwidth STR_INT32_LEN + #define NVEE_LEN_N0_vht_center_freq1 STR_INT32_LEN + #define NVEE_LEN_N0_vht_center_freq2 STR_INT32_LEN + #define NVEE_LEN_N0_vht STR_INT32_LEN + #define NVEE_LEN_N0_disable_vht STR_INT32_LEN + #define NVEE_LEN_N0_vht_capa STR_INT32_LEN + #define NVEE_LEN_N0_vht_capa_mask STR_INT32_LEN + #define NVEE_LEN_N0_vht_rx_mcs_nss_1 STR_INT32_LEN + #define NVEE_LEN_N0_vht_rx_mcs_nss_2 STR_INT32_LEN + #define NVEE_LEN_N0_vht_rx_mcs_nss_3 STR_INT32_LEN + #define NVEE_LEN_N0_vht_rx_mcs_nss_4 STR_INT32_LEN + #define NVEE_LEN_N0_vht_rx_mcs_nss_5 STR_INT32_LEN + #define NVEE_LEN_N0_vht_rx_mcs_nss_6 STR_INT32_LEN + #define NVEE_LEN_N0_vht_rx_mcs_nss_7 STR_INT32_LEN + #define NVEE_LEN_N0_vht_rx_mcs_nss_8 STR_INT32_LEN + #define NVEE_LEN_N0_vht_tx_mcs_nss_1 STR_INT32_LEN + #define NVEE_LEN_N0_vht_tx_mcs_nss_2 STR_INT32_LEN + #define NVEE_LEN_N0_vht_tx_mcs_nss_3 STR_INT32_LEN + #define NVEE_LEN_N0_vht_tx_mcs_nss_4 STR_INT32_LEN + #define NVEE_LEN_N0_vht_tx_mcs_nss_5 STR_INT32_LEN + #define NVEE_LEN_N0_vht_tx_mcs_nss_6 STR_INT32_LEN + #define NVEE_LEN_N0_vht_tx_mcs_nss_7 STR_INT32_LEN + #define NVEE_LEN_N0_vht_tx_mcs_nss_8 STR_INT32_LEN + #define NVEE_LEN_N0_ca_cert STR_INT32_LEN + #define NVEE_LEN_N0_ca_path STR_INT32_LEN + #define NVEE_LEN_N0_client_cert STR_INT32_LEN + #define NVEE_LEN_N0_private_key STR_INT32_LEN + #define NVEE_LEN_N0_private_key_passwd STR_INT32_LEN + #define NVEE_LEN_N0_dh_file STR_INT32_LEN + #define NVEE_LEN_N0_subject_match STR_INT32_LEN + #define NVEE_LEN_N0_altsubject_match STR_INT32_LEN + #define NVEE_LEN_N0_domain_suffix_match STR_INT32_LEN + #define NVEE_LEN_N0_domain_match STR_INT32_LEN + #define NVEE_LEN_N0_ca_cert2 STR_INT32_LEN + #define NVEE_LEN_N0_ca_path2 STR_INT32_LEN + #define NVEE_LEN_N0_client_cert2 STR_INT32_LEN + #define NVEE_LEN_N0_private_key2 STR_INT32_LEN + #define NVEE_LEN_N0_private_key2_passwd STR_INT32_LEN + #define NVEE_LEN_N0_dh_file2 STR_INT32_LEN + #define NVEE_LEN_N0_subject_match2 STR_INT32_LEN + #define NVEE_LEN_N0_altsubject_match2 STR_INT32_LEN + #define NVEE_LEN_N0_domain_suffix_match2 STR_INT32_LEN + #define NVEE_LEN_N0_domain_match2 STR_INT32_LEN + #define NVEE_LEN_N0_pcsc (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N0_pin STR_INT32_LEN + #define NVEE_LEN_N0_engine_id STR_INT32_LEN + #define NVEE_LEN_N0_key_id STR_INT32_LEN + #define NVEE_LEN_N0_cert_id STR_INT32_LEN + #define NVEE_LEN_N0_ca_cert_id STR_INT32_LEN + #define NVEE_LEN_N0_key2_id STR_INT32_LEN + #define NVEE_LEN_N0_pin2 STR_INT32_LEN + #define NVEE_LEN_N0_engine2_id STR_INT32_LEN + #define NVEE_LEN_N0_cert2_id STR_INT32_LEN + #define NVEE_LEN_N0_ca_cert2_id STR_INT32_LEN + #define NVEE_LEN_N0_engine STR_INT32_LEN + #define NVEE_LEN_N0_engine2 STR_INT32_LEN + #define NVEE_LEN_N0_openssl_ciphers STR_INT32_LEN + #define NVEE_LEN_N0_erp STR_INT32_LEN + #define NVEE_LEN_N0_erp STR_INT32_LEN + #define NVEE_LEN_N0_FST_CONNECT STR_INT32_LEN + #define NVEE_LEN_N0_ASSOC_CH STR_INT32_LEN + #if 0 // def CONFIG_MACSEC + #define NVEE_LEN_N0_macsec_policy STR_INT32_LEN + #define NVEE_LEN_N0_macsec_integ_only STR_INT32_LEN + #define NVEE_LEN_N0_macsec_port STR_INT32_LEN + #define NVEE_LEN_N0_mka_priority STR_INT32_LEN + #endif /* CONFIG_MACSEC */ + +// ============================================================================= + +// ============================================================================= +// Supplicant Network Profile 1 +// ============================================================================= + #define NVEE_LEN_N1_profile STR_INT32_LEN + #define NVEE_LEN_N1_ssid (32 * 2 + PARAM_STR_EXTRA) + #define NVEE_LEN_N1_scan_ssid STR_INT32_LEN + #define NVEE_LEN_N1_bssid (17 + PARAM_STR_EXTRA) // MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" + #define NVEE_LEN_N1_bssid_hint STR_INT32_LEN + #define NVEE_LEN_N1_bssid_blacklist STR_INT32_LEN + #define NVEE_LEN_N1_bssid_whitelist STR_INT32_LEN + #define NVEE_LEN_N1_psk (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_N1_mem_only_psk STR_INT32_LEN + +/** + * sae_password - SAE password + * + * This parameter can be used to set a password for SAE. By default, the + * passphrase value is used if this separate parameter is not used, but + * passphrase follows the WPA-PSK constraints (8..63 characters) even + * though SAE passwords do not have such constraints. + */ + #define NVEE_LEN_N1_sae_password (128 + 2 + PARAM_STR_EXTRA) + +/** + * sae_password_id - SAE password identifier + * + * This parameter can be used to identify a specific SAE password. If + * not included, the default SAE password is used instead. + */ + #define NVEE_LEN_N1_sae_password_id (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_N1_proto (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_N1_key_mgmt (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_N1_bg_scan_period STR_INT32_LEN + #define NVEE_LEN_N1_pairwise (50 + PARAM_STR_EXTRA) // wpa_config_write_cipher +// wpa_config_write_cipher + #define NVEE_LEN_N1_group (50 + PARAM_STR_EXTRA) // wpa_config_write_cipher +// wpa_config_write_cipher + #define NVEE_LEN_N1_group_mgmt (50 + PARAM_STR_EXTRA) // wpa_config_write_cipher + #define NVEE_LEN_N1_auth_alg (30 + PARAM_STR_EXTRA) + +/** + * bgscan - Background scan and roaming parameters or %NULL if none + * + * This is an optional set of parameters for background scanning and + * roaming within a network (ESS) in following format: + * : + */ + #define NVEE_LEN_N1_bgscan (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_autoscan (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + +/** + * scan_freq - Array of frequencies to scan or %NULL for all + * + * This is an optional zero-terminated array of frequencies in + * megahertz (MHz) to include in scan requests when searching for this + * network. This can be used to speed up scanning when the network is + * known to not use all possible channels. + */ + #define NVEE_LEN_N1_scan_freq (640 + PARAM_STR_EXTRA) // Unknown Size (expected size: channel count * 5, 2Ghz + 5Ghz) // 56 EA : 56(CH)*10(int)+56(space)+24(Margin) + #define NVEE_LEN_N1_freq_list (640 + PARAM_STR_EXTRA) // Unknown Size (expected size: channel count * 5, 2Ghz + 5Ghz) // 56 EA : 56(CH)*10(int)+56(space)+24(Margin) + #define NVEE_LEN_N1_eap (100 + PARAM_STR_EXTRA) // wpa_config_write_eap + #define NVEE_LEN_N1_identity (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_anonymous_identity (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_imsi_identity (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_password (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_phase1 (20 + PARAM_STR_EXTRA) // Unknown Size (expected size: aboud: 20) + #define NVEE_LEN_N1_phase2 (20 + PARAM_STR_EXTRA) // Unknown Size (expected size: aboud: 20) + #define NVEE_LEN_N1_eapol_flags STR_INT32_LEN + #define NVEE_LEN_N1_wep_key0 (26 + PARAM_STR_EXTRA) // MAX_WEP_KEY_LEN + #define NVEE_LEN_N1_wep_key1 (26 + PARAM_STR_EXTRA) // MAX_WEP_KEY_LEN + #define NVEE_LEN_N1_wep_key2 (26 + PARAM_STR_EXTRA) // MAX_WEP_KEY_LEN + #define NVEE_LEN_N1_wep_key3 (26 + PARAM_STR_EXTRA) // MAX_WEP_KEY_LEN + #define NVEE_LEN_N1_wep_tx_keyidx STR_INT32_LEN + #define NVEE_LEN_N1_priority STR_INT32_LEN + #define NVEE_LEN_N1_eap_workaround STR_INT32_LEN + #define NVEE_LEN_N1_pac_file (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_fragment_size STR_INT32_LEN + #define NVEE_LEN_N1_ocsp STR_INT32_LEN + #define NVEE_LEN_N1_sim_num STR_INT32_LEN + #define NVEE_LEN_N1_mode STR_INT32_LEN + #define NVEE_LEN_N1_no_auto_peer STR_INT32_LEN + #define NVEE_LEN_N1_frequency STR_INT32_LEN + #define NVEE_LEN_N1_fixed_freq STR_INT32_LEN + #define NVEE_LEN_N1_acs STR_INT32_LEN + #define NVEE_LEN_N1_proactive_key_caching STR_INT32_LEN + #define NVEE_LEN_N1_disabled STR_INT32_LEN + #define NVEE_LEN_N1_pbss STR_INT32_LEN + #define NVEE_LEN_N1_wps_disabled STR_INT32_LEN + #define NVEE_LEN_N1_fils_dh_group STR_INT32_LEN + #define NVEE_LEN_N1_ieee80211w STR_INT32_LEN + #define NVEE_LEN_N1_id_str (256 + PARAM_STR_EXTRA) + #define NVEE_LEN_N1_ignore_broadcast_ssid STR_INT32_LEN + #define NVEE_LEN_N1_dtim_period STR_INT32_LEN + #define NVEE_LEN_N1_beacon_int STR_INT32_LEN + #define NVEE_LEN_N1_isolate STR_INT32_LEN + #define NVEE_LEN_N1_ap_max_inactivity STR_INT32_LEN + #define NVEE_LEN_N1_ap_power (8 + PARAM_STR_EXTRA) // auto, ... + #define NVEE_LEN_N1_update_identifier STR_INT32_LEN + #define NVEE_LEN_N1_roaming_consortium_selection (15 + PARAM_STR_EXTRA) // MAX_ROAMING_CONS_OI_LEN + +/** + * mac_addr - MAC address policy + * + * 0 = use permanent MAC address + * 1 = use random MAC address for each ESS connection + * 2 = like 1, but maintain OUI (with local admin bit set) + * + * Internally, special value -1 is used to indicate that the parameter + * was not specified in the configuration (i.e., default behavior is + * followed). + */ + #define NVEE_LEN_N1_mac_addr STR_INT32_LEN + #define NVEE_LEN_N1_mesh_basic_rates (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_dot11MeshMaxRetries STR_INT32_LEN + #define NVEE_LEN_N1_dot11MeshRetryTimeout STR_INT32_LEN + #define NVEE_LEN_N1_dot11MeshConfirmTimeout STR_INT32_LEN + #define NVEE_LEN_N1_dot11MeshHoldingTimeout STR_INT32_LEN + #define NVEE_LEN_N1_mesh_rssi_threshold STR_INT32_LEN // -255 ~1 + #define NVEE_LEN_N1_wpa_ptk_rekey STR_INT32_LEN + #define NVEE_LEN_N1_wpa_deny_ptk0_rekey STR_INT32_LEN + #define NVEE_LEN_N1_group_rekey STR_INT32_LEN + #define NVEE_LEN_N1_dpp_connector (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_dpp_netaccesskey (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_dpp_netaccesskey_expiry STR_INT32_LEN + #define NVEE_LEN_N1_dpp_csign (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_owe_group STR_INT32_LEN + #define NVEE_LEN_N1_owe_only STR_INT32_LEN + #define NVEE_LEN_N1_owe_ptk_workaround STR_INT32_LEN + #define NVEE_LEN_N1_multi_ap_backhaul_sta STR_INT32_LEN + #define NVEE_LEN_N1_ft_eap_pmksa_caching STR_INT32_LEN + #define NVEE_LEN_N1_beacon_prot STR_INT32_LEN + #define NVEE_LEN_N1_transition_disable STR_INT32_LEN + #define NVEE_LEN_N1_sae_pk STR_INT32_LEN + #define NVEE_LEN_N1_wifi_mode STR_INT32_LEN + +/** + * mixed_cell - Whether mixed cells are allowed + * + * This option can be used to configure whether so called mixed cells, + * i.e., networks that use both plaintext and encryption in the same + * SSID, are allowed. This is disabled (0) by default. Enable by + * setting this to 1. + */ + #define NVEE_LEN_N1_mixed_cell STR_INT32_LEN + #define NVEE_LEN_N1_ht STR_INT32_LEN + #define NVEE_LEN_N1_ht40 STR_INT32_LEN + #define NVEE_LEN_N1_disable_ht STR_INT32_LEN + #define NVEE_LEN_N1_disable_ht40 STR_INT32_LEN + #define NVEE_LEN_N1_disable_sgi STR_INT32_LEN + #define NVEE_LEN_N1_disable_ldpc STR_INT32_LEN + #define NVEE_LEN_N1_ht40_intolerant STR_INT32_LEN + #define NVEE_LEN_N1_tx_stbc STR_INT32_LEN + #define NVEE_LEN_N1_rx_stbc STR_INT32_LEN + #define NVEE_LEN_N1_disable_max_amsdu STR_INT32_LEN + #define NVEE_LEN_N1_ampdu_factor STR_INT32_LEN + #define NVEE_LEN_N1_ampdu_density STR_INT32_LEN + #define NVEE_LEN_N1_ht_mcs (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_max_oper_chwidth STR_INT32_LEN + #define NVEE_LEN_N1_vht_center_freq1 STR_INT32_LEN + #define NVEE_LEN_N1_vht_center_freq2 STR_INT32_LEN + #define NVEE_LEN_N1_vht STR_INT32_LEN + #define NVEE_LEN_N1_disable_vht STR_INT32_LEN + #define NVEE_LEN_N1_vht_capa STR_INT32_LEN + #define NVEE_LEN_N1_vht_capa_mask STR_INT32_LEN + #define NVEE_LEN_N1_vht_rx_mcs_nss_1 STR_INT32_LEN + #define NVEE_LEN_N1_vht_rx_mcs_nss_2 STR_INT32_LEN + #define NVEE_LEN_N1_vht_rx_mcs_nss_3 STR_INT32_LEN + #define NVEE_LEN_N1_vht_rx_mcs_nss_4 STR_INT32_LEN + #define NVEE_LEN_N1_vht_rx_mcs_nss_5 STR_INT32_LEN + #define NVEE_LEN_N1_vht_rx_mcs_nss_6 STR_INT32_LEN + #define NVEE_LEN_N1_vht_rx_mcs_nss_7 STR_INT32_LEN + #define NVEE_LEN_N1_vht_rx_mcs_nss_8 STR_INT32_LEN + #define NVEE_LEN_N1_vht_tx_mcs_nss_1 STR_INT32_LEN + #define NVEE_LEN_N1_vht_tx_mcs_nss_2 STR_INT32_LEN + #define NVEE_LEN_N1_vht_tx_mcs_nss_3 STR_INT32_LEN + #define NVEE_LEN_N1_vht_tx_mcs_nss_4 STR_INT32_LEN + #define NVEE_LEN_N1_vht_tx_mcs_nss_5 STR_INT32_LEN + #define NVEE_LEN_N1_vht_tx_mcs_nss_6 STR_INT32_LEN + #define NVEE_LEN_N1_vht_tx_mcs_nss_7 STR_INT32_LEN + #define NVEE_LEN_N1_vht_tx_mcs_nss_8 STR_INT32_LEN + #define NVEE_LEN_N1_ca_cert STR_INT32_LEN + #define NVEE_LEN_N1_ca_path STR_INT32_LEN + #define NVEE_LEN_N1_client_cert STR_INT32_LEN + #define NVEE_LEN_N1_private_key STR_INT32_LEN + #define NVEE_LEN_N1_private_key_passwd STR_INT32_LEN + #define NVEE_LEN_N1_dh_file STR_INT32_LEN + #define NVEE_LEN_N1_subject_match STR_INT32_LEN + #define NVEE_LEN_N1_altsubject_match STR_INT32_LEN + #define NVEE_LEN_N1_domain_suffix_match STR_INT32_LEN + #define NVEE_LEN_N1_domain_match STR_INT32_LEN + #define NVEE_LEN_N1_ca_cert2 STR_INT32_LEN + #define NVEE_LEN_N1_ca_path2 STR_INT32_LEN + #define NVEE_LEN_N1_client_cert2 STR_INT32_LEN + #define NVEE_LEN_N1_private_key2 STR_INT32_LEN + #define NVEE_LEN_N1_private_key2_passwd STR_INT32_LEN + #define NVEE_LEN_N1_dh_file2 STR_INT32_LEN + #define NVEE_LEN_N1_subject_match2 STR_INT32_LEN + #define NVEE_LEN_N1_altsubject_match2 STR_INT32_LEN + #define NVEE_LEN_N1_domain_suffix_match2 STR_INT32_LEN + #define NVEE_LEN_N1_domain_match2 STR_INT32_LEN + #define NVEE_LEN_N1_pcsc (32 + PARAM_STR_EXTRA) // Unknown Size (expected size) + #define NVEE_LEN_N1_pin STR_INT32_LEN + #define NVEE_LEN_N1_engine_id STR_INT32_LEN + #define NVEE_LEN_N1_key_id STR_INT32_LEN + #define NVEE_LEN_N1_cert_id STR_INT32_LEN + #define NVEE_LEN_N1_ca_cert_id STR_INT32_LEN + #define NVEE_LEN_N1_key2_id STR_INT32_LEN + #define NVEE_LEN_N1_pin2 STR_INT32_LEN + #define NVEE_LEN_N1_engine2_id STR_INT32_LEN + #define NVEE_LEN_N1_cert2_id STR_INT32_LEN + #define NVEE_LEN_N1_ca_cert2_id STR_INT32_LEN + #define NVEE_LEN_N1_engine STR_INT32_LEN + #define NVEE_LEN_N1_engine2 STR_INT32_LEN + #define NVEE_LEN_N1_openssl_ciphers STR_INT32_LEN + #define NVEE_LEN_N1_erp STR_INT32_LEN + #if 0 // def CONFIG_MACSEC + #define NVEE_LEN_N1_macsec_policy STR_INT32_LEN + #define NVEE_LEN_N1_macsec_integ_only STR_INT32_LEN + #define NVEE_LEN_N1_macsec_port STR_INT32_LEN + #define NVEE_LEN_N1_mka_priority STR_INT32_LEN + #endif /* CONFIG_MACSEC */ + #define NVEE_LEN_sleep_mgmt_mode STR_INT32_LEN + #define NVEE_LEN_sleep_mgmt_ddps STR_INT32_LEN + #define NVEE_LEN_sleep_mgmt_ab_wf_conn_retry STR_INT32_LEN + #define NVEE_LEN_sleep_mgmt_abnorm_stop STR_INT32_LEN + #define NVEE_LEN_sleep_mgmt_ip_condition STR_INT32_LEN + #define NVEE_LEN_abn_chk_conn_wait_name STR_INT32_LEN + + #define NVEE_LEN_abn_chk_dhcp_rsp_wait_name STR_INT32_LEN + #define NVEE_LEN_abn_chk_arp_rsp_wait_name STR_INT32_LEN + #define NVEE_LEN_abn_chk_fail_wait_name STR_INT32_LEN + #define NVEE_LEN_abn_chk_conn_retry_cnt_name STR_INT32_LEN + +// syscfg +//= ============================================================================= + #define HOSTNAME_MAX_LEN 32 + #define DHCPC_HOSTNAME_MAX_LEN HOSTNAME_MAX_LEN + #define SNTP_SERVER_DOMAIN_MAX_LEN HOSTNAME_MAX_LEN + #define TAG_DBG_TXPWR_2G 28 + #define TAG_DBG_TXPWR_5G 56 + #define TAG_DBG_TXPWR_5G_FLG 28 + + #define NVEE_LEN_INITWLAN STR_INT32_LEN + #define NVEE_LEN_SYSMODE STR_INT32_LEN + #define NVEE_LEN_SWITCH_SYSMODE STR_INT32_LEN + #define NVEE_LEN_0_MAC_SP (12 + PARAM_STR_EXTRA) + #define NVEE_LEN_0_NETMODE STR_INT32_LEN + #define NVEE_LEN_0_IP_Address PARAM_IPADDR_LEN + #define NVEE_LEN_0_NETMASK PARAM_IPADDR_LEN + #define NVEE_LEN_0_GATEWAY PARAM_IPADDR_LEN + #define NVEE_LEN_0_DNSSVR PARAM_IPADDR_LEN + #define NVEE_LEN_0_DNSSVR2 PARAM_IPADDR_LEN + #define NVEE_LEN_0_TEMP_STATIC_IP STR_INT32_LEN + +//= =========== + + #define NVEE_LEN_1_NETMODE STR_INT32_LEN + #define NVEE_LEN_1_IP_Address PARAM_IPADDR_LEN + #define NVEE_LEN_1_NETMASK PARAM_IPADDR_LEN + #define NVEE_LEN_1_GATEWAY PARAM_IPADDR_LEN + #define NVEE_LEN_1_DNSSVR PARAM_IPADDR_LEN + #define NVEE_LEN_1_DNSSVR2 PARAM_IPADDR_LEN + +/* DHCP Server (IPv4) */ + #define NVEE_LEN_1_DHCP_SERVER_RUN STR_INT32_LEN + #define NVEE_LEN_1_DHCP_SERVER_START_IP PARAM_IPADDR_LEN + #define NVEE_LEN_1_DHCP_SERVER_END_IP PARAM_IPADDR_LEN + #define NVEE_LEN_1_DHCP_SERVER_LEASE_TIME STR_INT32_LEN + #define NVEE_LEN_1_DHCP_SERVER_DNS PARAM_IPADDR_LEN + +/* IPv6 */ + #define NVEE_LEN_1_IPV6_ADDRESS PARAM_IP6ADDR_LEN + +/* DHCP Server (IPv6) */ + #define NVEE_LEN_1_DHCPV6_SERVER_START_IP PARAM_IP6ADDR_LEN + #define NVEE_LEN_1_DHCPV6_SERVER_END_IP PARAM_IP6ADDR_LEN + #define NVEE_LEN_1_DHCPV6_SERVER_DNS PARAM_IP6ADDR_LEN + #define NVEE_LEN_1_DHCPV6_SERVER_LEASE_TIME STR_INT32_LEN + +/* Timezone */ + #define NVEE_LEN_TIMEZONE STR_INT32_LEN + +/* DHCP Client hostname */ + #define NVEE_LEN_DHCPC_HOSTNAME (DHCPC_HOSTNAME_MAX_LEN + PARAM_STR_EXTRA) + +/* SNTP Server */ + #define NVEE_LEN_SNTP_SERVER_DOMAIN (SNTP_SERVER_DOMAIN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_SNTP_SERVER1_DOMAIN (SNTP_SERVER_DOMAIN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_SNTP_SERVER2_DOMAIN (SNTP_SERVER_DOMAIN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_SNTP_SYNC_PERIOD STR_INT32_LEN + #define NVEE_LEN_SNTP_RUN_FLAG STR_INT32_LEN + #define NVEE_LEN_DBG_TXPWR_2G_OFDM (TAG_DBG_TXPWR_2G + PARAM_STR_EXTRA) + #define NVEE_LEN_DBG_TXPWR_2G_DSSS (TAG_DBG_TXPWR_2G + PARAM_STR_EXTRA) + #define NVEE_LEN_DBG_TXPWR_5G (TAG_DBG_TXPWR_5G + PARAM_STR_EXTRA) + #define NVEE_LEN_DBG_TXPWR_5G_FLG (TAG_DBG_TXPWR_5G_FLG + PARAM_STR_EXTRA) + +/* UART Config */ +/* UART2 */ + #define NVEE_LEN_UART2_BAUDRATE (STR_INT32_LEN) + #define NVEE_LEN_UART2_BITS (STR_INT32_LEN) + #define NVEE_LEN_UART2_PARITY (STR_INT32_LEN) + #define NVEE_LEN_UART2_STOPBIT (STR_INT32_LEN) + #define NVEE_LEN_UART2_FLOWCTRL (STR_INT32_LEN) + +/* UART3 */ + #define NVEE_LEN_UART3_BAUDRATE (STR_INT32_LEN) + #define NVEE_LEN_UART3_BITS (STR_INT32_LEN) + #define NVEE_LEN_UART3_PARITY (STR_INT32_LEN) + #define NVEE_LEN_UART3_STOPBIT (STR_INT32_LEN) + #define NVEE_LEN_UART3_FLOWCTRL (STR_INT32_LEN) + +// appcfg +//= ============================================================================= + #define MATT_CLIENT_ID_MAX_LEN 40 + #define MATT_TLS_ALPN_MAX_LEN 24 + #define MATT_TLS_SNI_MAX_LEN 64 + #define MATT_TLS_CSUIT_MAX_LEN 84 + + #define NVEE_LEN_MQTT_BROKER (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_QOS STR_INT32_LEN + #define NVEE_LEN_MQTT_SUB_TOPIC (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_SUB_TOPIC0 (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_SUB_TOPIC1 (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_SUB_TOPIC2 (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_SUB_TOPIC3 (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_SUB_TOPIC_NUM STR_INT32_LEN + #define NVEE_LEN_MQTT_PUB_TOPIC (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_TLS STR_INT32_LEN + #define NVEE_LEN_MQTT_USERNAME (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_PASSWORD (160 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_WILL_TOPIC (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_WILL_MSG (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_SUB_CID (MATT_CLIENT_ID_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_PUB_CID (MATT_CLIENT_ID_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_TLS_ALPN0 (MATT_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_TLS_ALPN1 (MATT_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_TLS_ALPN2 (MATT_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_TLS_SNI (MATT_TLS_SNI_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_MQTT_TLS_CSUIT_NUM STR_INT32_LEN + #define NVEE_LEN_MQTT_TLS_CSUIT (MATT_TLS_CSUIT_MAX_LEN + PARAM_STR_EXTRA) + +/* HTTP Client */ + #define HTTPC_TLS_ALPN_MAX_NUM 3 + #define HTTPC_TLS_ALPN_MAX_LEN 24 + #define HTTPC_TLS_SNI_MAX_LEN 64 + + #define NVEE_LEN_HTTPC_TLS_ALPN0 (HTTPC_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_HTTPC_TLS_ALPN1 (HTTPC_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_HTTPC_TLS_ALPN2 (HTTPC_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_HTTPC_TLS_SNI (HTTPC_TLS_SNI_MAX_LEN + PARAM_STR_EXTRA) + +/* OTA update */ + #define OTA_TLS_ALPN_MAX_NUM 3 + #define OTA_TLS_ALPN_MAX_LEN 24 + #define OTA_TLS_SNI_MAX_LEN 64 + + #define NVEE_LEN_OTA_TLS_ALPN0 (OTA_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_OTA_TLS_ALPN1 (OTA_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_OTA_TLS_ALPN2 (OTA_TLS_ALPN_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_OTA_TLS_SNI (OTA_TLS_SNI_MAX_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_URL (256 + PARAM_STR_EXTRA) + +/* ATCMD: TCP Server, Client, and UDP Session */ + #define NW_TR_PIPADDR_LEN (46 + PARAM_STR_EXTRA) + #define NVEE_LEN_ATC_NW_TR_PIPADDR NW_TR_PIPADDR_LEN + +/* ATCMD: TLS Client */ + #define NW_TLSC_CA_CERT_NAME_LEN 32 + #define NW_TLSC_CERT_NAME_LEN 32 + #define NW_TLSC_HOST_NAME_LEN 64 + #define NW_TLSC_PEER_IPADDR_LEN 64 + #define NVEE_LEN_ATC_NW_TLSC_CA_CERT_NAME (NW_TLSC_CA_CERT_NAME_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_ATC_NW_TLSC_CERT_NAME (NW_TLSC_CERT_NAME_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_ATC_NW_TLSC_HOST_NAME (NW_TLSC_HOST_NAME_LEN + PARAM_STR_EXTRA) + #define NVEE_LEN_ATC_NW_TLSC_PIPADDR (NW_TLSC_PEER_IPADDR_LEN + PARAM_STR_EXTRA) + +/* BLE-COMBO : BLE Provisioning - provisioning status */ + #define NVEE_LEN_BLE_COMBO_PROVISIONED (STR_INT32_LEN) + #define NVEE_LEN_BLE_COMBO_PROV_SRV_IP (PARAM_IPADDR_LEN) + #define NVEE_LEN_BLE_COMBO_PROV_SRV_PORT (STR_INT32_LEN) + +/* BLE-COMBO : For Gas Leak sensor sample */ + #define NVEE_LEN_BLE_COMBO_SENSOR_STARTED (STR_INT32_LEN) + +/* BLE-COMBO : For Sensor gateway sample */ + #define NVEE_LEN_BLE_COMBO_SENSOR_GW_UDP_SVR_IP (PARAM_IPADDR_LEN) + #define NVEE_LEN_BLE_COMBO_SENSOR_GW_UDP_SVR_PORT (STR_INT32_LEN) + +/* BLE-COMBO : For TCPC DPM sample */ + #define NVEE_LEN_BLE_COMBO_TCPC_SVR_IP (PARAM_IPADDR_LEN) + #define NVEE_LEN_BLE_COMBO_TCPC_SVR_PORT (STR_INT32_LEN) + +/* BLE-COMBO : For OTA */ + #define OTA_HTTP_URL_LENGTH 256 + #define NVEE_LEN_BLE_COMBO_OTA_URI_RTOS (OTA_HTTP_URL_LENGTH) + #define NVEE_LEN_BLE_COMBO_OTA_URI_BLE (OTA_HTTP_URL_LENGTH) + #define NVEE_LEN_DPM_REG_NAME_TIMER (STR_INT32_LEN) + #define NVEE_LEN_DPM_MNG_UDPC_SVR_IP (PARAM_IPADDR_LEN) + #define NVEE_LEN_DPM_MNG_UDPC_SVR_PORT (STR_INT32_LEN) + +/* Apps WiFi Provisioning for Mobile App */ + #define NVEE_LEN_APP_APPTHINGNAME (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_APP_SETSLEEPMODE STR_INT32_LEN + #define NVEE_LEN_APP_SLEEPMODERTCTIME STR_INT32_LEN + #define NVEE_LEN_APP_SETUSEDPM STR_INT32_LEN + +/* TCP Client application */ + #define NVEE_LEN_APP_TCPC_ACTIVE (UINT32_LEN) + #define NVEE_LEN_APP_TCPC_PEER_IP_ADDR (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_APP_TCPC_PEER_PORT (UINT32_LEN) + #define NVEE_LEN_APP_TCPC_SEND_PERIOD (UINT32_LEN) + #define NVEE_LEN_APP_TCPC_SEND_DATA_SIZE (UINT32_LEN) + #define NVEE_LEN_APP_TCPC_AUTO_RESTART_AT_EXIT (UINT32_LEN) + #define NVEE_LEN_APP_TCPC_KA_ENABLE (UINT32_LEN) + #define NVEE_LEN_APP_TCPC_KA_IDLE_TIME (UINT32_LEN) + #define NVEE_LEN_APP_TCPC_KA_INTVL_TIME (UINT32_LEN) + #define NVEE_LEN_APP_TCPC_KA_MAX_PROBES (UINT32_LEN) + +// blecfg + +/* BD address is saved in next format: aa:bb:cc:dd:ee:ff */ + #define NVEE_LEN_BLECFG_BD_ADDR (17 + PARAM_STR_EXTRA) + +// blesec + + #define NVEE_LEN_BLESEC_BOOT_DATA (48) + #define NVEE_LEN_BLESEC_BONDING_DATA (80 + 16) // BOND DATA + IV + + #define AWSIOT_CFG_THINGNAME "thingname" + #define AWSIOT_CFG_USE_FLEET_PROVISION "use_fp" + #define AWSIOT_CFG_FLEET_PROVISIONING_DEVICE_ID "fp_dev_id" + #define AWSIOT_CFG_FLEET_PROVISIONING_TEMPLATE_NAME "fp_tmpl_name" + #define AWSIOT_CFG_BROKER_URL "broker_url" + #define AWSIOT_CFG_BOARD_FEATURE "board_feature" + #define AWSIOT_CFG_LPORT "lport" + #define AWSIOT_CFG_PORT "port" + #define AWSIOT_CFG_STOPIC "stopic" + #define AWSIOT_CFG_PTOPIC "ptopic" + #define AWSIOT_CFG_DPM_SLEEP_MODE "sleepmode" + #define AWSIOT_CFG_USE_DPM "usedpm" + #define AWSIOT_CFG_RTC_TIME "rtc_time" + #define AWSIOT_CFG_DPM_KEEP_ALIVE_TIME "keepalive_time" + #define AWSIOT_CFG_USER_WAKE_UP_TIME "usr_wakeup_time" + #define AWSIOT_CFG_TIM_WAKE_UP_TIME "tim_wakeup_time" + #define AWSIOT_CFG_MCU_WAKEUP_PORT "mcu_wu_port" + #define AWSIOT_CFG_MCU_WAKEUP_PIN "mcu_wu_pin" + #define AWSIOT_CFG_SAVED_IP_ADDRESS "ipaddr" + #define AWSIOT_CFG_OTA_URL "ota_url" + #define AWSIOT_CFG_OTA_STATE "ota_state" + #define AWSIOT_CFG_OTA_RESULT "ota_result" + #define AWSIOT_CFG_OTA_FLAG "ota_flag" + #define AWSIOT_CFG_SLEEP_MODE2_RTC_TIME "sleep2rtc" + #define AWSIOT_CFG_FIRST_SNTP_TIME "sntp_time" + #define AWSIOT_CFG_SNTP_SUCCESS_FLAG "sntp_success" + #define AWSIOT_CFG_PING_CHECK "ping_check" + #define AWSIOT_CFG_DPM_AUTO "dpm_auto" + #define AWSIOT_CFG_THING_ATTIRIBUTE_0 "T_att0" + #define AWSIOT_CFG_THING_ATTIRIBUTE_1 "T_att1" + #define AWSIOT_CFG_THING_ATTIRIBUTE_2 "T_att2" + #define AWSIOT_CFG_THING_ATTIRIBUTE_3 "T_att3" + #define AWSIOT_CFG_THING_ATTIRIBUTE_4 "T_att4" + #define AWSIOT_CFG_THING_ATTIRIBUTE_5 "T_att5" + #define AWSIOT_CFG_THING_ATTIRIBUTE_6 "T_att6" + #define AWSIOT_CFG_THING_ATTIRIBUTE_7 "T_att7" + #define AWSIOT_CFG_THING_ATTIRIBUTE_8 "T_att8" + #define AWSIOT_CFG_THING_ATTIRIBUTE_9 "T_att9" + + #define NVEE_LEN_AWSIOT_CFG_THINGNAME (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_FLEET_PROVISIONING_DEVICE_ID (44 + PARAM_STR_EXTRA) + #define NVEE_LEN_AWSIOT_CFG_FLEET_PROV_TEMPLATE_NAME (64 + PARAM_STR_EXTRA) + + #define NVEE_LEN_BROKER_URL NVEE_LEN_URL + #define NVEE_LEN_BOARD_FEATURE 32 + #define NVEE_LEN_AWSIOT_CFG_OTA_URL NVEE_LEN_URL + #define NVEE_LEN_AWSIOT_CFG_SAVED_IP_ADDRESS PARAM_IPADDR_LEN + #define NVEE_LEN_FIRST_SNTP_TIME STR_INT32_LEN + #define NVEE_LEN_STOPIC (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_PTOPIC (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_MCU_WAKEUP_PORT 12 + #define NVEE_LEN_MCU_WAKEUP_PIN 12 + #define NVEE_LEN_THING_ATTRIBUTE 32 + #define MAX_THING_ATT 10 + + #define APP_NVRAM_CONFIG_DEV_PRIMARY_KEY "dev_prim_key" + #define APP_NVRAM_CONFIG_HOST_NAME "host_name" + #define APP_NVRAM_CONFIG_IOTHUB_CONN_STRING "iothub_conn_str" + #define APP_NVRAM_CONFIG_THINGNAME "thingname" + #define APP_NVRAM_DEVICE_CONNECTION_STRING "device_conn_str" + #define AZURE_NVRAM_CONFIG_CURRENT_OTA_VERSION "current_ota_ver" + #define AZURE_NVRAM_CONFIG_CURRENT_MCUOTA_VERSION "current_mcuota_ver" + #define AZURE_NVRAM_CONFIG_OTA_URL "ota_url" + #define AZURE_NVRAM_CONFIG_OTA_VERSION "ota_ver" + #define AZURE_NVRAM_CONFIG_MCUOTA_VERSION "mcuota_ver" + #define AZURE_NVRAM_CONFIG_PORT "az_port" + #define AZURE_NVRAM_CONFIG_OTA_FLAG "ota_flag" + #define AZURE_NVRAM_CONFIG_OTA_STATE "ota_state" + #define AZURE_NVRAM_CONFIG_OTA_RESULT "ota_result" + + #define NVEE_LEN_APP_NVRAM_CONFIG_DEV_PRIMARY_KEY (256 + PARAM_STR_EXTRA) + #define NVEE_LEN_APP_NVRAM_CONFIG_HOST_NAME (64 + PARAM_STR_EXTRA) + #define NVEE_LEN_APP_NVRAM_CONFIG_IOTHUB_CONN_STRING (512 + PARAM_STR_EXTRA) + #define NVEE_LEN_APP_NVRAM_CONFIG_THINGNAME (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_APP_NVRAM_DEVICE_CONNECTION_STRING (512 + PARAM_STR_EXTRA) + #define NVEE_LEN_AZURE_NVRAM_CONFIG_CURRENT_OTA_VERSION (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_AZURE_NVRAM_CONFIG_CURRENT_MCUOTA_VERSION (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_URL (256 + PARAM_STR_EXTRA) + #define NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_VERSION (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_AZURE_NVRAM_CONFIG_MCUOTA_VERSION (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_AZURE_NVRAM_CONFIG_PORT STR_INT32_LEN + #define NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_FLAG STR_INT32_LEN + #define NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_STATE STR_INT32_LEN + #define NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_RESULT STR_INT32_LEN + + #define WIFI_PROFILE_COMPLETE "profile_complete" + #define WIFI_PROFILE_COUNTRY_CODE "country_code" + #define WIFI_PROFILE_SYS_MODE "sysmode" + #define WIFI_PROFILE_BAND "band" + #define WIFI_PROFILE_CHANNEL "channel" + #define WIFI_PROFILE_WIFI_MODE "wifi_mode" + #define WIFI_PROFILE_PMF "pmf" + #define WIFI_PROFILE_ENABLE_DPM "enable_dpm" + #define WIFI_PROFILE_DPM_DEBUG_RUNTIME_FLAG "dpm_debug_enable" + #define WIFI_PROFILE_DPM_DPM_KEEPALIVE_TIME "dpm_keepalive_time" + #define WIFI_PROFILE_DPM_USER_WAKEUP_TIME "dpm_user_wakeup_time" + #define WIFI_PROFILE_DPM_TIM_WAKEUP_COUNT "dpm_TIM_wakeup_count" + #define WIFI_PROFILE_DPM_BLE_HIBERNATE "dpm_ble_hibernate" + #define WIFI_PROFILE_SSID_0 "ssid_0" + #define WIFI_PROFILE_SSID_1 "ssid_1" + #define WIFI_PROFILE_HIDDEN_SSID "hidden_ssid" + #define WIFI_PROFILE_PMF_0 "pmf_0" + #define WIFI_PROFILE_PMF_1 "pmf_1" + #define WIFI_PROFILE_SECURITY_0 "security_0" + #define WIFI_PROFILE_SECURITY_1 "security_1" + #define WIFI_PROFILE_ENCKEY_0 "password_0" + #define WIFI_PROFILE_ENCKEY_1 "password_1" + #define WIFI_PROFILE_WEPKEY0_0 "wep_key" + #define WIFI_PROFILE_WEPINDEX_0 "wep_key_idx" + #define WIFI_PROFILE_WEPTYPE_0 "wep_key_type" + #define WIFI_PROFILE_SAE_GROUPS_0 "sae_groups_0" + #define WIFI_PROFILE_SAE_GROUPS_1 "sae_groups_1" + #define WIFI_PROFILE_EAP_AUTH_MODE "eap_auth_mode" + #define WIFI_PROFILE_EAP_PHASE2 "eap_phase2" + #define WIFI_PROFILE_EAP_ID "eap_id" + #define WIFI_PROFILE_EAP_PW "eap_pw" + #define WIFI_PROFILE_P2P_SSID_POSTFIX "p2p_ssid_postfix" + #define WIFI_PROFILE_P2P_GROUP_IDLE "p2p_group_idle" + #define WIFI_PROFILE_P2P_LISTEN_CH "p2p_listen_chan" + #define WIFI_PROFILE_P2P_FIND_TIMEOUT "p2p_find_timeout" + #define WIFI_PROFILE_P2P_GO_INTENT "p2p_go_intent" + #define WIFI_PROFILE_NETMODE_0 "netmode_0" + #define WIFI_PROFILE_NETMODE_1 "netmode_1" + #define WIFI_PROFILE_IPADDR_0 "ipaddress_0" + #define WIFI_PROFILE_IPADDR_1 "ipaddress_1" + #define WIFI_PROFILE_NETMASK_0 "subnetmask_0" + #define WIFI_PROFILE_NETMASK_1 "subnetmask_1" + #define WIFI_PROFILE_GATEWAY_0 "gateway_0" + #define WIFI_PROFILE_GATEWAY_1 "gateway_1" + #define WIFI_PROFILE_DNSSVR_0 "dns_0" + #define WIFI_PROFILE_DNSSVR_1 "dns_1" + #define WIFI_PROFILE_DNSSVR_2ND_0 "dns_2nd_0" + #define WIFI_PROFILE_DNSSVR_2ND_1 "dns_2nd_1" + #define WIFI_PROFILE_AP_MAX_INACTIVITY_1 "ap_max_inactivity_1" + #define WIFI_PROFILE_AP_WMM_PS_1 "ap_wmm_ps_1" + #define WIFI_PROFILE_AP_WMM_1 "ap_wmm_1" + #define WIFI_PROFILE_SCAN_CHAN_NUM "scan_channel_number" + #define WIFI_PROFILE_SCAN_CHAN_LIST "scan_channel_list" + #define WIFI_PROFILE_AP_ENC_MODE_1 "ap_enc_1" + + #define NVEE_LEN_WIFI_country_code (3 + PARAM_STR_EXTRA) + #define NVEE_LEN_WIFI_sysmode STR_INT32_LEN + #define NVEE_LEN_WIFI_band STR_INT32_LEN + #define NVEE_LEN_WIFI_channel STR_INT32_LEN + #define NVEE_LEN_WIFI_wifi_mode STR_INT32_LEN + #define NVEE_LEN_WIFI_pmf STR_INT32_LEN + #define NVEE_LEN_WIFI_enable_dpm STR_INT32_LEN + #define NVEE_LEN_WIFI_dpm_debug_runtime_flag STR_INT32_LEN + #define NVEE_LEN_WIFI_dpm_keepalive_time STR_INT32_LEN + #define NVEE_LEN_WIFI_dpm_user_wakeup_time STR_INT32_LEN + #define NVEE_LEN_WIFI_dpm_TIM_wakeup_count STR_INT32_LEN + #define NVEE_LEN_WIFI_dpm_ble_hibernate STR_INT32_LEN + #define NVEE_LEN_WIFI_ssid_0 (32 * 2 + PARAM_STR_EXTRA) + #define NVEE_LEN_WIFI_ssid_1 (32 * 2 + PARAM_STR_EXTRA) + #define NVEE_LEN_WIFI_hidden_ssid STR_INT8_LEN + #define NVEE_LEN_WIFI_password_0 (32 * 2 + PARAM_STR_EXTRA) + #define NVEE_LEN_WIFI_password_1 (32 * 2 + PARAM_STR_EXTRA) + #define NVEE_LEN_WIFI_security_0 STR_INT32_LEN + #define NVEE_LEN_WIFI_security_1 STR_INT32_LEN + #define NVEE_LEN_WIFI_wep_key (26 + PARAM_STR_EXTRA) + #define NVEE_LEN_WIFI_wep_key_idx STR_INT32_LEN + #define NVEE_LEN_WIFI_wep_key_type STR_INT32_LEN + #define NVEE_LEN_WIFI_eap_auth_mode STR_INT32_LEN + #define NVEE_LEN_WIFI_eap_phase2 STR_INT32_LEN + #define NVEE_LEN_WIFI_eap_id (32 + PARAM_STR_EXTRA) + #define NVEE_LEN_WIFI_eap_pw (32 + PARAM_STR_EXTRA) + #define NVEE_LEN__WIFI_p2p_ssid_postfix (23 + PARAM_STR_EXTRA) + #define NVEE_LEN__WIFI_p2p_group_idle STR_INT32_LEN + #define NVEE_LEN_WIFI_p2p_listen_chan STR_INT32_LEN + #define NVEE_LEN_WIFI_p2p_go_intent STR_INT32_LEN + #define NVEE_LEN_WIFI_p2p_find_timeout STR_INT32_LEN + #define NVEE_LEN_WIFI_netmode_0 STR_INT32_LEN + #define NVEE_LEN_WIFI_netmode_1 STR_INT32_LEN + #define NVEE_LEN_WIFI_ipaddress_0 PARAM_IPADDR_LEN + #define NVEE_LEN_WIFI_ipaddress_1 PARAM_IPADDR_LEN + #define NVEE_LEN_WIFI_subnetmask_0 PARAM_IPADDR_LEN + #define NVEE_LEN_WIFI_subnetmask_1 PARAM_IPADDR_LEN + #define NVEE_LEN_WIFI_gateway_0 PARAM_IPADDR_LEN + #define NVEE_LEN_WIFI_gateway_1 PARAM_IPADDR_LEN + #define NVEE_LEN_WIFI_dns_0 PARAM_IPADDR_LEN + #define NVEE_LEN_WIFI_dns_1 PARAM_IPADDR_LEN + #define NVEE_LEN_WIFI_ap_max_inactivity_1 STR_INT32_LEN + #define NVEE_LEN_WIFI_profile_complete STR_INT32_LEN + #define NVEE_LEN_WIFI_chan_list (128 + PARAM_STR_EXTRA) + +//= ============================================================================= +// boocfg +//= ============================================================================= +NVPARAM_AREA(bootcfg, NVMS_GENERIC_PART) + +// TAG-NAME, MAX-LENGTH +NVPARAM_VARPARAM("chip", NVEE_LEN_BOOT_CHIP) +NVPARAM_VARPARAM("platform", NVEE_LEN_BOOT_PLATFORM) +NVPARAM_PARAM("clk.cpu", NVEE_LEN_BOOT_CLK_CPU) +NVPARAM_PARAM("clk.bus", NVEE_LEN_BOOT_CLK_BUS) +NVPARAM_PARAM("con.baud", NVEE_LEN_BOOT_BAUD) +NVPARAM_PARAM("con.bit", NVEE_LEN_BOOT_BIT) +NVPARAM_PARAM("con.stop", NVEE_LEN_BOOT_STOP) +NVPARAM_AREA_END() + +//= ============================================================================= +// devcfg +//= ============================================================================= +NVPARAM_AREA(devcfg, NVMS_GENERIC_PART) + +// TAG-NAME, MAX-LENGTH +NVPARAM_VARPARAM("WLANMAC", NVEE_LEN_WLANMAC) +NVPARAM_PARAM("ATCMD_UART_BAUDRATE", NVEE_LEN_ATCMD_UART_BAUDRATE) +NVPARAM_PARAM("ATCMD_UART_BITS", NVEE_LEN_ATCMD_UART_BITS) +NVPARAM_PARAM("ATCMD_UART_PARITY", NVEE_LEN_ATCMD_UART_PARITY) +NVPARAM_PARAM("ATCMD_UART_STOPBIT", NVEE_LEN_ATCMD_UART_STOPBIT) +NVPARAM_PARAM("ATCMD_UART_FLOWCTRL", NVEE_LEN_ATCMD_UART_FLOWCTRL) +NVPARAM_AREA_END() + +//= ============================================================================= +// wificfg +//= ============================================================================= +NVPARAM_AREA(wificfg, NVMS_GENERIC_PART) + +// TAG-NAME, MAX-LENGTH +//= ============================================================================ + +/* wpa_config_global */ + +//= ============================================================================ +NVPARAM_VARPARAM("uuid", NVEE_LEN_uuid) +NVPARAM_VARPARAM("auto_uuid", NVEE_LEN_auto_uuid) +NVPARAM_VARPARAM("device_name", NVEE_LEN_device_name) +NVPARAM_VARPARAM("manufacturer", NVEE_LEN_manufacturer) +NVPARAM_VARPARAM("model_name", NVEE_LEN_model_name) +NVPARAM_VARPARAM("model_number", NVEE_LEN_model_number) +NVPARAM_VARPARAM("serial_number", NVEE_LEN_serial_number) +NVPARAM_VARPARAM("device_type", NVEE_LEN_device_type) /* WPS_DEV_TYPE_LEN */ +NVPARAM_VARPARAM("config_methods", NVEE_LEN_config_methods) +NVPARAM_VARPARAM("p2p_ssid_postfix", NVEE_LEN_p2p_ssid_postfix) +NVPARAM_VARPARAM("p2p_group_idle", NVEE_LEN_p2p_group_idle) +NVPARAM_PARAM("p2p_listen_channel", INT32_LEN) +NVPARAM_PARAM("p2p_oper_channel", INT32_LEN) +NVPARAM_PARAM("p2p_find_timeout", INT32_LEN) +NVPARAM_PARAM("p2p_go_intent", INT32_LEN) +NVPARAM_PARAM("wmm_enabled", INT32_LEN) +NVPARAM_PARAM("wmm_ps_enabled", INT32_LEN) +NVPARAM_VARPARAM("ap_max_inactivity", NVEE_LEN_ap_max_inactivity) +NVPARAM_VARPARAM("ap_send_ka", NVEE_LEN_ap_send_ka) +NVPARAM_VARPARAM("bss_max_count", NVEE_LEN_bss_max_count) +NVPARAM_VARPARAM("bss_expiration_age", NVEE_LEN_bss_expiration_age) +NVPARAM_VARPARAM("bss_expiration_scan_count", NVEE_LEN_bss_expiration_scan_count) +NVPARAM_VARPARAM("filter_ssids", NVEE_LEN_filter_ssids) +NVPARAM_VARPARAM("filter_rssi", NVEE_LEN_filter_rssi) +NVPARAM_VARPARAM("max_num_sta", NVEE_LEN_max_num_sta) +NVPARAM_VARPARAM("ap_isolate", NVEE_LEN_ap_isolate) +NVPARAM_VARPARAM("disassoc_low_ack", NVEE_LEN_disassoc_low_ack) +NVPARAM_VARPARAM("hs20", NVEE_LEN_hs20) +NVPARAM_VARPARAM("interworking", NVEE_LEN_interworking) +NVPARAM_VARPARAM("hessid", NVEE_LEN_hessid) +NVPARAM_VARPARAM("access_network_type", NVEE_LEN_access_network_type) +NVPARAM_VARPARAM("go_interworking", NVEE_LEN_go_interworking) +NVPARAM_VARPARAM("go_access_network_type", NVEE_LEN_go_access_network_type) +NVPARAM_VARPARAM("go_internet", NVEE_LEN_go_internet) +NVPARAM_VARPARAM("go_venue_group", NVEE_LEN_go_venue_group) +NVPARAM_VARPARAM("go_venue_type", NVEE_LEN_go_venue_type) +NVPARAM_VARPARAM("pbc_in_m1", NVEE_LEN_pbc_in_m1) +NVPARAM_VARPARAM("wps_nfc_dev_pw_id", NVEE_LEN_wps_nfc_dev_pw_id) +NVPARAM_VARPARAM("ext_password_backend", NVEE_LEN_ext_password_backend) +NVPARAM_VARPARAM("p2p_go_max_inactivity", NVEE_LEN_p2p_go_max_inactivity) +NVPARAM_VARPARAM("auto_interworking", NVEE_LEN_auto_interworking) +NVPARAM_VARPARAM("okc", NVEE_LEN_okc) +NVPARAM_VARPARAM("pmf", NVEE_LEN_pmf) +NVPARAM_VARPARAM("dtim_period", NVEE_LEN_dtim_period) +NVPARAM_VARPARAM("beacon_int", NVEE_LEN_beacon_int) +NVPARAM_VARPARAM("sae_groups", NVEE_LEN_sae_groups) +NVPARAM_VARPARAM("ignore_old_scan_res", NVEE_LEN_ignore_old_scan_res) +NVPARAM_VARPARAM("scan_cur_freq", NVEE_LEN_scan_cur_freq) +NVPARAM_VARPARAM("sched_scan_interval", NVEE_LEN_sched_scan_interval) +NVPARAM_VARPARAM("sched_scan_start_delay", NVEE_LEN_sched_scan_start_delay) +NVPARAM_VARPARAM("external_sim", NVEE_LEN_external_sim) +NVPARAM_VARPARAM("tdls_external_control", NVEE_LEN_tdls_external_control) +NVPARAM_VARPARAM("wowlan_triggers", NVEE_LEN_wowlan_triggers) +NVPARAM_VARPARAM("bgscan", NVEE_LEN_bgscan) +NVPARAM_VARPARAM("autoscan", NVEE_LEN_autoscan) +NVPARAM_VARPARAM("p2p_search_delay", NVEE_LEN_p2p_search_delay) +NVPARAM_VARPARAM("mac_addr", NVEE_LEN_mac_addr) +NVPARAM_VARPARAM("rand_addr_lifetime", NVEE_LEN_rand_addr_lifetime) +NVPARAM_VARPARAM("preassoc_mac_addr", NVEE_LEN_preassoc_mac_addr) +NVPARAM_VARPARAM("key_mgmt_offload", NVEE_LEN_key_mgmt_offload) +NVPARAM_VARPARAM("user_mpm", NVEE_LEN_user_mpm) +NVPARAM_VARPARAM("max_peer_links", NVEE_LEN_max_peer_links) +NVPARAM_VARPARAM("cert_in_cb", NVEE_LEN_cert_in_cb) +NVPARAM_VARPARAM("mesh_max_inactivity", NVEE_LEN_mesh_max_inactivity) +NVPARAM_VARPARAM("dot11RSNASAERetransPeriod", NVEE_LEN_dot11RSNASAERetransPeriod) + +NVPARAM_VARPARAM("reassoc_same_bss_optim", NVEE_LEN_reassoc_same_bss_optim) +NVPARAM_VARPARAM("wps_priority", NVEE_LEN_wps_priority) +NVPARAM_VARPARAM("wpa_rsc_relaxation", NVEE_LEN_wpa_rsc_relaxation) + +NVPARAM_VARPARAM("sched_scan_plans", NVEE_LEN_sched_scan_plans) + +NVPARAM_VARPARAM("non_pref_chan", NVEE_LEN_non_pref_chan) +NVPARAM_VARPARAM("mbo_cell_capa", NVEE_LEN_mbo_cell_capa) +NVPARAM_VARPARAM("disassoc_imminent_rssi_threshold", NVEE_LEN_disassoc_imminent_rssi_threshold) +NVPARAM_VARPARAM("oce", NVEE_LEN_oce) + +NVPARAM_VARPARAM("gas_address3", NVEE_LEN_gas_address3) +NVPARAM_VARPARAM("ftm_responder", NVEE_LEN_ftm_responder) +NVPARAM_VARPARAM("ftm_initiator", NVEE_LEN_ftm_initiator) +NVPARAM_VARPARAM("osu_dir", NVEE_LEN_osu_dir) +NVPARAM_VARPARAM("fst_group_id", NVEE_LEN_fst_group_id) +NVPARAM_VARPARAM("fst_priority", NVEE_LEN_fst_priority) +NVPARAM_VARPARAM("fst_llt", NVEE_LEN_fst_llt) +NVPARAM_VARPARAM("gas_rand_addr_lifetime", NVEE_LEN_gas_rand_addr_lifetime) +NVPARAM_VARPARAM("gas_rand_mac_addr", NVEE_LEN_gas_rand_mac_addr) +NVPARAM_VARPARAM("dpp_config_processing", NVEE_LEN_dpp_config_processing) +NVPARAM_PARAM("STA_roam", INT32_LEN) +NVPARAM_PARAM("STA_roam_thold", INT32_LEN) +NVPARAM_VARPARAM("greenfield", NVEE_LEN_greenfield) +NVPARAM_VARPARAM("ht_protection", NVEE_LEN_ht_protection) +NVPARAM_PARAM("rts_threshold", INT32_LEN) + +NVPARAM_VARPARAM("acl_cmd", NVEE_LEN_acl_cmd) +NVPARAM_VARPARAM("country_code", NVEE_LEN_country_code) +NVPARAM_VARPARAM("tls_ver", NVEE_LEN_tls_ver) +NVPARAM_PARAM("rootca_chk", INT32_LEN) +NVPARAM_PARAM("peap_ver", INT32_LEN) +NVPARAM_VARPARAM("supp_log_mask", NVEE_LEN_supp_log_mask) +NVPARAM_VARPARAM("supp_wpa_log_mask", NVEE_LEN_supp_wpa_log_mask) +NVPARAM_VARPARAM("setband", NVEE_LEN_setband) +NVPARAM_VARPARAM("p2p_ps", NVEE_LEN_p2p_ps) +NVPARAM_VARPARAM("TEMP_PIN", NVEE_LEN_TEMP_PIN) +NVPARAM_VARPARAM("fast_reauth", NVEE_LEN_fast_reauth) +NVPARAM_VARPARAM("fast_pac", NVEE_LEN_fast_pac) +NVPARAM_VARPARAM("fast_pac_len", NVEE_LEN_fast_pac_len) + +// Supplicant Network Profiles (N0_ ~ N1_ : STA, SOFTAP, P2P, MESH) +//= ============================================================================ +// Supplicant Network Profiles (N0_ : STA) +//= ============================================================================ +NVPARAM_PARAM(NPRO_0 "Profile", INT32_LEN) +NVPARAM_VARPARAM(NPRO_0 "ssid", NVEE_LEN_N0_ssid) +NVPARAM_PARAM(NPRO_0 "scan_ssid", INT32_LEN) +NVPARAM_VARPARAM(NPRO_0 "bssid", NVEE_LEN_N0_bssid) +NVPARAM_VARPARAM(NPRO_0 "bssid_hint", NVEE_LEN_N0_bssid_hint) +NVPARAM_VARPARAM(NPRO_0 "bssid_blacklist", NVEE_LEN_N0_bssid_blacklist) +NVPARAM_VARPARAM(NPRO_0 "bssid_whitelist", NVEE_LEN_N0_bssid_whitelist) +NVPARAM_VARPARAM(NPRO_0 "psk", NVEE_LEN_N0_psk) +NVPARAM_VARPARAM(NPRO_0 "PSK_RAW_KEY", NVEE_LEN_N0_psk_raw) + +NVPARAM_VARPARAM(NPRO_0 "mem_only_psk", NVEE_LEN_N0_mem_only_psk) +NVPARAM_VARPARAM(NPRO_0 "sae_password", NVEE_LEN_N0_sae_password) +NVPARAM_VARPARAM(NPRO_0 "sae_password_id", NVEE_LEN_N0_sae_password_id) +NVPARAM_VARPARAM(NPRO_0 "proto", NVEE_LEN_N0_proto) +NVPARAM_VARPARAM(NPRO_0 "key_mgmt", NVEE_LEN_N0_key_mgmt) +NVPARAM_VARPARAM(NPRO_0 "bg_scan_period", NVEE_LEN_N0_bg_scan_period) +NVPARAM_VARPARAM(NPRO_0 "pairwise", NVEE_LEN_N0_pairwise) +NVPARAM_VARPARAM(NPRO_0 "group", NVEE_LEN_N0_group) +NVPARAM_VARPARAM(NPRO_0 "group_mgmt", NVEE_LEN_N0_group_mgmt) +NVPARAM_VARPARAM(NPRO_0 "auth_alg", NVEE_LEN_N0_auth_alg) +NVPARAM_VARPARAM(NPRO_0 "bgscan", NVEE_LEN_N0_bgscan) +NVPARAM_VARPARAM(NPRO_0 "autoscan", NVEE_LEN_N0_autoscan) +NVPARAM_VARPARAM(NPRO_0 "scan_freq", NVEE_LEN_N0_scan_freq) +NVPARAM_VARPARAM(NPRO_0 "freq_list", NVEE_LEN_N0_freq_list) + +NVPARAM_VARPARAM(NPRO_0 "eap", NVEE_LEN_N0_eap) +NVPARAM_VARPARAM(NPRO_0 "identity", NVEE_LEN_N0_identity) +NVPARAM_VARPARAM(NPRO_0 "anonymous_identity", NVEE_LEN_N0_anonymous_identity) +NVPARAM_VARPARAM(NPRO_0 "imsi_identity", NVEE_LEN_N0_imsi_identity) +NVPARAM_VARPARAM(NPRO_0 "password", NVEE_LEN_N0_password) +NVPARAM_VARPARAM(NPRO_0 "phase1", NVEE_LEN_N0_phase1) +NVPARAM_VARPARAM(NPRO_0 "phase2", NVEE_LEN_N0_phase2) +NVPARAM_VARPARAM(NPRO_0 "eapol_flags", NVEE_LEN_N0_eapol_flags) +NVPARAM_VARPARAM(NPRO_0 "wep_key0", NVEE_LEN_N0_wep_key0) +NVPARAM_VARPARAM(NPRO_0 "wep_key1", NVEE_LEN_N0_wep_key1) +NVPARAM_VARPARAM(NPRO_0 "wep_key2", NVEE_LEN_N0_wep_key2) +NVPARAM_VARPARAM(NPRO_0 "wep_key3", NVEE_LEN_N0_wep_key3) +NVPARAM_PARAM(NPRO_0 "wep_tx_keyidx", INT32_LEN) +NVPARAM_VARPARAM(NPRO_0 "priority", NVEE_LEN_N0_priority) +NVPARAM_VARPARAM(NPRO_0 "eap_workaround", NVEE_LEN_N0_eap_workaround) +NVPARAM_VARPARAM(NPRO_0 "pac_file", NVEE_LEN_N0_pac_file) +NVPARAM_VARPARAM(NPRO_0 "fragment_size", NVEE_LEN_N0_fragment_size) +NVPARAM_VARPARAM(NPRO_0 "ocsp", NVEE_LEN_N0_ocsp) +NVPARAM_VARPARAM(NPRO_0 "sim_num", NVEE_LEN_N0_sim_num) +NVPARAM_VARPARAM(NPRO_0 "mode", NVEE_LEN_N0_mode) +NVPARAM_VARPARAM(NPRO_0 "no_auto_peer", NVEE_LEN_N0_no_auto_peer) +NVPARAM_VARPARAM(NPRO_0 "frequency", NVEE_LEN_N0_frequency) +NVPARAM_VARPARAM(NPRO_0 "fixed_freq", NVEE_LEN_N0_fixed_freq) +NVPARAM_VARPARAM(NPRO_0 "acs", NVEE_LEN_N0_acs) +NVPARAM_VARPARAM(NPRO_0 "proactive_key_caching", NVEE_LEN_N0_proactive_key_caching) +NVPARAM_PARAM(NPRO_0 "disabled", INT32_LEN) +NVPARAM_VARPARAM(NPRO_0 "pbss", NVEE_LEN_N0_pbss) +NVPARAM_VARPARAM(NPRO_0 "wps_disabled", NVEE_LEN_N0_wps_disabled) +NVPARAM_VARPARAM(NPRO_0 "fils_dh_group", NVEE_LEN_N0_fils_dh_group) +NVPARAM_VARPARAM(NPRO_0 "ieee80211w", NVEE_LEN_N0_ieee80211w) +NVPARAM_VARPARAM(NPRO_0 "id_str", NVEE_LEN_N0_id_str) +NVPARAM_VARPARAM(NPRO_0 "ignore_broadcast_ssid", NVEE_LEN_N0_ignore_broadcast_ssid) +NVPARAM_VARPARAM(NPRO_0 "dtim_period", NVEE_LEN_N0_dtim_period) +NVPARAM_VARPARAM(NPRO_0 "beacon_int", NVEE_LEN_N0_beacon_int) +NVPARAM_VARPARAM(NPRO_0 "isolate", NVEE_LEN_N0_isolate) +NVPARAM_VARPARAM(NPRO_0 "ap_max_inactivity", NVEE_LEN_N0_ap_max_inactivity) +NVPARAM_VARPARAM(NPRO_0 "ap_power", NVEE_LEN_N0_ap_power) // auto, ... +NVPARAM_VARPARAM(NPRO_0 "update_identifier", NVEE_LEN_N0_update_identifier) +NVPARAM_VARPARAM(NPRO_0 "roaming_consortium_selection", NVEE_LEN_N0_roaming_consortium_selection) // MAX_ROAMING_CONS_OI_LEN +NVPARAM_VARPARAM(NPRO_0 "mac_addr", NVEE_LEN_N0_mac_addr) +NVPARAM_VARPARAM(NPRO_0 "mesh_basic_rates", NVEE_LEN_N0_mesh_basic_rates) +NVPARAM_VARPARAM(NPRO_0 "dot11MeshMaxRetries", NVEE_LEN_N0_dot11MeshMaxRetries) +NVPARAM_VARPARAM(NPRO_0 "dot11MeshRetryTimeout", NVEE_LEN_N0_dot11MeshRetryTimeout) +NVPARAM_VARPARAM(NPRO_0 "dot11MeshConfirmTimeout", NVEE_LEN_N0_dot11MeshConfirmTimeout) +NVPARAM_VARPARAM(NPRO_0 "dot11MeshHoldingTimeout", NVEE_LEN_N0_dot11MeshHoldingTimeout) +NVPARAM_VARPARAM(NPRO_0 "mesh_rssi_threshold", NVEE_LEN_N0_mesh_rssi_threshold) +NVPARAM_VARPARAM(NPRO_0 "wpa_ptk_rekey", NVEE_LEN_N0_wpa_ptk_rekey) +NVPARAM_VARPARAM(NPRO_0 "wpa_deny_ptk0_rekey", NVEE_LEN_N0_wpa_deny_ptk0_rekey) +NVPARAM_VARPARAM(NPRO_0 "group_rekey", NVEE_LEN_N0_group_rekey) +NVPARAM_VARPARAM(NPRO_0 "dpp_connector", NVEE_LEN_N0_dpp_connector) +NVPARAM_VARPARAM(NPRO_0 "dpp_netaccesskey", NVEE_LEN_N0_dpp_netaccesskey) +NVPARAM_VARPARAM(NPRO_0 "dpp_netaccesskey_expiry", NVEE_LEN_N0_dpp_netaccesskey_expiry) +NVPARAM_VARPARAM(NPRO_0 "dpp_csign", NVEE_LEN_N0_dpp_csign) +NVPARAM_VARPARAM(NPRO_0 "owe_group", NVEE_LEN_N0_owe_group) +NVPARAM_VARPARAM(NPRO_0 "owe_only", NVEE_LEN_N0_owe_only) +NVPARAM_VARPARAM(NPRO_0 "owe_ptk_workaround", NVEE_LEN_N0_owe_ptk_workaround) + +NVPARAM_VARPARAM(NPRO_0 "multi_ap_backhaul_sta", NVEE_LEN_N0_multi_ap_backhaul_sta) +NVPARAM_VARPARAM(NPRO_0 "ft_eap_pmksa_caching", NVEE_LEN_N0_ft_eap_pmksa_caching) +NVPARAM_VARPARAM(NPRO_0 "beacon_prot", NVEE_LEN_N0_beacon_prot) +NVPARAM_VARPARAM(NPRO_0 "transition_disable", NVEE_LEN_N0_transition_disable) +NVPARAM_VARPARAM(NPRO_0 "sae_pk", NVEE_LEN_N0_sae_pk) +NVPARAM_VARPARAM(NPRO_0 "wifi_mode", NVEE_LEN_N0_wifi_mode) +NVPARAM_VARPARAM(NPRO_0 "mixed_cell", NVEE_LEN_N0_mixed_cell) +NVPARAM_VARPARAM(NPRO_0 "ht", NVEE_LEN_N0_ht) +NVPARAM_VARPARAM(NPRO_0 "ht40", NVEE_LEN_N0_ht40) +NVPARAM_VARPARAM(NPRO_0 "disable_ht", NVEE_LEN_N0_disable_ht) +NVPARAM_VARPARAM(NPRO_0 "disable_ht40", NVEE_LEN_N0_disable_ht40) +NVPARAM_VARPARAM(NPRO_0 "disable_sgi", NVEE_LEN_N0_disable_sgi) +NVPARAM_VARPARAM(NPRO_0 "disable_ldpc", NVEE_LEN_N0_disable_ldpc) +NVPARAM_VARPARAM(NPRO_0 "ht40_intolerant", NVEE_LEN_N0_ht40_intolerant) +NVPARAM_VARPARAM(NPRO_0 "tx_stbc", NVEE_LEN_N0_tx_stbc) +NVPARAM_VARPARAM(NPRO_0 "rx_stbc", NVEE_LEN_N0_rx_stbc) +NVPARAM_VARPARAM(NPRO_0 "disable_max_amsdu", NVEE_LEN_N0_disable_max_amsdu) +NVPARAM_VARPARAM(NPRO_0 "ampdu_factor", NVEE_LEN_N0_ampdu_factor) +NVPARAM_VARPARAM(NPRO_0 "ampdu_density", NVEE_LEN_N0_ampdu_density) +NVPARAM_VARPARAM(NPRO_0 "ht_mcs", NVEE_LEN_N0_ht_mcs) + +NVPARAM_VARPARAM(NPRO_0 "max_oper_chwidth", NVEE_LEN_N0_max_oper_chwidth) +NVPARAM_VARPARAM(NPRO_0 "vht_center_freq1", NVEE_LEN_N0_vht_center_freq1) +NVPARAM_VARPARAM(NPRO_0 "vht_center_freq2", NVEE_LEN_N0_vht_center_freq2) + +NVPARAM_VARPARAM(NPRO_0 "vht", NVEE_LEN_N0_vht) +NVPARAM_VARPARAM(NPRO_0 "disable_vht", NVEE_LEN_N0_disable_vht) +NVPARAM_VARPARAM(NPRO_0 "vht_capa", NVEE_LEN_N0_vht_capa) +NVPARAM_VARPARAM(NPRO_0 "vht_capa_mask", NVEE_LEN_N0_vht_capa_mask) +NVPARAM_VARPARAM(NPRO_0 "vht_rx_mcs_nss_1", NVEE_LEN_N0_vht_rx_mcs_nss_1) +NVPARAM_VARPARAM(NPRO_0 "vht_rx_mcs_nss_2", NVEE_LEN_N0_vht_rx_mcs_nss_2) +NVPARAM_VARPARAM(NPRO_0 "vht_rx_mcs_nss_3", NVEE_LEN_N0_vht_rx_mcs_nss_3) +NVPARAM_VARPARAM(NPRO_0 "vht_rx_mcs_nss_4", NVEE_LEN_N0_vht_rx_mcs_nss_4) +NVPARAM_VARPARAM(NPRO_0 "vht_rx_mcs_nss_5", NVEE_LEN_N0_vht_rx_mcs_nss_5) +NVPARAM_VARPARAM(NPRO_0 "vht_rx_mcs_nss_6", NVEE_LEN_N0_vht_rx_mcs_nss_6) +NVPARAM_VARPARAM(NPRO_0 "vht_rx_mcs_nss_7", NVEE_LEN_N0_vht_rx_mcs_nss_7) +NVPARAM_VARPARAM(NPRO_0 "vht_rx_mcs_nss_8", NVEE_LEN_N0_vht_rx_mcs_nss_8) +NVPARAM_VARPARAM(NPRO_0 "vht_tx_mcs_nss_1", NVEE_LEN_N0_vht_tx_mcs_nss_1) +NVPARAM_VARPARAM(NPRO_0 "vht_tx_mcs_nss_2", NVEE_LEN_N0_vht_tx_mcs_nss_2) +NVPARAM_VARPARAM(NPRO_0 "vht_tx_mcs_nss_3", NVEE_LEN_N0_vht_tx_mcs_nss_3) +NVPARAM_VARPARAM(NPRO_0 "vht_tx_mcs_nss_4", NVEE_LEN_N0_vht_tx_mcs_nss_4) +NVPARAM_VARPARAM(NPRO_0 "vht_tx_mcs_nss_5", NVEE_LEN_N0_vht_tx_mcs_nss_5) +NVPARAM_VARPARAM(NPRO_0 "vht_tx_mcs_nss_6", NVEE_LEN_N0_vht_tx_mcs_nss_6) +NVPARAM_VARPARAM(NPRO_0 "vht_tx_mcs_nss_7", NVEE_LEN_N0_vht_tx_mcs_nss_7) +NVPARAM_VARPARAM(NPRO_0 "vht_tx_mcs_nss_8", NVEE_LEN_N0_vht_tx_mcs_nss_8) + +NVPARAM_VARPARAM(NPRO_0 "ca_cert", NVEE_LEN_N0_ca_cert) +NVPARAM_VARPARAM(NPRO_0 "ca_path", NVEE_LEN_N0_ca_path) +NVPARAM_VARPARAM(NPRO_0 "client_cert", NVEE_LEN_N0_client_cert) +NVPARAM_VARPARAM(NPRO_0 "private_key", NVEE_LEN_N0_private_key) +NVPARAM_VARPARAM(NPRO_0 "private_key_passwd", NVEE_LEN_N0_private_key_passwd) + +NVPARAM_VARPARAM(NPRO_0 "dh_file", NVEE_LEN_N0_dh_file) +NVPARAM_VARPARAM(NPRO_0 "subject_match", NVEE_LEN_N0_subject_match) +NVPARAM_VARPARAM(NPRO_0 "altsubject_match", NVEE_LEN_N0_altsubject_match) +NVPARAM_VARPARAM(NPRO_0 "domain_suffix_match", NVEE_LEN_N0_domain_suffix_match) +NVPARAM_VARPARAM(NPRO_0 "domain_match", NVEE_LEN_N0_domain_match) +NVPARAM_VARPARAM(NPRO_0 "ca_cert2", NVEE_LEN_N0_ca_cert2) +NVPARAM_VARPARAM(NPRO_0 "ca_path2", NVEE_LEN_N0_ca_path2) +NVPARAM_VARPARAM(NPRO_0 "client_cert2", NVEE_LEN_N0_client_cert2) +NVPARAM_VARPARAM(NPRO_0 "private_key2", NVEE_LEN_N0_private_key2) +NVPARAM_VARPARAM(NPRO_0 "private_key2_passwd", NVEE_LEN_N0_private_key2_passwd) +NVPARAM_VARPARAM(NPRO_0 "dh_file2", NVEE_LEN_N0_dh_file2) +NVPARAM_VARPARAM(NPRO_0 "subject_match2", NVEE_LEN_N0_subject_match2) +NVPARAM_VARPARAM(NPRO_0 "altsubject_match2", NVEE_LEN_N0_altsubject_match2) +NVPARAM_VARPARAM(NPRO_0 "domain_suffix_match2", NVEE_LEN_N0_domain_suffix_match2) +NVPARAM_VARPARAM(NPRO_0 "domain_match2", NVEE_LEN_N0_domain_match2) + +NVPARAM_VARPARAM(NPRO_0 "pcsc", NVEE_LEN_N0_pcsc) +NVPARAM_VARPARAM(NPRO_0 "pin", NVEE_LEN_N0_pin) +NVPARAM_VARPARAM(NPRO_0 "engine_id", NVEE_LEN_N0_engine_id) +NVPARAM_VARPARAM(NPRO_0 "key_id", NVEE_LEN_N0_key_id) +NVPARAM_VARPARAM(NPRO_0 "cert_id", NVEE_LEN_N0_cert_id) +NVPARAM_VARPARAM(NPRO_0 "ca_cert_id", NVEE_LEN_N0_ca_cert_id) +NVPARAM_VARPARAM(NPRO_0 "key2_id", NVEE_LEN_N0_key2_id) +NVPARAM_VARPARAM(NPRO_0 "pin2", NVEE_LEN_N0_pin2) +NVPARAM_VARPARAM(NPRO_0 "engine2_id", NVEE_LEN_N0_engine2_id) +NVPARAM_VARPARAM(NPRO_0 "cert2_id", NVEE_LEN_N0_cert2_id) +NVPARAM_VARPARAM(NPRO_0 "ca_cert2_id", NVEE_LEN_N0_ca_cert2_id) +NVPARAM_VARPARAM(NPRO_0 "engine", NVEE_LEN_N0_engine) +NVPARAM_VARPARAM(NPRO_0 "engine2", NVEE_LEN_N0_engine2) + +NVPARAM_VARPARAM(NPRO_0 "openssl_ciphers", NVEE_LEN_N0_openssl_ciphers) +NVPARAM_VARPARAM(NPRO_0 "erp", NVEE_LEN_N0_erp) +NVPARAM_PARAM(NPRO_0 "FST_CONNECT", INT32_LEN) +NVPARAM_VARPARAM(NPRO_0 "ASSOC_CH", NVEE_LEN_N0_ASSOC_CH) + + #ifdef CONFIG_MACSEC +NVPARAM_VARPARAM(NPRO_0 "macsec_policy", NVEE_LEN_N0_macsec_policy) +NVPARAM_VARPARAM(NPRO_0 "macsec_integ_only", NVEE_LEN_N0_macsec_integ_only) +NVPARAM_VARPARAM(NPRO_0 "macsec_port", NVEE_LEN_N0_macsec_port) +NVPARAM_VARPARAM(NPRO_0 "mka_priority", NVEE_LEN_N0_mka_priority) + #endif /* CONFIG_MACSEC */ + +//= ============================================================================ +// Supplicant Network Profiles (N1_ : SOFTAP, P2P, MESH) +//= ============================================================================ +NVPARAM_PARAM(NPRO_1 "Profile", INT32_LEN) +NVPARAM_VARPARAM(NPRO_1 "ssid", NVEE_LEN_N1_ssid) +NVPARAM_VARPARAM(NPRO_1 "scan_ssid", NVEE_LEN_N1_scan_ssid) +NVPARAM_VARPARAM(NPRO_1 "bssid", NVEE_LEN_N1_bssid) +NVPARAM_VARPARAM(NPRO_1 "bssid_hint", NVEE_LEN_N1_bssid_hint) +NVPARAM_VARPARAM(NPRO_1 "bssid_blacklist", NVEE_LEN_N1_bssid_blacklist) +NVPARAM_VARPARAM(NPRO_1 "bssid_whitelist", NVEE_LEN_N1_bssid_whitelist) +NVPARAM_VARPARAM(NPRO_1 "psk", NVEE_LEN_N1_psk) +NVPARAM_VARPARAM(NPRO_1 "mem_only_psk", NVEE_LEN_N1_mem_only_psk) +NVPARAM_VARPARAM(NPRO_1 "sae_password", NVEE_LEN_N1_sae_password) +NVPARAM_VARPARAM(NPRO_1 "sae_password_id", NVEE_LEN_N1_sae_password_id) +NVPARAM_VARPARAM(NPRO_1 "proto", NVEE_LEN_N1_proto) +NVPARAM_VARPARAM(NPRO_1 "key_mgmt", NVEE_LEN_N1_key_mgmt) +NVPARAM_VARPARAM(NPRO_1 "bg_scan_period", NVEE_LEN_N1_bg_scan_period) +NVPARAM_VARPARAM(NPRO_1 "pairwise", NVEE_LEN_N1_pairwise) +NVPARAM_VARPARAM(NPRO_1 "group", NVEE_LEN_N1_group) +NVPARAM_VARPARAM(NPRO_1 "group_mgmt", NVEE_LEN_N1_group_mgmt) +NVPARAM_VARPARAM(NPRO_1 "auth_alg", NVEE_LEN_N1_auth_alg) +NVPARAM_VARPARAM(NPRO_1 "bgscan", NVEE_LEN_N1_bgscan) +NVPARAM_VARPARAM(NPRO_1 "autoscan", NVEE_LEN_N1_autoscan) +NVPARAM_VARPARAM(NPRO_1 "scan_freq", NVEE_LEN_N1_scan_freq) +NVPARAM_VARPARAM(NPRO_1 "freq_list", NVEE_LEN_N1_freq_list) + +NVPARAM_VARPARAM(NPRO_1 "eap", NVEE_LEN_N1_eap) +NVPARAM_VARPARAM(NPRO_1 "identity", NVEE_LEN_N1_identity) +NVPARAM_VARPARAM(NPRO_1 "anonymous_identity", NVEE_LEN_N1_anonymous_identity) +NVPARAM_VARPARAM(NPRO_1 "imsi_identity", NVEE_LEN_N1_imsi_identity) +NVPARAM_VARPARAM(NPRO_1 "password", NVEE_LEN_N1_password) +NVPARAM_VARPARAM(NPRO_1 "phase1", NVEE_LEN_N1_phase1) +NVPARAM_VARPARAM(NPRO_1 "phase2", NVEE_LEN_N1_phase2) +NVPARAM_VARPARAM(NPRO_1 "eapol_flags", NVEE_LEN_N1_eapol_flags) +NVPARAM_VARPARAM(NPRO_1 "wep_key0", NVEE_LEN_N1_wep_key0) +NVPARAM_VARPARAM(NPRO_1 "wep_key1", NVEE_LEN_N1_wep_key1) +NVPARAM_VARPARAM(NPRO_1 "wep_key2", NVEE_LEN_N1_wep_key2) +NVPARAM_VARPARAM(NPRO_1 "wep_key3", NVEE_LEN_N1_wep_key3) +NVPARAM_VARPARAM(NPRO_1 "wep_tx_keyidx", NVEE_LEN_N1_wep_tx_keyidx) +NVPARAM_VARPARAM(NPRO_1 "priority", NVEE_LEN_N1_priority) +NVPARAM_VARPARAM(NPRO_1 "eap_workaround", NVEE_LEN_N1_eap_workaround) +NVPARAM_VARPARAM(NPRO_1 "pac_file", NVEE_LEN_N1_pac_file) +NVPARAM_VARPARAM(NPRO_1 "fragment_size", NVEE_LEN_N1_fragment_size) +NVPARAM_VARPARAM(NPRO_1 "ocsp", NVEE_LEN_N1_ocsp) +NVPARAM_VARPARAM(NPRO_1 "sim_num", NVEE_LEN_N1_sim_num) +NVPARAM_PARAM(NPRO_1 "mode", INT32_LEN) +NVPARAM_VARPARAM(NPRO_1 "no_auto_peer", NVEE_LEN_N1_no_auto_peer) +NVPARAM_PARAM(NPRO_1 "frequency", INT32_LEN) +NVPARAM_VARPARAM(NPRO_1 "fixed_freq", NVEE_LEN_N1_fixed_freq) +NVPARAM_VARPARAM(NPRO_1 "acs", NVEE_LEN_N1_acs) +NVPARAM_VARPARAM(NPRO_1 "proactive_key_caching", NVEE_LEN_N1_proactive_key_caching) +NVPARAM_VARPARAM(NPRO_1 "disabled", NVEE_LEN_N1_disabled) +NVPARAM_VARPARAM(NPRO_1 "pbss", NVEE_LEN_N1_pbss) +NVPARAM_VARPARAM(NPRO_1 "wps_disabled", NVEE_LEN_N1_wps_disabled) +NVPARAM_VARPARAM(NPRO_1 "fils_dh_group", NVEE_LEN_N1_fils_dh_group) +NVPARAM_VARPARAM(NPRO_1 "ieee80211w", NVEE_LEN_N1_ieee80211w) +NVPARAM_VARPARAM(NPRO_1 "id_str", NVEE_LEN_N1_id_str) +NVPARAM_VARPARAM(NPRO_1 "ignore_broadcast_ssid", NVEE_LEN_N1_ignore_broadcast_ssid) +NVPARAM_VARPARAM(NPRO_1 "dtim_period", NVEE_LEN_N1_dtim_period) +NVPARAM_PARAM(NPRO_1 "beacon_int", INT32_LEN) +NVPARAM_VARPARAM(NPRO_1 "isolate", NVEE_LEN_N1_isolate) +NVPARAM_PARAM(NPRO_1 "ap_max_inactivity", INT32_LEN) +NVPARAM_VARPARAM(NPRO_1 "ap_power", NVEE_LEN_N1_ap_power) // auto, ... +NVPARAM_VARPARAM(NPRO_1 "update_identifier", NVEE_LEN_N1_update_identifier) +NVPARAM_VARPARAM(NPRO_1 "roaming_consortium_selection", NVEE_LEN_N1_roaming_consortium_selection) // MAX_ROAMING_CONS_OI_LEN +NVPARAM_VARPARAM(NPRO_1 "mac_addr", NVEE_LEN_N1_mac_addr) +NVPARAM_VARPARAM(NPRO_1 "mesh_basic_rates", NVEE_LEN_N1_mesh_basic_rates) +NVPARAM_VARPARAM(NPRO_1 "dot11MeshMaxRetries", NVEE_LEN_N1_dot11MeshMaxRetries) +NVPARAM_VARPARAM(NPRO_1 "dot11MeshRetryTimeout", NVEE_LEN_N1_dot11MeshRetryTimeout) +NVPARAM_VARPARAM(NPRO_1 "dot11MeshConfirmTimeout", NVEE_LEN_N1_dot11MeshConfirmTimeout) +NVPARAM_VARPARAM(NPRO_1 "dot11MeshHoldingTimeout", NVEE_LEN_N1_dot11MeshHoldingTimeout) +NVPARAM_VARPARAM(NPRO_1 "mesh_rssi_threshold", NVEE_LEN_N1_mesh_rssi_threshold) +NVPARAM_VARPARAM(NPRO_1 "wpa_ptk_rekey", NVEE_LEN_N1_wpa_ptk_rekey) +NVPARAM_VARPARAM(NPRO_1 "wpa_deny_ptk0_rekey", NVEE_LEN_N1_wpa_deny_ptk0_rekey) + +NVPARAM_VARPARAM(NPRO_1 "group_rekey", NVEE_LEN_N1_group_rekey) +NVPARAM_VARPARAM(NPRO_1 "dpp_connector", NVEE_LEN_N1_dpp_connector) +NVPARAM_VARPARAM(NPRO_1 "dpp_netaccesskey", NVEE_LEN_N1_dpp_netaccesskey) +NVPARAM_VARPARAM(NPRO_1 "dpp_netaccesskey_expiry", NVEE_LEN_N1_dpp_netaccesskey_expiry) +NVPARAM_VARPARAM(NPRO_1 "dpp_csign", NVEE_LEN_N1_dpp_csign) +NVPARAM_VARPARAM(NPRO_1 "owe_group", NVEE_LEN_N1_owe_group) +NVPARAM_VARPARAM(NPRO_1 "owe_only", NVEE_LEN_N1_owe_only) +NVPARAM_VARPARAM(NPRO_1 "owe_ptk_workaround", NVEE_LEN_N1_owe_ptk_workaround) +NVPARAM_VARPARAM(NPRO_1 "multi_ap_backhaul_sta", NVEE_LEN_N1_multi_ap_backhaul_sta) +NVPARAM_VARPARAM(NPRO_1 "ft_eap_pmksa_caching", NVEE_LEN_N1_ft_eap_pmksa_caching) +NVPARAM_VARPARAM(NPRO_1 "beacon_prot", NVEE_LEN_N1_beacon_prot) +NVPARAM_VARPARAM(NPRO_1 "transition_disable", NVEE_LEN_N1_transition_disable) +NVPARAM_VARPARAM(NPRO_1 "sae_pk", NVEE_LEN_N1_sae_pk) +NVPARAM_VARPARAM(NPRO_1 "wifi_mode", NVEE_LEN_N1_wifi_mode) +NVPARAM_VARPARAM(NPRO_1 "mixed_cell", NVEE_LEN_N1_mixed_cell) +NVPARAM_VARPARAM(NPRO_1 "ht", NVEE_LEN_N1_ht) +NVPARAM_VARPARAM(NPRO_1 "ht40", NVEE_LEN_N1_ht40) +NVPARAM_VARPARAM(NPRO_1 "disable_ht", NVEE_LEN_N1_disable_ht) +NVPARAM_VARPARAM(NPRO_1 "disable_ht40", NVEE_LEN_N1_disable_ht40) +NVPARAM_VARPARAM(NPRO_1 "disable_sgi", NVEE_LEN_N1_disable_sgi) +NVPARAM_VARPARAM(NPRO_1 "disable_ldpc", NVEE_LEN_N1_disable_ldpc) +NVPARAM_VARPARAM(NPRO_1 "ht40_intolerant", NVEE_LEN_N1_ht40_intolerant) +NVPARAM_VARPARAM(NPRO_1 "tx_stbc", NVEE_LEN_N1_tx_stbc) +NVPARAM_VARPARAM(NPRO_1 "rx_stbc", NVEE_LEN_N1_rx_stbc) +NVPARAM_VARPARAM(NPRO_1 "disable_max_amsdu", NVEE_LEN_N1_disable_max_amsdu) +NVPARAM_VARPARAM(NPRO_1 "ampdu_factor", NVEE_LEN_N1_ampdu_factor) +NVPARAM_VARPARAM(NPRO_1 "ampdu_density", NVEE_LEN_N1_ampdu_density) +NVPARAM_VARPARAM(NPRO_1 "ht_mcs", NVEE_LEN_N1_ht_mcs) + +NVPARAM_VARPARAM(NPRO_1 "max_oper_chwidth", NVEE_LEN_N1_max_oper_chwidth) +NVPARAM_VARPARAM(NPRO_1 "vht_center_freq1", NVEE_LEN_N1_vht_center_freq1) +NVPARAM_VARPARAM(NPRO_1 "vht_center_freq2", NVEE_LEN_N1_vht_center_freq2) + +NVPARAM_VARPARAM(NPRO_1 "vht", NVEE_LEN_N1_vht) +NVPARAM_VARPARAM(NPRO_1 "disable_vht", NVEE_LEN_N1_disable_vht) +NVPARAM_VARPARAM(NPRO_1 "vht_capa", NVEE_LEN_N1_vht_capa) +NVPARAM_VARPARAM(NPRO_1 "vht_capa_mask", NVEE_LEN_N1_vht_capa_mask) +NVPARAM_VARPARAM(NPRO_1 "vht_rx_mcs_nss_1", NVEE_LEN_N1_vht_rx_mcs_nss_1) +NVPARAM_VARPARAM(NPRO_1 "vht_rx_mcs_nss_2", NVEE_LEN_N1_vht_rx_mcs_nss_2) +NVPARAM_VARPARAM(NPRO_1 "vht_rx_mcs_nss_3", NVEE_LEN_N1_vht_rx_mcs_nss_3) +NVPARAM_VARPARAM(NPRO_1 "vht_rx_mcs_nss_4", NVEE_LEN_N1_vht_rx_mcs_nss_4) +NVPARAM_VARPARAM(NPRO_1 "vht_rx_mcs_nss_5", NVEE_LEN_N1_vht_rx_mcs_nss_5) +NVPARAM_VARPARAM(NPRO_1 "vht_rx_mcs_nss_6", NVEE_LEN_N1_vht_rx_mcs_nss_6) +NVPARAM_VARPARAM(NPRO_1 "vht_rx_mcs_nss_7", NVEE_LEN_N1_vht_rx_mcs_nss_7) +NVPARAM_VARPARAM(NPRO_1 "vht_rx_mcs_nss_8", NVEE_LEN_N1_vht_rx_mcs_nss_8) +NVPARAM_VARPARAM(NPRO_1 "vht_tx_mcs_nss_1", NVEE_LEN_N1_vht_tx_mcs_nss_1) +NVPARAM_VARPARAM(NPRO_1 "vht_tx_mcs_nss_2", NVEE_LEN_N1_vht_tx_mcs_nss_2) +NVPARAM_VARPARAM(NPRO_1 "vht_tx_mcs_nss_3", NVEE_LEN_N1_vht_tx_mcs_nss_3) +NVPARAM_VARPARAM(NPRO_1 "vht_tx_mcs_nss_4", NVEE_LEN_N1_vht_tx_mcs_nss_4) +NVPARAM_VARPARAM(NPRO_1 "vht_tx_mcs_nss_5", NVEE_LEN_N1_vht_tx_mcs_nss_5) +NVPARAM_VARPARAM(NPRO_1 "vht_tx_mcs_nss_6", NVEE_LEN_N1_vht_tx_mcs_nss_6) +NVPARAM_VARPARAM(NPRO_1 "vht_tx_mcs_nss_7", NVEE_LEN_N1_vht_tx_mcs_nss_7) +NVPARAM_VARPARAM(NPRO_1 "vht_tx_mcs_nss_8", NVEE_LEN_N1_vht_tx_mcs_nss_8) + +NVPARAM_VARPARAM(NPRO_1 "ca_cert", NVEE_LEN_N1_ca_cert) +NVPARAM_VARPARAM(NPRO_1 "ca_path", NVEE_LEN_N1_ca_path) +NVPARAM_VARPARAM(NPRO_1 "client_cert", NVEE_LEN_N1_client_cert) +NVPARAM_VARPARAM(NPRO_1 "private_key", NVEE_LEN_N1_private_key) +NVPARAM_VARPARAM(NPRO_1 "private_key_passwd", NVEE_LEN_N1_private_key_passwd) + +NVPARAM_VARPARAM(NPRO_1 "dh_file", NVEE_LEN_N1_dh_file) +NVPARAM_VARPARAM(NPRO_1 "subject_match", NVEE_LEN_N1_subject_match) +NVPARAM_VARPARAM(NPRO_1 "altsubject_match", NVEE_LEN_N1_altsubject_match) +NVPARAM_VARPARAM(NPRO_1 "domain_suffix_match", NVEE_LEN_N1_domain_suffix_match) +NVPARAM_VARPARAM(NPRO_1 "domain_match", NVEE_LEN_N1_domain_match) +NVPARAM_VARPARAM(NPRO_1 "ca_cert2", NVEE_LEN_N1_ca_cert2) +NVPARAM_VARPARAM(NPRO_1 "ca_path2", NVEE_LEN_N1_ca_path2) +NVPARAM_VARPARAM(NPRO_1 "client_cert2", NVEE_LEN_N1_client_cert2) +NVPARAM_VARPARAM(NPRO_1 "private_key2", NVEE_LEN_N1_private_key2) +NVPARAM_VARPARAM(NPRO_1 "private_key2_passwd", NVEE_LEN_N1_private_key2_passwd) +NVPARAM_VARPARAM(NPRO_1 "dh_file2", NVEE_LEN_N1_dh_file2) +NVPARAM_VARPARAM(NPRO_1 "subject_match2", NVEE_LEN_N1_subject_match2) +NVPARAM_VARPARAM(NPRO_1 "altsubject_match2", NVEE_LEN_N1_altsubject_match2) +NVPARAM_VARPARAM(NPRO_1 "domain_suffix_match2", NVEE_LEN_N1_domain_suffix_match2) +NVPARAM_VARPARAM(NPRO_1 "domain_match2", NVEE_LEN_N1_domain_match2) + +NVPARAM_VARPARAM(NPRO_1 "pcsc", NVEE_LEN_N1_pcsc) +NVPARAM_VARPARAM(NPRO_1 "pin", NVEE_LEN_N1_pin) +NVPARAM_VARPARAM(NPRO_1 "engine_id", NVEE_LEN_N1_engine_id) +NVPARAM_VARPARAM(NPRO_1 "key_id", NVEE_LEN_N1_key_id) +NVPARAM_VARPARAM(NPRO_1 "cert_id", NVEE_LEN_N1_cert_id) +NVPARAM_VARPARAM(NPRO_1 "ca_cert_id", NVEE_LEN_N1_ca_cert_id) +NVPARAM_VARPARAM(NPRO_1 "key2_id", NVEE_LEN_N1_key2_id) +NVPARAM_VARPARAM(NPRO_1 "pin2", NVEE_LEN_N1_pin2) +NVPARAM_VARPARAM(NPRO_1 "engine2_id", NVEE_LEN_N1_engine2_id) +NVPARAM_VARPARAM(NPRO_1 "cert2_id", NVEE_LEN_N1_cert2_id) +NVPARAM_VARPARAM(NPRO_1 "ca_cert2_id", NVEE_LEN_N1_ca_cert2_id) +NVPARAM_VARPARAM(NPRO_1 "engine", NVEE_LEN_N1_engine) +NVPARAM_VARPARAM(NPRO_1 "engine2", NVEE_LEN_N1_engine2) + +NVPARAM_VARPARAM(NPRO_1 "openssl_ciphers", NVEE_LEN_N1_openssl_ciphers) +NVPARAM_VARPARAM(NPRO_1 "erp", NVEE_LEN_N1_erp) + + #ifdef CONFIG_MACSEC +NVPARAM_VARPARAM(NPRO_1 "macsec_policy", NVEE_LEN_N1_macsec_policy) +NVPARAM_VARPARAM(NPRO_1 "macsec_integ_only", NVEE_LEN_N1_macsec_integ_only) +NVPARAM_VARPARAM(NPRO_1 "macsec_port", NVEE_LEN_N1_macsec_port) +NVPARAM_VARPARAM(NPRO_1 "mka_priority", NVEE_LEN_N1_mka_priority) + #endif /* CONFIG_MACSEC */ + +//= ============================================================================ +// Sleep Management(DPM) Profiles +//= ============================================================================ +NVPARAM_PARAM(NVR_KEY_DPM_MODE, INT32_LEN) +NVPARAM_PARAM(NVR_KEY_DPM_KEEPALIVE_TIME, INT32_LEN) +NVPARAM_PARAM(NVR_KEY_DPM_USER_WAKEUP_TIME, INT32_LEN) +NVPARAM_PARAM(NVR_KEY_DPM_TIM_WAKEUP_TIME, INT32_LEN) +NVPARAM_PARAM(NVR_KEY_DPM_AB_WF_CONN_RETRY, INT32_LEN) +NVPARAM_PARAM(NVR_KEY_DPM_ABNORM_STOP, INT32_LEN) +NVPARAM_PARAM(NVR_KEY_DPM_IP_CONDITION, INT32_LEN) + +NVPARAM_PARAM(WIFI_CONN_WAIT_NAME, INT32_LEN) +NVPARAM_PARAM(DHCP_RSP_WAIT_NAME, INT32_LEN) +NVPARAM_PARAM(ARP_RSP_WAIT_NAME, INT32_LEN) +NVPARAM_PARAM(UNKNOWN_DPM_FAIL_WAIT_NAME, INT32_LEN) + +//= ============================================================================ +// TWT (Target Wake Time) Profiles +//= ============================================================================ +NVPARAM_PARAM("twt_auto_setup", UINT32_LEN) +NVPARAM_PARAM("twt_wake_int_mantissa", INT32_LEN) +NVPARAM_PARAM("twt_wake_int_exponent", INT32_LEN) +NVPARAM_PARAM("twt_wake_dur", UINT32_LEN) +NVPARAM_PARAM("twt_unannounced", UINT32_LEN) +NVPARAM_PARAM("twt_trigger_enable", UINT32_LEN) +NVPARAM_PARAM("twt_neg_type", UINT32_LEN) +NVPARAM_PARAM("twt_wake_dur_unit", UINT32_LEN) +NVPARAM_AREA_END() + +// syscfg +//= ============================================================================ +// syscfg : Network interface, etc +//= ============================================================================ +NVPARAM_AREA(syscfg, NVMS_GENERIC_PART) // supplicant about 6332+a +// TAG-NAME, MAX-LENGTH +NVPARAM_PARAM("INITWLAN", INT32_LEN) +NVPARAM_PARAM("SYSMODE", INT32_LEN) +NVPARAM_PARAM("SWITCH_SYSMODE", INT32_LEN) +NVPARAM_VARPARAM("0:MAC_SP", NVEE_LEN_0_MAC_SP) +NVPARAM_PARAM("0:NETMODE", INT32_LEN) +NVPARAM_VARPARAM("0:IP_Address", NVEE_LEN_0_IP_Address) +NVPARAM_VARPARAM("0:NETMASK", NVEE_LEN_0_NETMASK) +NVPARAM_VARPARAM("0:GATEWAY", NVEE_LEN_0_GATEWAY) +NVPARAM_VARPARAM("0:DNSSVR", NVEE_LEN_0_DNSSVR) +NVPARAM_VARPARAM("0:DNSSVR2", NVEE_LEN_0_DNSSVR2) +NVPARAM_PARAM("0:TEMP_STATIC_IP", INT32_LEN) + +NVPARAM_PARAM("1:NETMODE", INT32_LEN) +NVPARAM_VARPARAM("1:IP_Address", NVEE_LEN_1_IP_Address) +NVPARAM_VARPARAM("1:NETMASK", NVEE_LEN_1_NETMASK) +NVPARAM_VARPARAM("1:GATEWAY", NVEE_LEN_1_GATEWAY) +NVPARAM_VARPARAM("1:DNSSVR", NVEE_LEN_1_DNSSVR) +NVPARAM_VARPARAM("1:DNSSVR2", NVEE_LEN_1_DNSSVR2) + +/* DHCP Server */ +NVPARAM_PARAM("USEDHCPD", INT32_LEN) +NVPARAM_VARPARAM("1:DHCPD_S_IP", NVEE_LEN_1_DHCP_SERVER_START_IP) +NVPARAM_VARPARAM("1:DHCPD_E_IP", NVEE_LEN_1_DHCP_SERVER_END_IP) +NVPARAM_PARAM("1:DHCPD_TIME", INT32_LEN) +NVPARAM_VARPARAM("1:DHCPD_DNS", NVEE_LEN_1_DHCP_SERVER_DNS) + +NVPARAM_VARPARAM("1:DHCPV6D_S_IP", NVEE_LEN_1_DHCPV6_SERVER_START_IP) +NVPARAM_VARPARAM("1:DHCPV6D_E_IP", NVEE_LEN_1_DHCPV6_SERVER_END_IP) +NVPARAM_VARPARAM("1:DHCPV6D_DNS", NVEE_LEN_1_DHCPV6_SERVER_DNS) +NVPARAM_PARAM("1:DHCPV6D_TIME", INT32_LEN) + +/* DHCP Client hostname */ +NVPARAM_VARPARAM("DHCPC_HOSTNAME", NVEE_LEN_DHCPC_HOSTNAME) + +/* Timezone */ +NVPARAM_PARAM("TZONE", INT32_LEN) + +/* SNTP Server */ +NVPARAM_VARPARAM("SNTP_SVR", NVEE_LEN_SNTP_SERVER_DOMAIN) +NVPARAM_VARPARAM("SNTP_SVR_1", NVEE_LEN_SNTP_SERVER1_DOMAIN) +NVPARAM_VARPARAM("SNTP_SVR_2", NVEE_LEN_SNTP_SERVER2_DOMAIN) +NVPARAM_PARAM("SNTP_PERIOD", INT32_LEN) +NVPARAM_PARAM("SNTP_RUN_FLAG", INT32_LEN) + +/* UART Config */ +NVPARAM_PARAM("UART2_BAUDRATE", INT32_LEN) +NVPARAM_PARAM("UART2_BITS", INT32_LEN) +NVPARAM_PARAM("UART2_PARITY", INT32_LEN) +NVPARAM_PARAM("UART2_STOPBIT", INT32_LEN) +NVPARAM_PARAM("UART2_FLOWCTRL", INT32_LEN) + +NVPARAM_PARAM("UART3_BAUDRATE", INT32_LEN) +NVPARAM_PARAM("UART3_BITS", INT32_LEN) +NVPARAM_PARAM("UART3_PARITY", INT32_LEN) +NVPARAM_PARAM("UART3_STOPBIT", INT32_LEN) +NVPARAM_VARPARAM("UART3_FLOWCTRL", NVEE_LEN_UART3_FLOWCTRL) +NVPARAM_AREA_END() + +//= ============================================================================ +// Applicantion +//= ============================================================================ +NVPARAM_AREA(appcfg, NVMS_GENERIC_PART) + +// TAG-NAME, MAX-LENGTH +NVPARAM_PARAM("MQTT_TLS_NO_TIME_CHK", INT32_LEN) +NVPARAM_VARPARAM("MQTT_BROKER", NVEE_LEN_MQTT_BROKER) +NVPARAM_PARAM("MQTT_PORT", INT32_LEN) +NVPARAM_PARAM("MQTT_QOS", INT32_LEN) +NVPARAM_VARPARAM("MQTT_SUB_TOPIC", NVEE_LEN_MQTT_SUB_TOPIC) +NVPARAM_VARPARAM("MQTT_SUB_TOPIC0", NVEE_LEN_MQTT_SUB_TOPIC0) +NVPARAM_VARPARAM("MQTT_SUB_TOPIC1", NVEE_LEN_MQTT_SUB_TOPIC1) +NVPARAM_VARPARAM("MQTT_SUB_TOPIC2", NVEE_LEN_MQTT_SUB_TOPIC2) +NVPARAM_VARPARAM("MQTT_SUB_TOPIC3", NVEE_LEN_MQTT_SUB_TOPIC3) +NVPARAM_PARAM("MQTT_SUB_TOPIC_NUM", INT32_LEN) +NVPARAM_VARPARAM("MQTT_PUB_TOPIC", NVEE_LEN_MQTT_PUB_TOPIC) +NVPARAM_PARAM("MQTT_TLS", INT32_LEN) +NVPARAM_PARAM("MQTT_PING_PERIOD", INT32_LEN) +NVPARAM_PARAM("MQTT_AUTO", INT32_LEN) +NVPARAM_VARPARAM("MQTT_USERNAME", NVEE_LEN_MQTT_USERNAME) +NVPARAM_VARPARAM("MQTT_PASSWORD", NVEE_LEN_MQTT_PASSWORD) +NVPARAM_VARPARAM("MQTT_WILL_TOPIC", NVEE_LEN_MQTT_WILL_TOPIC) +NVPARAM_VARPARAM("MQTT_WILL_MSG", NVEE_LEN_MQTT_WILL_MSG) +NVPARAM_PARAM("MQTT_WILL_QOS", INT32_LEN) +NVPARAM_PARAM("MQTT_CLEAN_SESSION", INT32_LEN) +NVPARAM_PARAM("MQTT_VER311", INT32_LEN) +NVPARAM_VARPARAM("MQTT_SUB_CID", NVEE_LEN_MQTT_SUB_CID) +NVPARAM_VARPARAM("MQTT_PUB_CID", NVEE_LEN_MQTT_PUB_CID) +NVPARAM_PARAM("MQTT_TLS_ALPN_NUM", INT32_LEN) +NVPARAM_VARPARAM("MQTT_TLS_ALPN0", NVEE_LEN_MQTT_TLS_ALPN0) +NVPARAM_VARPARAM("MQTT_TLS_ALPN1", NVEE_LEN_MQTT_TLS_ALPN1) +NVPARAM_VARPARAM("MQTT_TLS_ALPN2", NVEE_LEN_MQTT_TLS_ALPN2) +NVPARAM_VARPARAM("MQTT_TLS_SNI", NVEE_LEN_MQTT_TLS_SNI) +NVPARAM_PARAM("MQTT_TLS_CSUIT_NUM", INT32_LEN) +NVPARAM_VARPARAM("MQTT_TLS_CSUIT", NVEE_LEN_MQTT_TLS_CSUIT) +NVPARAM_PARAM("MQTT_TLS_INCOMING", INT32_LEN) +NVPARAM_PARAM("MQTT_TLS_OUTGOING", INT32_LEN) +NVPARAM_PARAM("MQTT_TLS_AUTHMODE", INT32_LEN) +NVPARAM_PARAM("MQTT_TLS_VER", INT32_LEN) +NVPARAM_PARAM("MQTT_AT_MSG_FMT_VER", INT32_LEN) + +/* HTTP Client */ +NVPARAM_PARAM("HTTPC_TLS_VER", INT32_LEN) +NVPARAM_PARAM("HTTPC_TLS_AUTHMODE", INT32_LEN) +NVPARAM_PARAM("HTTPC_TLS_ALPN_NUM", INT32_LEN) +NVPARAM_VARPARAM("HTTPC_TLS_ALPN0", NVEE_LEN_HTTPC_TLS_ALPN0) +NVPARAM_VARPARAM("HTTPC_TLS_ALPN1", NVEE_LEN_HTTPC_TLS_ALPN1) +NVPARAM_VARPARAM("HTTPC_TLS_ALPN2", NVEE_LEN_HTTPC_TLS_ALPN2) +NVPARAM_VARPARAM("HTTPC_TLS_SNI", NVEE_LEN_HTTPC_TLS_SNI) + +/* HTTP Server */ +NVPARAM_PARAM("HTTPS_ENABLE", INT32_LEN) + +/* OTA update */ +NVPARAM_PARAM("OTA_TLS_VER", INT32_LEN) +NVPARAM_PARAM("OTA_TLS_AUTHMODE", INT32_LEN) +NVPARAM_PARAM("OTA_TLS_ALPN_NUM", INT32_LEN) +NVPARAM_VARPARAM("OTA_TLS_ALPN0", NVEE_LEN_OTA_TLS_ALPN0) +NVPARAM_VARPARAM("OTA_TLS_ALPN1", NVEE_LEN_OTA_TLS_ALPN1) +NVPARAM_VARPARAM("OTA_TLS_ALPN2", NVEE_LEN_OTA_TLS_ALPN2) +NVPARAM_VARPARAM("OTA_TLS_SNI", NVEE_LEN_OTA_TLS_SNI) +NVPARAM_PARAM("OTA_PROG_RTOS", INT32_LEN) +NVPARAM_PARAM("OTA_MODE", INT32_LEN) +NVPARAM_PARAM("OTA_EXPIRE", INT32_LEN) +NVPARAM_VARPARAM("OTA_URL", NVEE_LEN_URL) + +/* BLE-COMBO : BLE Provisioning - provisioning status */ +NVPARAM_VARPARAM("provisioned", NVEE_LEN_BLE_COMBO_PROVISIONED) +NVPARAM_VARPARAM("SERVER_IP", NVEE_LEN_BLE_COMBO_PROV_SRV_IP) +NVPARAM_VARPARAM("SERVER_PORT", NVEE_LEN_BLE_COMBO_PROV_SRV_PORT) + +/* BLE-COMBO : For Gas leak sample */ +NVPARAM_VARPARAM("sensor_started", NVEE_LEN_BLE_COMBO_SENSOR_STARTED) + +/* BLE-COMBO : For Sensor gateway sample */ +NVPARAM_VARPARAM("UDP_SERVER_IP", NVEE_LEN_BLE_COMBO_SENSOR_GW_UDP_SVR_IP) +NVPARAM_VARPARAM("UDP_SERVER_PORT", NVEE_LEN_BLE_COMBO_SENSOR_GW_UDP_SVR_PORT) + +/* BLE-COMBO : For TCPC DPM sample */ +NVPARAM_VARPARAM("TCPC_SERVER_IP", NVEE_LEN_BLE_COMBO_TCPC_SVR_IP) +NVPARAM_VARPARAM("TCPC_SERVER_PORT", NVEE_LEN_BLE_COMBO_TCPC_SVR_PORT) + +/* BLE-COMBO : For OTA */ +NVPARAM_VARPARAM("URI_RTOS", NVEE_LEN_BLE_COMBO_OTA_URI_RTOS) +NVPARAM_VARPARAM("URI_BLE", NVEE_LEN_BLE_COMBO_OTA_URI_BLE) + +/* ATCMD: TCP Server, Client, and UDP */ +NVPARAM_PARAM("0:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("2:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("3:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("4:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("5:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("6:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("7:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("8:ATC_NW_TR_CID", INT32_LEN) +NVPARAM_PARAM("9:ATC_NW_TR_CID", INT32_LEN) + +NVPARAM_PARAM("0:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("2:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("3:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("4:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("5:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("6:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("7:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("8:ATC_NW_TR_LPORT", INT32_LEN) +NVPARAM_PARAM("9:ATC_NW_TR_LPORT", INT32_LEN) + +NVPARAM_PARAM("0:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("2:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("3:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("4:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("5:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("6:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("7:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("8:ATC_NW_TR_PPORT", INT32_LEN) +NVPARAM_PARAM("9:ATC_NW_TR_PPORT", INT32_LEN) + +NVPARAM_PARAM("0:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("2:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("3:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("4:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("5:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("6:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("7:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("8:ATC_NW_TR_MAX_PEER", INT32_LEN) +NVPARAM_PARAM("9:ATC_NW_TR_MAX_PEER", INT32_LEN) + +NVPARAM_VARPARAM("0:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("1:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("2:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("3:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("4:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("5:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("6:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("7:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("8:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) +NVPARAM_VARPARAM("9:ATC_NW_TR_PIPADDR", NVEE_LEN_ATC_NW_TR_PIPADDR) + +NVPARAM_PARAM("0:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("2:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("3:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("4:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("5:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("6:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("7:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("8:ATC_NW_TR_IP_TYPE", INT32_LEN) +NVPARAM_PARAM("9:ATC_NW_TR_IP_TYPE", INT32_LEN) + +/* ATCMD: TLS Client */ +NVPARAM_PARAM("0:ATC_NW_TLS_CID", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TLS_CID", INT32_LEN) +NVPARAM_PARAM("0:ATC_NW_TLS_ROLE", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TLS_ROLE", INT32_LEN) +NVPARAM_PARAM("0:ATC_NW_TLS_PROFILE", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TLS_PROFILE", INT32_LEN) +NVPARAM_VARPARAM("0:ATC_NW_TLSC_CA_NAME", NVEE_LEN_ATC_NW_TLSC_CA_CERT_NAME) +NVPARAM_VARPARAM("1:ATC_NW_TLSC_CA_NAME", NVEE_LEN_ATC_NW_TLSC_CA_CERT_NAME) +NVPARAM_VARPARAM("0:ATC_NW_TLSC_CERT_NAME", NVEE_LEN_ATC_NW_TLSC_CERT_NAME) +NVPARAM_VARPARAM("1:ATC_NW_TLSC_CERT_NAME", NVEE_LEN_ATC_NW_TLSC_CERT_NAME) +NVPARAM_VARPARAM("0:ATC_NW_TLSC_HOST_NAME", NVEE_LEN_ATC_NW_TLSC_HOST_NAME) +NVPARAM_VARPARAM("1:ATC_NW_TLSC_HOST_NAME", NVEE_LEN_ATC_NW_TLSC_HOST_NAME) +NVPARAM_PARAM("0:ATC_NW_TLSC_AUTH_MODE", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TLSC_AUTH_MODE", INT32_LEN) +NVPARAM_PARAM("0:ATC_NW_TLSC_INCOMING", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TLSC_INCOMING", INT32_LEN) +NVPARAM_PARAM("0:ATC_NW_TLSC_OUTGOING", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TLSC_OUTGOING", INT32_LEN) +NVPARAM_PARAM("0:ATC_NW_TLSC_LPORT", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TLSC_LPORT", INT32_LEN) +NVPARAM_PARAM("0:ATC_NW_TLSC_PPORT", INT32_LEN) +NVPARAM_PARAM("1:ATC_NW_TLSC_PPORT", INT32_LEN) +NVPARAM_VARPARAM("0:ATC_NW_TLSC_PIPADDR", NVEE_LEN_ATC_NW_TLSC_PIPADDR) +NVPARAM_VARPARAM("1:ATC_NW_TLSC_PIPADDR", NVEE_LEN_ATC_NW_TLSC_PIPADDR) + +// Apps WiFi Provisioning for Mobile App. +NVPARAM_VARPARAM("APP_THINGNAME", NVEE_LEN_APP_APPTHINGNAME) + +NVPARAM_PARAM("setsleepMode", INT32_LEN) +NVPARAM_PARAM("sleepmodertctime", INT32_LEN) + +/* AWS IoT Application */ +NVPARAM_VARPARAM(AWSIOT_CFG_THINGNAME, NVEE_LEN_AWSIOT_CFG_THINGNAME) +NVPARAM_VARPARAM(AWSIOT_CFG_FLEET_PROVISIONING_DEVICE_ID, NVEE_LEN_FLEET_PROVISIONING_DEVICE_ID) +NVPARAM_VARPARAM(AWSIOT_CFG_FLEET_PROVISIONING_TEMPLATE_NAME, NVEE_LEN_AWSIOT_CFG_FLEET_PROV_TEMPLATE_NAME) +NVPARAM_VARPARAM(AWSIOT_CFG_SAVED_IP_ADDRESS, NVEE_LEN_AWSIOT_CFG_SAVED_IP_ADDRESS) +NVPARAM_VARPARAM(AWSIOT_CFG_OTA_URL, NVEE_LEN_AWSIOT_CFG_OTA_URL) +NVPARAM_PARAM(AWSIOT_CFG_OTA_STATE, INT32_LEN) +NVPARAM_PARAM(AWSIOT_CFG_OTA_RESULT, INT32_LEN) +NVPARAM_PARAM(AWSIOT_CFG_OTA_FLAG, INT32_LEN) +NVPARAM_PARAM(AWSIOT_CFG_SLEEP_MODE2_RTC_TIME, INT32_LEN) +NVPARAM_VARPARAM(AWSIOT_CFG_FIRST_SNTP_TIME, NVEE_LEN_FIRST_SNTP_TIME) +NVPARAM_PARAM(AWSIOT_CFG_SNTP_SUCCESS_FLAG, UINT8_LEN) +NVPARAM_PARAM(AWSIOT_CFG_USE_FLEET_PROVISION, UINT8_LEN) +NVPARAM_VARPARAM(AWSIOT_CFG_BROKER_URL, NVEE_LEN_BROKER_URL) +NVPARAM_VARPARAM(AWSIOT_CFG_BOARD_FEATURE, NVEE_LEN_BOARD_FEATURE) +NVPARAM_PARAM(AWSIOT_CFG_LPORT, INT32_LEN) +NVPARAM_PARAM(AWSIOT_CFG_PORT, INT32_LEN) +NVPARAM_VARPARAM(AWSIOT_CFG_STOPIC, NVEE_LEN_STOPIC) +NVPARAM_VARPARAM(AWSIOT_CFG_PTOPIC, NVEE_LEN_PTOPIC) +NVPARAM_PARAM(AWSIOT_CFG_DPM_SLEEP_MODE, UINT8_LEN) +NVPARAM_PARAM(AWSIOT_CFG_USE_DPM, UINT8_LEN) +NVPARAM_PARAM(AWSIOT_CFG_RTC_TIME, INT32_LEN) +NVPARAM_PARAM(AWSIOT_CFG_DPM_KEEP_ALIVE_TIME, INT32_LEN) +NVPARAM_PARAM(AWSIOT_CFG_USER_WAKE_UP_TIME, INT32_LEN) +NVPARAM_PARAM(AWSIOT_CFG_TIM_WAKE_UP_TIME, INT32_LEN) +NVPARAM_VARPARAM(AWSIOT_CFG_MCU_WAKEUP_PORT, NVEE_LEN_MCU_WAKEUP_PORT) +NVPARAM_VARPARAM(AWSIOT_CFG_MCU_WAKEUP_PIN, NVEE_LEN_MCU_WAKEUP_PIN) +NVPARAM_PARAM(AWSIOT_CFG_PING_CHECK, UINT8_LEN) +NVPARAM_PARAM(AWSIOT_CFG_DPM_AUTO, UINT8_LEN) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_0, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_1, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_2, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_3, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_4, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_5, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_6, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_7, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_8, NVEE_LEN_THING_ATTRIBUTE) +NVPARAM_VARPARAM(AWSIOT_CFG_THING_ATTIRIBUTE_9, NVEE_LEN_THING_ATTRIBUTE) + +/* Azure IOT Application */ +NVPARAM_VARPARAM(APP_NVRAM_CONFIG_DEV_PRIMARY_KEY, NVEE_LEN_APP_NVRAM_CONFIG_DEV_PRIMARY_KEY) +NVPARAM_VARPARAM(APP_NVRAM_CONFIG_HOST_NAME, NVEE_LEN_APP_NVRAM_CONFIG_HOST_NAME) +NVPARAM_VARPARAM(APP_NVRAM_CONFIG_IOTHUB_CONN_STRING, NVEE_LEN_APP_NVRAM_CONFIG_IOTHUB_CONN_STRING) +NVPARAM_VARPARAM(APP_NVRAM_CONFIG_THINGNAME, NVEE_LEN_APP_NVRAM_CONFIG_THINGNAME) +NVPARAM_VARPARAM(APP_NVRAM_DEVICE_CONNECTION_STRING, NVEE_LEN_APP_NVRAM_DEVICE_CONNECTION_STRING) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_CURRENT_OTA_VERSION, NVEE_LEN_AZURE_NVRAM_CONFIG_CURRENT_OTA_VERSION) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_CURRENT_MCUOTA_VERSION, NVEE_LEN_AZURE_NVRAM_CONFIG_CURRENT_MCUOTA_VERSION) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_OTA_URL, NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_URL) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_OTA_VERSION, NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_VERSION) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_MCUOTA_VERSION, NVEE_LEN_AZURE_NVRAM_CONFIG_MCUOTA_VERSION) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_PORT, NVEE_LEN_AZURE_NVRAM_CONFIG_PORT) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_OTA_FLAG, NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_FLAG) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_OTA_STATE, NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_STATE) +NVPARAM_VARPARAM(AZURE_NVRAM_CONFIG_OTA_RESULT, NVEE_LEN_AZURE_NVRAM_CONFIG_OTA_RESULT) + +/* TCP Client application */ +NVPARAM_PARAM("TCPC_ACTIVE", NVEE_LEN_APP_TCPC_ACTIVE) +NVPARAM_VARPARAM("TCPC_PEER_IP_ADDR", NVEE_LEN_APP_TCPC_PEER_IP_ADDR) +NVPARAM_PARAM("TCPC_PEER_PORT", NVEE_LEN_APP_TCPC_PEER_PORT) +NVPARAM_PARAM("TCPC_SEND_PERIOD", NVEE_LEN_APP_TCPC_SEND_PERIOD) +NVPARAM_PARAM("TCPC_SEND_DATA_SIZE", NVEE_LEN_APP_TCPC_SEND_DATA_SIZE) +NVPARAM_PARAM("TCPC_AUTO_REST_EXIT", NVEE_LEN_APP_TCPC_AUTO_RESTART_AT_EXIT) +NVPARAM_PARAM("TCPC_KA_ENABLE", NVEE_LEN_APP_TCPC_KA_ENABLE) +NVPARAM_PARAM("TCPC_KA_IDLE_TIME", NVEE_LEN_APP_TCPC_KA_IDLE_TIME) +NVPARAM_PARAM("TCPC_KA_INTVL_TIME", NVEE_LEN_APP_TCPC_KA_INTVL_TIME) +NVPARAM_PARAM("TCPC_KA_MAX_PROBES", NVEE_LEN_APP_TCPC_KA_MAX_PROBES) + +/* ATCMD: Wake up source status */ +NVPARAM_PARAM("GPIO_WAKEUP_SOURCE_PIN", INT32_LEN) +NVPARAM_PARAM("GPIO_WAKEUP_SOURCE_EDGE_TYPE", INT32_LEN) +NVPARAM_AREA_END() + +//= ============================================================================= +// blecfg - for development BLE commands +//= ============================================================================= +NVPARAM_AREA(blecfg, NVMS_GENERIC_PART) + +/* Public BD address */ +NVPARAM_VARPARAM("PUBLIC_BD_ADDR", NVEE_LEN_BLECFG_BD_ADDR) + +NVPARAM_AREA_END() + +//= ============================================================================= +// blesec - for BLE Security +//= ============================================================================= + +NVPARAM_AREA(blesec, NVMS_GENERIC_PART) + +/* Public BD address */ +NVPARAM_PARAM("BOOT_DATA", NVEE_LEN_BLESEC_BOOT_DATA) +NVPARAM_PARAM("BONDING_DATA1", NVEE_LEN_BLESEC_BONDING_DATA) +NVPARAM_PARAM("BONDING_DATA2", NVEE_LEN_BLESEC_BONDING_DATA) +NVPARAM_PARAM("BONDING_DATA3", NVEE_LEN_BLESEC_BONDING_DATA) +NVPARAM_PARAM("BONDING_DATA4", NVEE_LEN_BLESEC_BONDING_DATA) +NVPARAM_PARAM("BONDING_DATA5", NVEE_LEN_BLESEC_BONDING_DATA) +NVPARAM_PARAM("BONDING_DATA6", NVEE_LEN_BLESEC_BONDING_DATA) +NVPARAM_PARAM("BONDING_DATA7", NVEE_LEN_BLESEC_BONDING_DATA) + +// NVPARAM_PARAM("BDADDR2", NVEE_LEN_BLESEC_BONDING_DATA) +NVPARAM_AREA_END() + +//= ============================================================================= +// testcfg - for development test commands +//= ============================================================================= +NVPARAM_AREA(testcfg, NVMS_GENERIC_PART) + +// TAG-NAME, MAX-LENGTH + +/* Tx Power debug */ +NVPARAM_VARPARAM("DBG_TXPWR_L_2GO", NVEE_LEN_DBG_TXPWR_2G_OFDM) +NVPARAM_VARPARAM("DBG_TXPWR_L_2GD", NVEE_LEN_DBG_TXPWR_2G_DSSS) +NVPARAM_VARPARAM("DBG_TXPWR_L_5GP", NVEE_LEN_DBG_TXPWR_5G) +NVPARAM_VARPARAM("DBG_TXPWR_L_5GF", NVEE_LEN_DBG_TXPWR_5G_FLG) + +NVPARAM_PARAM("ldpc", INT32_LEN) +NVPARAM_PARAM("stbc", INT32_LEN) + +NVPARAM_VARPARAM("sku_id", STR_INT32_LEN) +NVPARAM_AREA_END() + +NVPARAM_AREA(wifiprofile, NVMS_GENERIC_PART) +NVPARAM_VARPARAM(WIFI_PROFILE_COUNTRY_CODE, NVEE_LEN_WIFI_country_code) +NVPARAM_PARAM(WIFI_PROFILE_SYS_MODE, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_BAND, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_CHANNEL, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_WIFI_MODE, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_PMF, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_ENABLE_DPM, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_DPM_DEBUG_RUNTIME_FLAG, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_DPM_DPM_KEEPALIVE_TIME, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_DPM_USER_WAKEUP_TIME, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_DPM_TIM_WAKEUP_COUNT, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_DPM_BLE_HIBERNATE, INT32_LEN) +NVPARAM_VARPARAM(WIFI_PROFILE_SSID_0, NVEE_LEN_WIFI_ssid_0) +NVPARAM_VARPARAM(WIFI_PROFILE_SSID_1, NVEE_LEN_WIFI_ssid_1) +NVPARAM_PARAM(WIFI_PROFILE_HIDDEN_SSID, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_PMF_0, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_PMF_1, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_SECURITY_0, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_SECURITY_1, INT32_LEN) +NVPARAM_VARPARAM(WIFI_PROFILE_ENCKEY_0, NVEE_LEN_WIFI_password_0) +NVPARAM_VARPARAM(WIFI_PROFILE_ENCKEY_1, NVEE_LEN_WIFI_password_1) +NVPARAM_VARPARAM(WIFI_PROFILE_SAE_GROUPS_0, NVEE_LEN_sae_groups) +NVPARAM_VARPARAM(WIFI_PROFILE_SAE_GROUPS_1, NVEE_LEN_sae_groups) +NVPARAM_VARPARAM(WIFI_PROFILE_WEPKEY0_0, NVEE_LEN_WIFI_wep_key) +NVPARAM_PARAM(WIFI_PROFILE_WEPINDEX_0, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_WEPTYPE_0, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_EAP_AUTH_MODE, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_EAP_PHASE2, INT32_LEN) +NVPARAM_VARPARAM(WIFI_PROFILE_EAP_ID, NVEE_LEN_WIFI_eap_id) +NVPARAM_VARPARAM(WIFI_PROFILE_EAP_PW, NVEE_LEN_WIFI_eap_pw) +NVPARAM_PARAM(WIFI_PROFILE_P2P_SSID_POSTFIX, NVEE_LEN__WIFI_p2p_ssid_postfix) +NVPARAM_PARAM(WIFI_PROFILE_P2P_GROUP_IDLE, NVEE_LEN__WIFI_p2p_group_idle) +NVPARAM_PARAM(WIFI_PROFILE_P2P_LISTEN_CH, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_P2P_GO_INTENT, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_P2P_FIND_TIMEOUT, NVEE_LEN_WIFI_p2p_find_timeout) +NVPARAM_PARAM(WIFI_PROFILE_NETMODE_0, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_NETMODE_1, INT32_LEN) +NVPARAM_VARPARAM(WIFI_PROFILE_IPADDR_0, NVEE_LEN_WIFI_ipaddress_0) +NVPARAM_VARPARAM(WIFI_PROFILE_IPADDR_1, NVEE_LEN_WIFI_ipaddress_1) +NVPARAM_VARPARAM(WIFI_PROFILE_NETMASK_0, NVEE_LEN_WIFI_subnetmask_0) +NVPARAM_VARPARAM(WIFI_PROFILE_NETMASK_1, NVEE_LEN_WIFI_subnetmask_1) +NVPARAM_VARPARAM(WIFI_PROFILE_GATEWAY_0, NVEE_LEN_WIFI_gateway_0) +NVPARAM_VARPARAM(WIFI_PROFILE_GATEWAY_1, NVEE_LEN_WIFI_gateway_1) +NVPARAM_VARPARAM(WIFI_PROFILE_DNSSVR_0, NVEE_LEN_WIFI_dns_0) +NVPARAM_VARPARAM(WIFI_PROFILE_DNSSVR_1, NVEE_LEN_WIFI_dns_1) +NVPARAM_PARAM(WIFI_PROFILE_COMPLETE, INT32_LEN) +NVPARAM_VARPARAM(WIFI_PROFILE_DNSSVR_2ND_0, PARAM_IPADDR_LEN) +NVPARAM_VARPARAM(WIFI_PROFILE_DNSSVR_2ND_1, PARAM_IPADDR_LEN) +NVPARAM_PARAM(WIFI_PROFILE_AP_MAX_INACTIVITY_1, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_AP_WMM_PS_1, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_AP_WMM_1, INT32_LEN) +NVPARAM_PARAM(WIFI_PROFILE_SCAN_CHAN_NUM, INT32_LEN) +NVPARAM_VARPARAM(WIFI_PROFILE_SCAN_CHAN_LIST, NVEE_LEN_WIFI_chan_list) +NVPARAM_PARAM(WIFI_PROFILE_AP_ENC_MODE_1, INT32_LEN) +NVPARAM_AREA_END() +#endif // (dg_configNVPARAM_ADAPTERv2 == 1) + +#endif /* PLATFORM_NVPARAM_H_ */ + +/** + * \} + * \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/sdk_defs.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/sdk_defs.h new file mode 100644 index 000000000000..88cdafb6d3c6 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/sdk_defs.h @@ -0,0 +1,997 @@ +/** + * \addtogroup PLA_BSP_SYSTEM + * \{ + * \addtogroup BSP_DEFINITIONS SDK Platform Definitions + * + * \brief Platform definitions + * + * \{ + */ + +/** + **************************************************************************************** + * + * @file sdk_defs.h + * + * @brief Central include header file with platform definitions. + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __SDK_DEFS_H__ + #define __SDK_DEFS_H__ + + #if !dg_configPTIM_APP + #include "bsp_api.h" + #include "config/bsp_definitions.h" + #include "config/bsp_sflash_map_ra6w1.h" + #include "config/bsp_defaults.h" + #endif + #include + #include + #include + + #ifdef __cplusplus +extern "C" { + #endif + + #ifdef __GNUC__ + #define GCC_VERSION (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100 \ + + __GNUC_PATCHLEVEL__) + +/* assert gcc version is at least 4.9.3 */ + #if GCC_VERSION < 40903 + #error "Please use gcc version 4.9.3 or newer!" + #endif + #endif + + #include "bsp_api.h" + + #ifndef BSP_DEVICE_REVISION + #error "BSP_DEVICE_REVISION is not defined" + #endif + #ifndef DEVICE_REV_A + #error "DEVICE_REV_A is not defined" + #endif + #ifndef DEVICE_REV_B + #error "DEVICE_REV_B is not defined" + #endif + + #include "R7SA6W1CE.h" + + #if (DEVICE_FAMILY != DA1640X) + #error "Unknown device type -- check the value of dg_configDEVICE" + #endif /* DEVICE_FAMILY */ + +/************************ + * Memory map + ************************/ + +/** + * \brief Remapped device base address. + */ + #if (DEVICE_FAMILY == DA1640X) + #define MEMORY_REMAPPED_BASE 0x00000000UL + #define MEMORY_REMAPPED_END 0x08000000UL + #endif /* DEVICE_FAMILY */ + +/** + * \brief Remapped device memory size. + */ + #define MEMORY_REMAPPED_SIZE (MEMORY_REMAPPED_END - MEMORY_REMAPPED_BASE) + +/** + * \brief ROM base address. + */ + #if (DEVICE_FAMILY == DA1640X) + #define MEMORY_ROM_BASE 0xF020000UL + #define MEMORY_ROM_END (MEMORY_ROM_BASE + 0x40000UL) + #endif /* DEVICE_FAMILY */ + +/** + * \brief ROM memory size. + */ + #define MEMORY_ROM_SIZE (MEMORY_ROM_END - MEMORY_ROM_BASE) + +/** + * \brief OTP memory base address. + */ + #if (DEVICE_FAMILY == DA1640X) + #define MEMORY_OTP_BASE 0x400F2000UL + #define MEMORY_OTP_END 0x400F2800UL + #endif /* DEVICE_FAMILY */ + +/** + * \brief OTP memory size. + */ + #define MEMORY_OTP_SIZE (MEMORY_OTP_END - MEMORY_OTP_BASE) + +/** + * \brief SYSTEM RAM base address. + */ + #if (DEVICE_FAMILY == DA1640X) + #define MEMORY_SYSRAM_BASE 0x20000000UL + #define MEMORY_SYSRAM_END (MEMORY_SYSRAM_BASE + 0xc0000UL) + #endif /* DEVICE_FAMILY */ + +/** + * \brief SYSTEM RAM size. + */ + #define MEMORY_SYSRAM_SIZE (MEMORY_SYSRAM_END - MEMORY_SYSRAM_BASE) + +/** + * \brief CACHE RAM base address. + */ + #if (DEVICE_FAMILY == DA1640X) + #define MEMORY_CACHERAM_BASE 0x18A00000UL + #define MEMORY_CACHERAM_END 0x18A10000UL + #endif /* DEVICE_FAMILY */ + +/** + * \brief CACHE RAM size. + */ + #define MEMORY_CACHERAM_SIZE (MEMORY_CACHERAM_END - MEMORY_CACHERAM_BASE) + +/** + * \brief QSPI Flash base address. + */ + #if (DEVICE_FAMILY == DA1640X) + +/* + * OQSPI AHB-C(ode) bus (cached). Accesses through this bus + * are restricted according to CACHE_FLASH_REG. + */ + #define MEMORY_OQSPIC_BASE (0x0A000000) // before (0x19000000UL) + #define MEMORY_OQSPIC_END (0x0DFFFFFF) // before (0x1D000000UL) + + #define MEMORY_OQSPIC_SIZE (MEMORY_OQSPIC_END - MEMORY_OQSPIC_BASE) + +/* + * OQSPI AHB-S(ystem) bus (Not cached). Accesses through this bus + * are not affected by CACHE_FLASH_REG. + */ + #define MEMORY_OQSPIC_S_BASE (0x2A000000) // before (0x3A000000UL) + #define MEMORY_OQSPIC_S_END (0x2DFFFFFF) // before (0x3E000000UL) + +/* + * QSPI AHB-C(ode) bus (cached). Accesses through this bus + * are restricted according to CACHE_FLASH_REG. + */ + #define MEMORY_QSPIF_BASE (0x24000000UL) + #define MEMORY_QSPIF_END (MEMORY_QSPIF_BASE + 0x4000000UL) + +/* + * QSPI Data + */ + #define MEMORY_QSPID_BASE (0x24000000UL) + #define MEMORY_QSPID_END (0x28000000UL) + #define MEMORY_QSPID_SIZE (MEMORY_QSPID_END - MEMORY_QSPID_BASE) + +/* + * DCACHE controller + */ + #define MEMORY_DCACHE_BASE (0x21014000UL) + #define MEMORY_DCACHE_SIZE (0x2000UL) + #define MEMORY_DCACHE_END (MEMORY_DCACHE_BASE + MEMORY_DCACHE_SIZE) + + #endif /* DEVICE_FAMILY */ + +/** + * \brief QSPI Flash memory size. + */ + #define MEMORY_QSPIF_SIZE (MEMORY_QSPIF_END - MEMORY_QSPIF_BASE) + +/** + * \brief The Sector Size of the OQSPI and QSPI flash memories + */ + #define FLASH_SECTOR_SIZE (0x1000) + +/** + * \brief The base address for accessing the Flash memory connected to OQSPI + * + * The base address is used in oqspi_automode. Automode is using a single zero-based address region + * for accessing the Flash devices connected to OQSPI and QSPI controllers (OQSPIC and QSPIC). + * The defined address sub-regions are: + * Address region 1: starting at OQSPI_MEM1_VIRTUAL_BASE_ADDR + * When Flash address is in region 1 then the device connected to OQSPIC is accessed. + * The maximum region size handled by each QSPI controller in automode is 128MBytes. + * The default value of each region size is 0x8000000, allowing 128MBytes region + * for each controller. + */ + #ifndef OQSPI_MEM1_VIRTUAL_BASE_ADDR + #define OQSPI_MEM1_VIRTUAL_BASE_ADDR (0x00000000) + #endif + +/** + * \brief Address is in OQSPI_MEM1 virtual memory region + */ + #define IS_OQSPI_MEM1_VIRTUAL_ADDRESS(_a) WITHIN_RANGE((_a), OQSPI_MEM1_VIRTUAL_BASE_ADDR, \ + (OQSPI_MEM1_VIRTUAL_BASE_ADDR + MEMORY_OQSPIC_SIZE)) + +/** + * \brief The base address for accessing the Flash memory connected to QSPIC + * + * The base address is used in qspi_automode. + */ + #ifndef QSPI_MEM1_VIRTUAL_BASE_ADDR + #define QSPI_MEM1_VIRTUAL_BASE_ADDR (OQSPI_MEM1_VIRTUAL_BASE_ADDR + MEMORY_OQSPIC_SIZE) + #endif + +/** + * \brief OTP User Data Encryption Keys memory base address + */ + #define WITHIN_RANGE(_a, _s, _e) (((uint32_t) (_a) >= (uint32_t) (_s)) && ((uint32_t) (_a) < (uint32_t) (_e))) + +/** + * \brief Address is in the remapped memory region + */ + #define IS_REMAPPED_ADDRESS(_a) WITHIN_RANGE((_a), MEMORY_REMAPPED_BASE, MEMORY_REMAPPED_END) + +/** + * \brief Address is in the ROM region + */ + #define IS_ROM_ADDRESS(_a) WITHIN_RANGE((_a), MEMORY_ROM_BASE, MEMORY_ROM_END) + +/** + * \brief Address is in the SYSTEM RAM region + */ + #define IS_SYSRAM_ADDRESS(_a) WITHIN_RANGE((_a), MEMORY_SYSRAM_BASE, MEMORY_SYSRAM_END) + +/** + * \brief Address is in the CACHE RAM region + */ + #define IS_CACHERAM_ADDRESS(_a) WITHIN_RANGE((_a), MEMORY_CACHERAM_BASE, MEMORY_CACHERAM_END) + +/** + * \brief Address is in the QSPI Flash memory region + */ + #define IS_QSPIF_ADDRESS(_a) WITHIN_RANGE((_a), MEMORY_OQSPIC_BASE, MEMORY_OQSPIC_S_END) + + #if (DEVICE_FAMILY == DA1640X) + +/** + * \brief Address is in the QSPI AHB-S(ystem) memory region + */ + #define IS_QSPIF_S_ADDRESS(_a) WITHIN_RANGE((_a), MEMORY_QSPIF_BASE, MEMORY_QSPIF_END) + #endif /* DEVICE_FAMILY */ + + #if (DEVICE_FAMILY == DA1640X) + +/** + * \brief Address is in the OQSPI Flash memory region + */ + #define IS_OQSPIC_ADDRESS(_a) WITHIN_RANGE((_a), MEMORY_OQSPIC_BASE, MEMORY_OQSPIC_END) + +/** + * \brief Address is in the OQSPI AHB-S(ystem) memory region + */ + #define IS_OQSPIC_S_ADDRESS(_a) WITHIN_RANGE((_a), MEMORY_OQSPIC_S_BASE, MEMORY_OQSPIC_S_END) + + #endif /* DEVICE_FAMILY */ + +/** + * \brief Zero-initialized data retained memory attribute + */ + +// TIN_HACK_WIFI + #define __RETAINED + #define __RETAINED_1 + +/** + * \brief Initialized data retained memory attribute + */ + #define __RETAINED_RW __attribute__((section("retention_mem_init"))) + +/** + * \brief Uninitialized data retained memory attribute. Used for variables that should + * not be initialized during startup. + */ + #define __RETAINED_UNINIT __attribute__((section("retention_mem_uninit"))) + +/** + * \brief Constant data retained memory attribute + */ + #define __RETAINED_CONST_INIT __attribute__((section("retention_mem_const"))) + +/** + * \brief Text retained memory attribute + */ + #if ((dg_configCODE_LOCATION == NON_VOLATILE_IS_FLASH) && (dg_configEXEC_MODE == MODE_IS_CACHED)) + #define __RETAINED_CODE __attribute__((section(".ram_code_from_flash"))) __attribute__((noinline)) \ + __attribute__((optimize("no-tree-switch-conversion"))) + #define __MTB_CODE __attribute__((section("mtb_text_retained"))) __attribute__((noinline)) __attribute__(( \ + optimize( \ + "no-tree-switch-conversion"))) + #else + #define __RETAINED_CODE + #define __MTB_CODE __attribute__((section("mtb_text_retained"))) + #endif + +/** + * \brief Attribute to silence warnings about unused parameters/variables/function + */ + #define __UNUSED __attribute__((unused)) + +/** + * \brief Attribute to tell the compiler to consider a symbol as externally visible (for LTO) + */ + #define __LTO_EXT __attribute__((externally_visible)) + + #if dg_configUSE_HW_SYS + +// Forward declaration +__RETAINED_CODE void hw_sys_assert_trigger_gpio(void); + + #else + #define hw_sys_assert_trigger_gpio() + #endif + +/** + * \brief Assert as warning macro + * + * \note Active only while in development mode + */ + #if (DEVICE_FAMILY == DA1640X) + #define ASSERT_WARNING(a) \ + { \ + if (!(a)) { \ + if (dg_configIMAGE_SETUP == DEVELOPMENT_MODE) { \ + printf(" >> ASSERT_WARNING %s:%d \n", __func__, __LINE__);} \ + } \ + } + +/** + * \brief Assert as error macro + * + */ + #define ASSERT_ERROR(a) \ + { \ + if (dg_configIMAGE_SETUP == DEVELOPMENT_MODE) { \ + if (!(a)) { \ + printf(" >> ASSERT_ERROR %s:%d \n", __func__, __LINE__); \ + } \ + } \ + else { \ + if (!(a)) { \ + __ASM volatile ("cpsid i" : : : "memory"); \ + __BKPT(2); \ + } \ + } \ + } + +/** + * \brief Assert as warning macro when the system is still uninitialized + * + * \note Active only while in development mode. The SW cursor is not activated. + */ + #define ASSERT_WARNING_UNINIT(a) \ + { \ + if (!(a)) { \ + if (dg_configIMAGE_SETUP == DEVELOPMENT_MODE) { \ + printf(" >> ASSERT_WARNING_UNINIT %s:%d \n", __func__, __LINE__);} \ + } \ + } + +/** + * \brief Assert as error macro when the system is still uninitialized + * + * \note The SW cursor is not activated. + */ + #define ASSERT_ERROR_UNINIT(a) \ + { \ + if (dg_configIMAGE_SETUP == DEVELOPMENT_MODE) { \ + if (!(a)) { \ + printf(" >> ASSERT_ERROR_UNINIT %s:%d \n", __func__, __LINE__); \ + } \ + } \ + else { \ + if (!(a)) { \ + __disable_irq(); \ + __BKPT(2); \ + } \ + } \ + } + #endif /* DEVICE_FAMILY */ + +/** + * \brief Macro to disable all interrupts + * + * This macro must always be used with GLOBAL_INT_RESTORE(). E.g. + * + * \code{.c} + * GLOBAL_INT_DISABLE(); + * ... code to be executed with interrupts disabled ... + * GLOBAL_INT_RESTORE(); + * \endcode + * + * \sa GLOBAL_INT_RESTORE + */ + #define GLOBAL_INT_DISABLE() \ + do { \ + unsigned int __l_irq_rest; \ + __ASM volatile ("mrs %0, primask \n\t" \ + "mov r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (__l_irq_rest) \ + : \ + : "r1" \ + ); \ + /*DBG_CONFIGURE_HIGH(CMN_TIMING_DEBUG, CMNDBG_CRITICAL_SECTION);*/ + +/** + * \brief Macro to restore all interrupts + * + * This macro must always be used after GLOBAL_INT_DISABLE(). E.g. + * + * \code{.c} + * GLOBAL_INT_DISABLE(); + * ... code to be executed with interrupts disabled ... + * GLOBAL_INT_RESTORE(); + * \endcode + * + * \sa GLOBAL_INT_DISABLE + */ + #define GLOBAL_INT_RESTORE() \ + if (__l_irq_rest == 0) { \ + /*DBG_CONFIGURE_LOW(CMN_TIMING_DEBUG, CMNDBG_CRITICAL_SECTION);*/ \ + } \ + __ASM volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (__l_irq_rest) \ + : \ + ); \ +} \ + while (0) + + #define containingoffset(address, type, field) ((type *) ((uint8 *) (address) - (size_t) (&((type *) 0)->field))) + +/** + * \brief Macro the minimum of two values + * + * \param[in] a First value + * \param[in] b Second value + */ + #ifndef MIN + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) + #endif + +/** + * \brief Macro the maximum of two values + * + * \param[in] a First value + * \param[in] b Second value + */ + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) + +/** + * \brief Macro to swap the bytes of a 16-bit variable + * + * \param[in] a The 16-bit variable + */ + #if defined(__GNUC__) + #define SWAP16(a) __builtin_bswap16(a) + #else + #define SWAP16(a) ((a << 8) | (a >> 8)) + #endif + +/** + * \brief Macro to swap the bytes of a 32-bit variable + * + * \param[in] a The 32-bit variable + */ + #if defined(__GNUC__) + #define SWAP32(a) __builtin_bswap32(a) + #else + #define SWAP32(a) ((a >> 24 & 0xff) | (a >> 8 & 0xff00) | (a << 8 & 0xff0000) | \ + (a << 24 & 0xff000000)) + #endif + + #if defined(__GNUC__) + #define DEPRECATED __attribute__((deprecated)) + #else + #pragma message "Deprecated macro must be implemented for this compiler" + #define DEPRECATED + #endif + + #if defined(__GNUC__) + #define DEPRECATED_MSG(msg) __attribute__((deprecated(msg))) + #else + #pragma message "Deprecated macro must be implemented for this compiler" + #define DEPRECATED_MSG(msg) + #endif + +/* The following exist in ROM code */ +void __aeabi_memcpy(void * dest, const void * src, size_t n); +void __aeabi_memmove(void * dest, const void * src, size_t n); +void __aeabi_memset(void * dest, size_t n, int c); + +/** + * \brief Optimized memcpy + */ + #define OPT_MEMCPY __aeabi_memcpy + +/** + * \brief Optimized memmove + */ + #define OPT_MEMMOVE __aeabi_memmove + +/** + * \brief Optimized memset + */ + #define OPT_MEMSET(s, c, n) __aeabi_memset(s, n, c) + +/** + * \brief Access register field mask. + * + * Returns a register field mask (aimed to be used with local variables). + * e.g. + * \code + * uint16_t tmp; + * + * tmp = CRG_TOP->SYS_STAT_REG; + * + * if (tmp & REG_MSK(CRG_TOP, SYS_STAT_REG, XTAL16_TRIM_READY)) { + * ... + * \endcode + */ + #define REG_MSK(base, reg, field) \ + (base ## _ ## reg ## _ ## field ## _Msk) + +/** + * \brief Access register field position. + * + * Returns a register field position (aimed to be used with local variables). + */ + #define REG_POS(base, reg, field) \ + (base ## _ ## reg ## _ ## field ## _Pos) + +/** + * \brief Access register field value. + * + * Returns a register field value (aimed to be used with local variables). + * e.g. + * \code + * uint16_t tmp; + * int counter; + * tmp = CRG_TOP->TRIM_CTRL_REG; + * counter = REG_GET_FIELD(CRG_TOP, TRIM_CTRL_REG, XTAL_COUNT_N, tmp); + * ... + * \endcode + */ + #define REG_GET_FIELD(base, reg, field, var) \ + ((var & (base ## _ ## reg ## _ ## field ## _Msk)) >> \ + (base ## _ ## reg ## _ ## field ## _Pos)) + +/** + * \brief Set register field value. + * + * Sets a register field value (aimed to be used with local variables). + * e.g. + * \code + * uint16_t tmp; + * + * tmp = CRG_TOP->TRIM_CTRL_REG; + * REG_SET_FIELD(CRG_TOP, TRIM_CTRL_REG, XTAL_COUNT_N, tmp, 10); + * REG_SET_FIELD(CRG_TOP, TRIM_CTRL_REG, XTAL_TRIM_SELECT, tmp, 2); + * CRG_TOP->TRIM_CTRL_REG = tmp; + * ... + * \endcode + */ + #define REG_SET_FIELD(base, reg, field, var, val) \ + var = ((var & ~((base ## _ ## reg ## _ ## field ## _Msk))) | \ + (((val) << (base ## _ ## reg ## _ ## field ## _Pos)) & \ + (base ## _ ## reg ## _ ## field ## _Msk))) + +/** + * \brief Set memory field value. + * + * Sets a memory field value using a mask (aimed to be used with local variables). + * e.g. + * \code + * uint32_t tmp = *(volatile uint32_t *)0x50000000; + * + * RAW_SET_FIELD(tmp, 0x1UL, 1); + * ... + * \endcode + */ + #define RAW_SET_FIELD(mem, mask, val) \ + mem = ((mem & ~((mask))) | (((val) << (__builtin_ctz(mask))) & (mask))) + +/** + * \brief Clear register field value. + * + * Clears a register field value (aimed to be used with local variables). + * e.g. + * \code + * uint16_t tmp; + * + * tmp = CRG_TOP->TRIM_CTRL_REG; + * REG_CLR_FIELD(CRG_TOP, TRIM_CTRL_REG, XTAL_COUNT_N, tmp); + * REG_CLR_FIELD(CRG_TOP, TRIM_CTRL_REG, XTAL_TRIM_SELECT, tmp); + * CRG_TOP->TRIM_CTRL_REG = tmp; + * ... + * \endcode + */ + #define REG_CLR_FIELD(base, reg, field, var) \ + var &= ~(base ## _ ## reg ## _ ## field ## _Msk) + +/** + * \brief Get the address of a register value by index (provided a register interval) + * + * \note The register interval should be an exact multiple of the register's base size. For example, + * if the register size is 32-bit, then the interval should be 0x4, 0x8, etc. Otherwise, the result + * will be undefined. The interval value must be in bytes. The index value (0,1,2...) is multiplied by + * the interval value (in bytes) to find the actual offset of the register. + * + * Returns a register address value by index + */ + #define REG_GET_ADDR_INDEXED(base, reg, interval, index) \ + ((&base->reg) + (((intptr_t) index) * ((interval) / sizeof(base->reg)))) + +/** + * \brief Return the value of a register field by index (provided a register interval). + * + * e.g. + * \code + * uint16_t val; + * uint16_t index = 2 + * + * val = REG_GETF_INDEXED(FTDF, FTDF_LONG_ADDR_0_0_REG, REG_EXP_SA_L, 0x10, index) + * + * ... + * \endcode + * + * \note The register interval should be an exact multiple of the register's base size. For example, + * if the register size is 32-bit, then the interval should be 0x4, 0x8, etc. Otherwise, the result + * will be undefined. The interval value must be in bytes. The index value (0,1,2...) is multiplied by + * the interval value (in bytes) to find the actual offset of the register. + * + */ + #define REG_GETF_INDEXED(base, reg, field, interval, index) \ + (((*REG_GET_ADDR_INDEXED(base, reg, interval, index)) & \ + (base ## _ ## reg ## _ ## field ## _Msk)) >> (base ## _ ## reg ## _ ## field ## _Pos)) + +/** + * \brief Return the value of a register field. + * + * e.g. + * \code + * uint32_t val; + * + * val = REG_GETF(CRG_TOP, TRIM_CTRL_REG, XTAL_COUNT_N); + * ... + * \endcode + */ + #define REG_GETF(base, reg, field) \ + (((base->reg) & (base ## _ ## reg ## _ ## field ## _Msk)) >> (base ## _ ## reg ## _ ## field ## _Pos)) + +/** + * \brief Return the value of a memory field using a mask. + * + * e.g. + * \code + * uint32_t val; + * + * val = RAW_GETF(0x50000000, 0x1UL); + * ... + * \endcode + */ + #define RAW_GETF(addr, mask) \ + ((*(volatile uint32_t *) (addr) & (mask)) >> (__builtin_ctz(mask))) + +/** + * \brief Set the value of a register field. + * + * e.g. + * \code + * + * REG_SETF(CRG_TOP, TRIM_CTRL_REG, XTAL_COUNT_N, new_value); + * ... + * \endcode + */ + #define REG_SETF(base, reg, field, new_val) \ + base->reg = ((base->reg & ~(base ## _ ## reg ## _ ## field ## _Msk)) | \ + ((base ## _ ## reg ## _ ## field ## _Msk) &((new_val) << (base ## _ ## reg ## _ ## field ## _Pos)))) + +/** + * \brief Set the value of a memory field. + * + * e.g. + * \code + * + * RAW_SETF(0x50000000, 0x1UL, 1); + * ... + * \endcode + */ + #define RAW_SETF(addr, mask, val) \ + (*(volatile uint32_t *) (addr)) = ((*(volatile uint32_t *) (addr) & ~(mask)) | \ + ((mask) & ((val) << __builtin_ctz(mask)))) + +/** + * \brief Set a bit of a register. + * + * e.g. + * \code + * + * REG_SET_BIT(CRG_TOP, CLK_TMR_REG, TMR1_ENABLE); + * ... + * \endcode + */ + #define REG_SET_BIT(base, reg, field) \ + do { \ + base->reg |= (1 << (base ## _ ## reg ## _ ## field ## _Pos)); \ + } while (0) + +/** + * \brief Clear a bit of a register. + * + * e.g. + * \code + * + * REG_CLR_BIT(CRG_TOP, CLK_TMR_REG, TMR1_ENABLE); + * ... + * \endcode + */ + #define REG_CLR_BIT(base, reg, field) \ + do { \ + base->reg &= ~(base ## _ ## reg ## _ ## field ## _Msk); \ + } while (0) + +/** + * \brief Sets register bits, indicated by the mask, to a value. + * + * e.g. + * \code + * REG_SET_MASKED(RFCU_POWER, RF_CNTRL_TIMER_5_REG, 0xFF00, 0x1818); + * \endcode + */ + #define REG_SET_MASKED(base, reg, mask, value) \ + do { \ + base->reg = (base->reg & ~(mask)) | ((value) & (mask)); \ + } while (0) + +/** + * \brief Sets memory bits, indicated by the mask, to a value. + * + * e.g. + * \code + * RAW_SET_MASKED(0x50000000, 0xFF00, 0x1818); + * \endcode + */ + #define RAW_SET_MASKED(addr, mask, value) \ + do { \ + (*(volatile uint32_t *) (addr)) = ((*(volatile uint32_t *) (addr)) & ~(mask)) | ((value) & (mask)); \ + } while (0) + +/** + * \brief Sets 16-bit wide register bits, indicated by the field, to a value v. + */ + #define BITS16(base, reg, field, v) \ + ((uint16) (((uint16) (v) << (base ## _ ## reg ## _ ## field ## _Pos)) & \ + (base ## _ ## reg ## _ ## field ## _Msk))) + +/** + * \brief Sets 32-bit wide register bits, indicated by the field, to a value v. + */ + #define BITS32(base, reg, field, v) \ + ((uint32) (((uint32) (v) << (base ## _ ## reg ## _ ## field ## _Pos)) & \ + (base ## _ ## reg ## _ ## field ## _Msk))) + +/** + * \brief Reads 16-bit wide register bits, indicated by the field, to a variable v. + */ + #define GETBITS16(base, reg, v, field) \ + ((uint16) (((uint16) (v)) & (base ## _ ## reg ## _ ## field ## _Msk)) >> \ + (base ## _ ## reg ## _ ## field ## _Pos)) + +/** + * \brief Reads 32-bit wide register bits, indicated by the field, to a variable v. + */ + #define GETBITS32(base, reg, v, field) \ + ((uint32) (((uint32) (v)) & (base ## _ ## reg ## _ ## field ## _Msk)) >> \ + (base ## _ ## reg ## _ ## field ## _Pos)) + +/** + * \brief Macro to enable the debugger + * + */ + #define ENABLE_DEBUGGER \ + do { \ + REG_SET_BIT(CRG_TOP, SYS_CTRL_REG, DEBUGGER_ENABLE); \ + } while (0) + +/** + * \brief Macro to disable the debugger + * + */ + #define DISABLE_DEBUGGER \ + do { \ + REG_CLR_BIT(CRG_TOP, SYS_CTRL_REG, DEBUGGER_ENABLE); \ + } while (0) + +extern void pll_off(void); + +/** + * \brief Macro to cause a software reset + * + */ + #define SWRESET \ + do { \ + REG_SETF(CRG_TOP, PMU_CTRL_REG, PHY_SLEEP, 1); \ + REG_SETF(CRG_TOP, PMU_CTRL_REG, MAC_SLEEP, 1); \ + pll_off(); \ + REG_SET_BIT(CRG_TOP, SYS_CTRL_REG, SW_RESET); \ + } while (0) + +/** + * \brief Macro to cause a POR reset. it reset the DCORE + * + */ + #define PORRESET \ + do { \ + if (bsp_is_chip_revision_a()) \ + { \ + RTC->LDO_ENABLE_REG_b.LDO_EN_BOOST_PWR_OFF = 1; \ + } \ + RTC->DCDC_CNTL_OFF_REG = 0; \ + RTC->DCDC_CNTL_OFF_REG = 0x03; \ + } while (0) + + #define BIT0 0x00000001 + #define BIT1 0x00000002 + #define BIT2 0x00000004 + #define BIT3 0x00000008 + #define BIT4 0x00000010 + #define BIT5 0x00000020 + #define BIT6 0x00000040 + #define BIT7 0x00000080 + + #define BIT8 0x00000100 + #define BIT9 0x00000200 + #define BIT10 0x00000400 + #define BIT11 0x00000800 + #define BIT12 0x00001000 + #define BIT13 0x00002000 + #define BIT14 0x00004000 + #define BIT15 0x00008000 + + #define BIT16 0x00010000 + #define BIT17 0x00020000 + #define BIT18 0x00040000 + #define BIT19 0x00080000 + #define BIT20 0x00100000 + #define BIT21 0x00200000 + #define BIT22 0x00400000 + #define BIT23 0x00800000 + + #define BIT24 0x01000000 + #define BIT25 0x02000000 + #define BIT26 0x04000000 + #define BIT27 0x08000000 + #define BIT28 0x10000000 + #define BIT29 0x20000000 + #define BIT30 0x40000000 + #define BIT31 0x80000000 + +typedef unsigned char uint8; // 8 bits +typedef char int8; // 8 bits +typedef unsigned short uint16; // 16 bits +typedef short int16; // 16 bits +typedef unsigned long uint32; // 32 bits +typedef long int32; // 32 bits +typedef unsigned long long uint64; // 64 bits +typedef long long int64; // 64 bits + +/* See also "Data Types" on pag. 21 of the (Doulos) Cortex-M0 / SoC 1.0 training documentation. */ +typedef unsigned char BYTE; // 8 bits = Byte +typedef unsigned short HWORD; // 16 bits = Halfword +typedef unsigned long WORD; // 32 bits = Word +typedef long long DWORD; // 64 bits = Doubleword + +//////////////////////////////////////////////////////////////////// + +typedef signed char CHAR; +typedef unsigned char UCHAR; +typedef signed short SHORT; +typedef unsigned short USHORT; +typedef signed int INT; +typedef unsigned int UINT; +typedef signed long LONG; +typedef unsigned long ULONG; + +typedef void VOID; + +typedef char INT8; +typedef unsigned char UINT8; +typedef short INT16; +typedef unsigned short UINT16; +typedef int INT32; +typedef unsigned int UINT32; +typedef long long INT64; +typedef unsigned long long UINT64; + +typedef void * HANDLE; + +typedef unsigned int OPTION; +typedef unsigned long UNSIGNED; +typedef long SIGNED; + +typedef unsigned long long u64; +typedef unsigned int u32; +typedef unsigned short u16; +typedef unsigned char u8; + +typedef signed char s8; +typedef signed int s32; + +/****************************************************************************** + * + * Macro + * + ******************************************************************************/ + + #ifndef NX_PORT_H + #define TRUE (1) + #define FALSE (0) + #else + #define TRUE pdTRUE + #define FALSE pdFALSE + #endif + + #define MBYTE (1024UL * 1024UL) + #define KBYTE (1024UL) + + #define MHz (1000UL * 1000UL) + #define KHz (1000UL) + + #ifndef RA6W1_UNUSED_ARG + #define RA6W1_UNUSED_ARG(x) (void) x + #endif // RA6W1_UNUSED_ARG + +/****************************************************************************** + * + * Callback + * + ******************************************************************************/ + +typedef VOID (* USR_CALLBACK)(VOID *); + +//////////////////////////////////////////////////////////////////// + + #if dg_configAUTOTEST_ENABLE + #define autotest_printf(fmt, arg ...) printf(fmt, ## arg); + #endif + + #ifdef __cplusplus +} + #endif + +#endif /* __SDK_DEFS_H__ */ + +/** + * \} + * \} + */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/sys_feature.h b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/sys_feature.h new file mode 100644 index 000000000000..bae9a69b2458 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/bsp_w/mcu/ra6w1/sys_feature.h @@ -0,0 +1,178 @@ +/** + **************************************************************************************** + * + * @file sys_feature.h + * + * @brief Definition for System features + * + * Copyright (c) 2023 Renesas Electronics. All rights reserved. + * + * This software ("Software") is owned by Renesas Electronics. + * + * By using this Software you agree that Renesas Electronics retains all + * intellectual property and proprietary rights in and to this Software and any + * use, reproduction, disclosure or distribution of the Software without express + * written permission or a license agreement from Renesas Electronics is + * strictly prohibited. This Software is solely for use on or in conjunction + * with Renesas Electronics products. + * + * EXCEPT AS OTHERWISE PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, THE + * SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. EXCEPT AS OTHERWISE + * PROVIDED IN A LICENSE AGREEMENT BETWEEN THE PARTIES, IN NO EVENT SHALL + * RENESAS ELECTRONICS BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE SOFTWARE. + * + **************************************************************************************** + */ + +#ifndef __SYS_FEATURE_H__ +#define __SYS_FEATURE_H__ + +#define COUNTRY_CODE_DEFAULT "KR" +#define CHANNEL_AUTO 0 +#define CHANNEL_DEFAULT CHANNEL_AUTO +#define REPLY_FAIL "FAIL" + +/* WiFi Direct */ +#define WIFI_DIR_LISTEN_CH_DFLT CHANNEL_AUTO +#define WIFI_DIR_OPERATION_CH_DFLT CHANNEL_AUTO +#define WIFI_DIR_GO_INTENT_DFLT 3 + +enum E_AUTH_MODE +{ + E_AUTH_MODE_NONE = 1, + E_AUTH_MODE_WEP, + E_AUTH_MODE_WPA, + E_AUTH_MODE_RSN, + E_AUTH_MODE_WPA_RSN, +#ifdef __SUPPORT_WPA3_SAE__ + E_AUTH_MODE_SAE, + E_AUTH_MODE_RSN_SAE, +#endif /* __SUPPORT_WPA3_SAE__ */ +#ifdef __SUPPORT_WPA3_OWE__ + E_AUTH_MODE_OWE, +#endif /* __SUPPORT_WPA3_OWE__ */ +#ifdef __SUPPORT_WPA_ENTERPRISE__ + E_AUTH_MODE_ENT, + #ifdef __SUPPORT_WPA3_ENTERPRISE__ + E_AUTH_MODE_WPA2_WPA3_ENT, + E_AUTH_MODE_WPA3_ENT, + #ifdef __SUPPORT_WPA3_ENTERPRISE_192B__ + E_AUTH_MODE_WPA3_ENT_192B, + #endif // __SUPPORT_WPA3_ENTERPRISE_192B__ + #endif // __SUPPORT_WPA3_ENTERPRISE__ +#endif // __SUPPORT_WPA_ENTERPRISE__ + E_AUTH_MODE_MAX +}; + +#ifdef __SUPPORT_WPA_ENTERPRISE__ +enum E_EAP_AUTH_MODE +{ + E_EAP_AUTH_MODE_NONE = 0, + E_EAP_AUTH_MODE_PEAP_TTLS_FAST, + E_EAP_AUTH_MODE_PEAP, + E_EAP_AUTH_MODE_TTLS, + E_EAP_AUTH_MODE_FAST, + E_EAP_AUTH_MODE_TLS, + E_EAP_AUTH_MODE_MAX +}; + +enum E_EAP_PHASE2_MODE +{ + E_EAP_PHASE2_MODE_NONE, + E_EAP_PHASE2_MODE_MSCHAPV2_N_GTC, + E_EAP_PHASE2_MODE_MSCHAPV2, + E_EAP_PHASE2_MODE_GTC, + E_EAP_PHASE2_MODE_TLS, + E_EAP_PHASE2_MODE_MAX +}; + +#endif // __SUPPORT_WPA_ENTERPRISE__ + +enum E_ENCRYP_MODE +{ + E_ENCRYP_MODE_TKIP = 1, + E_ENCRYP_MODE_CCMP, + E_ENCRYP_MODE_TKIP_CCMP +#ifdef __SUPPORT_WPA3_ENTERPRISE_192B__ + , + E_ENCRYP_MODE_GCMP_256 +#endif // __SUPPORT_WPA3_ENTERPRISE_192B__ +}; + +enum E_WEP_KEY_TYPE +{ + WEP_KEY_TYPE_ASCII = 1, + WEP_KEY_TYPE_HEXA +}; + +enum E_WEP_KEY_IDX +{ + E_WEP_KEY_IDX_1 = 1, + E_WEP_KEY_IDX_2, + E_WEP_KEY_IDX_3, + E_WEP_KEY_IDX_4, +}; + +enum E_WEP_KEY_BIT +{ + WEP_KEY_64BIT = 1, + WEP_KEY_128BIT +}; + +/* NET MODE */ +enum E_NETMODE +{ + E_NETMODE_DYNAMIC_IP = 1, + E_NETMODE_STATIC_IP +}; + +/* PSK_KEY_TYPE */ +enum E_PSK_KEY_TYPE +{ + E_PSK_KEY_ASCII = 1, + E_PSK_KEY_HEXA +}; + +/* SNTP Client */ +enum E_SNTP_CLIENT +{ + E_SNTP_CLIENT_STOP = 1, + E_SNTP_CLIENT_START +}; + +enum E_CFG_ENABLE +{ + E_DISABLE, + E_ENABLE +}; + +/* For Console Password ************************************/ + +#define NVR_KEY_PASSWORD "PASSWORD" +#define NVR_KEY_PASSWORD_SVC "PASSWORD_SVC" + +/*** !!! Notice !!! ******/ +/* Customer can change default Password ... */ +#define DEFAULT_PASSWORD "rrq61000" +#define PW_TIMEOUT 12000 /* tick : 2 min */ +#define DFLT_PASSWORD_SVC 1 + +/***********************************************************/ + +/* External global functions */ +extern void reboot_func(unsigned int flag); + +#if CFG_PMGR +extern int RM_PMGR_W_dpm_is_wakeup(void); + +#endif /* CFG_PMGR */ + +#endif /* __SYS_FEATURE_H__ */ + +/* EOF */ diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/r_ext_irq_w/r_ext_irq_w.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/r_ext_irq_w/r_ext_irq_w.c new file mode 100644 index 000000000000..aea9de4a0541 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/r_ext_irq_w/r_ext_irq_w.c @@ -0,0 +1,430 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "r_ext_irq_w.h" +#include "r_ext_irq_w_cfg.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** "EXT_IRQ" in ASCII, used to determine if channel is open. */ +#define EXT_IRQ_W_OPEN (0x00494355U) + +#define EXT_IRQ_W_IRQMD_OFFSET (0) + +#define EXT_IRQ_W_PORT0_PINBIT_MASK (0x3FFF) +#define EXT_IRQ_W_PORT1_PINBIT_MASK (0xFFFF) + +#define EXT_IRQ_W_WKUP_PINBIT_MASK (0x7FF) + +#define EXT_IRQ_W_MAX_CHANNEL (30) +#define EXT_IRQ_W_MAX_IO_PORT (BSP_IO_PORT_MAX - 1) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * ext_irq_w_prv_ns_callback)(external_irq_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile ext_irq_w_prv_ns_callback)(external_irq_callback_args_t * p_args); +#endif + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ +void r_ext_irq_w_isr(void); + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ +static uint32_t gs_enabled_pin_bit[EXT_IRQ_W_MAX_IO_PORT] = {0, 0, }; + +static ext_irq_w_instance_ctrl_t * volatile gp_ext_irq_w_ctrls[EXT_IRQ_W_MAX_CHANNEL]; + +/*********************************************************************************************************************** + * Global Variables + **********************************************************************************************************************/ + +/* EXT_IRQ implementation of External IRQ API. */ +const external_irq_api_t g_external_irq_on_ext_irq_w = +{ + .open = R_EXT_IRQ_W_ExternalIrqOpen, + .enable = R_EXT_IRQ_W_ExternalIrqEnable, + .disable = R_EXT_IRQ_W_ExternalIrqDisable, + .callbackSet = R_EXT_IRQ_W_ExternalIrqCallbackSet, + .close = R_EXT_IRQ_W_ExternalIrqClose, +}; + +/*******************************************************************************************************************//** + * @addtogroup EXT_IRQ_W + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Configure an IRQ input pin for use with the external interrupt interface. Implements @ref external_irq_api_t::open. + * + * The Open function is responsible for preparing an external IRQ pin for operation. + * + * @retval FSP_SUCCESS Open successful. + * @retval FSP_ERR_ASSERTION One of the following is invalid: + * - p_ctrl or p_cfg is NULL + * @retval FSP_ERR_ALREADY_OPEN The channel specified has already been opened. No configurations were changed. + * Call the associated Close function to reconfigure the channel. + * @retval FSP_ERR_IP_CHANNEL_NOT_PRESENT The channel requested in p_cfg is not available on the device selected in + * r_bsp_cfg.h. + * @retval FSP_ERR_INVALID_ARGUMENT p_cfg->p_callback is not NULL, but ISR is not enabled. ISR must be enabled to + * use callback function. + * @retval FSP_ERR_UNSUPPORTED An input argument is not supported by selected mode. + * + * @note This function is reentrant for different channels. It is not reentrant for the same channel. + **********************************************************************************************************************/ +fsp_err_t R_EXT_IRQ_W_ExternalIrqOpen (external_irq_ctrl_t * const p_api_ctrl, external_irq_cfg_t const * const p_cfg) +{ + ext_irq_w_instance_ctrl_t * p_ctrl = (ext_irq_w_instance_ctrl_t *) p_api_ctrl; + +#if EXT_IRQ_W_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_ctrl); + FSP_ASSERT(NULL != p_cfg); +#endif + + FSP_ERROR_RETURN(EXT_IRQ_W_OPEN != p_ctrl->open, FSP_ERR_ALREADY_OPEN); + + /* Verify the configuration trigger source is correct */ + FSP_ERROR_RETURN((EXTERNAL_IRQ_TRIG_FALLING == p_cfg->trigger) || + (EXTERNAL_IRQ_TRIG_RISING == p_cfg->trigger) || + (EXTERNAL_IRQ_TRIG_LEVEL_LOW == p_cfg->trigger) || + (EXTERNAL_IRQ_TRIG_LEVEL_HIGH == p_cfg->trigger), + FSP_ERR_UNSUPPORTED); + + FSP_ERROR_RETURN(0 != ((1U << p_cfg->channel) & BSP_FEATURE_ICU_IRQ_CHANNELS_MASK), FSP_ERR_IP_CHANNEL_NOT_PRESENT); + + /* Callback must be used with a valid interrupt priority otherwise it will never be called. */ + if (p_cfg->p_callback) + { + FSP_ERROR_RETURN(BSP_IRQ_DISABLED != p_cfg->ipl, FSP_ERR_INVALID_ARGUMENT); + } + + /* Channel must be free */ + FSP_ERROR_RETURN(gp_ext_irq_w_ctrls[p_cfg->channel] == NULL, FSP_ERR_INVALID_CHANNEL); + + p_ctrl->irq_pin = ((ext_irq_w_extended_cfg_t *) p_cfg->p_extend)->irq_pin; + + uint8_t port = (uint8_t) ((p_ctrl->irq_pin & BSP_IO_PORT_BITS) >> BSP_IO_PORT_OFFSET); + uint8_t pin = (uint8_t) (p_ctrl->irq_pin & BSP_IO_PIN_BITS); + uint32_t pin_bit = 0; + + pin_bit = 1 << pin; + + if ((BSP_IO_PORT_00 == port) && (0 != (EXT_IRQ_W_PORT0_PINBIT_MASK & pin_bit))) + { + p_ctrl->irq = GPIO_P0_IRQn; + } + else if ((BSP_IO_PORT_01 == port) && (0 != (EXT_IRQ_W_PORT1_PINBIT_MASK & pin_bit))) + { + p_ctrl->irq = GPIO_P1_IRQn; + } + else + { + FSP_RETURN(FSP_ERR_UNSUPPORTED); + } + + /* Initialize control block. */ + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->channel = p_cfg->channel; + + switch (p_cfg->trigger) + { + case EXTERNAL_IRQ_TRIG_FALLING: + { + BSP_IO_PXX_POL_REG(port) = BSP_IO_PXX_POL_REG(port) | pin_bit; /* give an event if that input goes low */ + BSP_IO_PXX_SEL1_REG(port) = BSP_IO_PXX_SEL1_REG(port) | pin_bit; /* Edge sensitive */ + break; + } + + case EXTERNAL_IRQ_TRIG_RISING: + { + BSP_IO_PXX_POL_REG(port) = BSP_IO_PXX_POL_REG(port) & ~pin_bit; /* give an event if that input goes high */ + BSP_IO_PXX_SEL1_REG(port) = BSP_IO_PXX_SEL1_REG(port) | pin_bit; /* Edge sensitive */ + break; + } + + case EXTERNAL_IRQ_TRIG_LEVEL_LOW: + { + BSP_IO_PXX_POL_REG(port) = BSP_IO_PXX_POL_REG(port) | pin_bit; /* give an event if that input goes low */ + BSP_IO_PXX_SEL1_REG(port) = BSP_IO_PXX_SEL1_REG(port) & ~pin_bit; /* Level sensitive */ + break; + } + + case EXTERNAL_IRQ_TRIG_LEVEL_HIGH: + { + BSP_IO_PXX_POL_REG(port) = BSP_IO_PXX_POL_REG(port) & ~pin_bit; /* give an event if that input goes high */ + BSP_IO_PXX_SEL1_REG(port) = BSP_IO_PXX_SEL1_REG(port) & ~pin_bit; /* Level sensitive */ + break; + } + + default: + { + ; /* do nothing */ + } + } + + R_BSP_IrqCfg(p_ctrl->irq, p_cfg->ipl, p_ctrl); + + gp_ext_irq_w_ctrls[p_ctrl->channel] = p_ctrl; + + /* Mark the control block as open */ + p_ctrl->open = EXT_IRQ_W_OPEN; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Enable external interrupt for specified channel at NVIC. Implements @ref external_irq_api_t::enable. + * + * @retval FSP_SUCCESS Interrupt Enabled successfully. + * @retval FSP_ERR_ASSERTION The p_ctrl parameter was null. + * @retval FSP_ERR_NOT_OPEN The channel is not opened. + **********************************************************************************************************************/ +fsp_err_t R_EXT_IRQ_W_ExternalIrqEnable (external_irq_ctrl_t * const p_api_ctrl) +{ + ext_irq_w_instance_ctrl_t * p_ctrl = (ext_irq_w_instance_ctrl_t *) p_api_ctrl; + +#if EXT_IRQ_W_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_ctrl); +#endif + + FSP_ERROR_RETURN(EXT_IRQ_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + + uint8_t port = (uint8_t) ((p_ctrl->irq_pin & BSP_IO_PORT_BITS) >> BSP_IO_PORT_OFFSET); + uint8_t pin = (uint8_t) (p_ctrl->irq_pin & BSP_IO_PIN_BITS); + uint32_t pin_bit = 0; + + pin_bit = 1 << pin; + + if (pin_bit == (BSP_IO_PXX_INT_STS_REG(port) & pin_bit)) + { + BSP_IO_PXX_INT_CLR_REG(port) = pin_bit; + } + + BSP_IO_PXX_SEL_REG(port) = BSP_IO_PXX_SEL_REG(port) | pin_bit; + + /* Clear the interrupt status and Pending bits, before the interrupt is enabled. */ + if (0 == gs_enabled_pin_bit[port]) + { + R_BSP_IrqEnable(p_ctrl->irq); + } + + gs_enabled_pin_bit[port] = gs_enabled_pin_bit[port] | pin_bit; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Disable external interrupt for specified channel at NVIC. Implements @ref external_irq_api_t::disable. + * + * @retval FSP_SUCCESS Interrupt disabled successfully. + * @retval FSP_ERR_ASSERTION The p_ctrl parameter was null. + * @retval FSP_ERR_NOT_OPEN The channel is not opened. + **********************************************************************************************************************/ +fsp_err_t R_EXT_IRQ_W_ExternalIrqDisable (external_irq_ctrl_t * const p_api_ctrl) +{ + ext_irq_w_instance_ctrl_t * p_ctrl = (ext_irq_w_instance_ctrl_t *) p_api_ctrl; + +#if EXT_IRQ_W_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_ctrl); +#endif + + FSP_ERROR_RETURN(EXT_IRQ_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + + uint8_t port = (uint8_t) ((p_ctrl->irq_pin & BSP_IO_PORT_BITS) >> BSP_IO_PORT_OFFSET); + uint8_t pin = (uint8_t) (p_ctrl->irq_pin & BSP_IO_PIN_BITS); + uint32_t pin_bit = 0; + + pin_bit = 1 << pin; + + BSP_IO_PXX_SEL_REG(port) = BSP_IO_PXX_SEL_REG(port) & ~pin_bit; + + if (pin_bit == (BSP_IO_PXX_INT_STS_REG(port) & pin_bit)) + { + BSP_IO_PXX_INT_CLR_REG(port) = pin_bit; + } + + gs_enabled_pin_bit[port] = gs_enabled_pin_bit[port] & ~pin_bit; + + /* Disable the interrupt, and then clear the interrupt pending bits and interrupt status. */ + if (0 == gs_enabled_pin_bit[port]) + { + R_BSP_IrqDisable(p_ctrl->irq); + } + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements external_irq_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_EXT_IRQ_W_ExternalIrqCallbackSet (external_irq_ctrl_t * const p_api_ctrl, + void ( * p_callback)( + external_irq_callback_args_t *), + void * const p_context, + external_irq_callback_args_t * const p_callback_memory) +{ + ext_irq_w_instance_ctrl_t * p_ctrl = p_api_ctrl; + + FSP_PARAMETER_NOT_USED(p_callback_memory); + +#if EXT_IRQ_W_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_ctrl); + FSP_ASSERT(NULL != p_callback); +#endif + + FSP_ERROR_RETURN(EXT_IRQ_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Close the external interrupt channel. Implements @ref external_irq_api_t::close. + * + * @retval FSP_SUCCESS Successfully closed. + * @retval FSP_ERR_ASSERTION The parameter p_ctrl is NULL. + * @retval FSP_ERR_NOT_OPEN The channel is not opened. + **********************************************************************************************************************/ +fsp_err_t R_EXT_IRQ_W_ExternalIrqClose (external_irq_ctrl_t * const p_api_ctrl) +{ + ext_irq_w_instance_ctrl_t * p_ctrl = (ext_irq_w_instance_ctrl_t *) p_api_ctrl; + +#if EXT_IRQ_W_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_ctrl); +#endif + + FSP_ERROR_RETURN(EXT_IRQ_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + + uint8_t port = (uint8_t) ((p_ctrl->irq_pin & BSP_IO_PORT_BITS) >> BSP_IO_PORT_OFFSET); + uint8_t pin = (uint8_t) (p_ctrl->irq_pin & BSP_IO_PIN_BITS); + uint32_t pin_bit = 0; + + pin_bit = 1 << pin; + + gs_enabled_pin_bit[port] = gs_enabled_pin_bit[port] & ~pin_bit; + BSP_IO_PXX_SEL_REG(port) = BSP_IO_PXX_SEL_REG(port) & ~pin_bit; + + /* Cleanup. Disable interrupt */ + if (0 == gs_enabled_pin_bit[port]) + { + /* Disable the interrupt, and then clear the interrupt pending bits and interrupt status. */ + R_BSP_IrqDisable(p_ctrl->irq); + R_FSP_IsrContextSet(p_ctrl->irq, NULL); + } + + p_ctrl->open = 0U; + + gp_ext_irq_w_ctrls[p_ctrl->channel] = NULL; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @} (end addtogroup EXT_IRQ_W) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * EXT_IRQ External Interrupt ISR. + **********************************************************************************************************************/ +void r_ext_irq_w_isr (void) +{ + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE; + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + uint8_t port = 0; + uint32_t status_reg = 0; + uint8_t pin = 0; + uint32_t pin_bit = 0; + + if (GPIO_P0_IRQn == irq) + { + port = BSP_IO_PORT_00; + } + else if (GPIO_P1_IRQn == irq) + { + port = BSP_IO_PORT_01; + } + else + { + return; + } + + status_reg = BSP_IO_PXX_INT_STS_REG(port); + + if (0 == status_reg) + { + /* Status is empty, but maybe this is wakeup from GPIO context */ + bsp_io_wakeup_pin_t wakeup_pin = R_BSP_WakeupSourcePinGet(); + + if (wakeup_pin != 0) + { + /* Fake status based on the wakeup GPIO */ + status_reg = (1 << (bsp_prv_wakeup_pin_to_port_pin(wakeup_pin) & BSP_IO_PIN_BITS)); + } + else + { + return; + } + } + + for (pin = 0; 0 != status_reg; pin++) + { + status_reg >>= 1; + } + + pin_bit = (uint32_t) (1 << (pin - 1)); + + BSP_IO_PXX_INT_CLR_REG(port) = pin_bit; + + uint32_t irq_pin = (uint32_t) (port << BSP_IO_PORT_OFFSET) | (uint32_t) (pin - 1); + + if (pin_bit == (gs_enabled_pin_bit[port] & pin_bit)) + { + for (uint8_t channel = 0; channel < EXT_IRQ_W_MAX_CHANNEL; channel++) + { + if ((NULL != gp_ext_irq_w_ctrls[channel]) && (irq_pin == gp_ext_irq_w_ctrls[channel]->irq_pin) && + (NULL != gp_ext_irq_w_ctrls[channel]->p_callback)) + { + /* Set data to identify callback to user, then call user callback. */ + external_irq_callback_args_t args; + + args.channel = gp_ext_irq_w_ctrls[channel]->channel; + args.p_context = gp_ext_irq_w_ctrls[channel]->p_context; + gp_ext_irq_w_ctrls[channel]->p_callback(&args); + + break; + } + } + } + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE; +} diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/r_gpio_w/r_gpio_w.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/r_gpio_w/r_gpio_w.c new file mode 100644 index 000000000000..47bb0e538a53 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/r_gpio_w/r_gpio_w.c @@ -0,0 +1,812 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +#include "r_gpio_w.h" +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR + #include "rm_pmgr_w_instance.h" + #endif +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + #define GPIO_PD BSP_PD_COM +#elif BSP_MCU_GROUP_RA6W3 + #define GPIO_PD BSP_PD_SYS +#endif + +/* "PORT" in ASCII, used to determine if the module is open */ +#define GPIO_W_OPEN (0x504F5254U) +#define GPIO_W_CLOSED (0x00000000U) +#if !defined(BSP_MCU_GROUP_RA6W1) + #define GPIO_W_CLK_SEL_REG_FUNC_MASK (0xF) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ +static void r_gpio_w_pins_config(gpio_w_instance_ctrl_t * p_ctrl, const ioport_cfg_t * p_cfg); +static void r_gpio_w_pin_config(gpio_w_instance_ctrl_t * p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg); + +#if defined(BSP_MCU_GROUP_RA6W1) +bool r_gpio_w_retained_io_set(bsp_io_port_pin_t pin); + + #if CFG_PMGR +static fsp_err_t r_gpio_w_enter_sleep(ioport_ctrl_t * p_ctrl); +static fsp_err_t r_gpio_w_wakeup(ioport_ctrl_t * p_ctrl); +static void r_gpio_w_pmgr_callback(pmgr_callback_args_t * p_args); +static fsp_err_t r_gpio_w_subscribe_for_pmgr_notifications(ioport_ctrl_t * const p_ctrl); +static fsp_err_t r_gpio_w_unsubscribe_from_pmgr_notifications(void); + + #endif +#endif + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Global Variables + **********************************************************************************************************************/ + +/* GPIO_W Implementation of IOPort Driver */ +const ioport_api_t g_ioport_on_gpio_w = +{ + .open = R_GPIO_W_Open, + .close = R_GPIO_W_Close, + .pinsCfg = R_GPIO_W_PinsCfg, + .pinCfg = R_GPIO_W_PinCfg, + .pinEventInputRead = R_GPIO_W_PinEventInputRead, + .pinEventOutputWrite = R_GPIO_W_PinEventOutputWrite, + .pinRead = R_GPIO_W_PinRead, + .pinWrite = R_GPIO_W_PinWrite, + .portDirectionSet = R_GPIO_W_PortDirectionSet, + .portEventInputRead = R_GPIO_W_PortEventInputRead, + .portEventOutputWrite = R_GPIO_W_PortEventOutputWrite, + .portRead = R_GPIO_W_PortRead, + .portWrite = R_GPIO_W_PortWrite, +}; + +#if CFG_PMGR +static pmgr_instance_info_t g_r_gpio_w_pmgr_info = +{ + .power_mode = PMGR_LLD_POWER_MODE_SLEEP4, + .wake_source = PMGR_WAKE_SOURCE_NONE, +}; + +static pmgr_callback_args_t g_r_gpio_w_pmgr_args = +{ + .constraints = PMGR_CONSTRAINT_NONE, + .event = PMGR_EVENT_NOT_SET, + .p_context = NULL, + .p_instance_info = &g_r_gpio_w_pmgr_info, +}; + +static pmgr_w_notifier_extend_t g_r_gpio_w_pmgr_notifier_extend = +{ + .order = PMGR_W_NOTIFIER_ORDER_HIGHEST, +}; + +static uint32_t gpio_w_sel[BSP_FEATURE_IO_PORT_COUNT]; +static uint32_t gpio_w_sel1[BSP_FEATURE_IO_PORT_COUNT]; +static uint32_t gpio_w_pol[BSP_FEATURE_IO_PORT_COUNT]; +#endif // #if CFG_PMGR + +/*******************************************************************************************************************//** + * @addtogroup GPIO_W + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Initializes internal driver data, then calls pin configuration function to configure pins. + * + * @retval FSP_SUCCESS Pin configuration data written to MODE, Set port pins and Reset port pins register(s) + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_ALREADY_OPEN Module is already open. + **********************************************************************************************************************/ +fsp_err_t R_GPIO_W_Open (ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg) +{ + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; +#if defined(BSP_MCU_GROUP_RA6W1) + #if CFG_PMGR + bool is_sleep3_wakeup; + #endif +#endif + +#if (1 == GPIO_W_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(GPIO_W_OPEN != p_instance_ctrl->open, FSP_ERR_ALREADY_OPEN); + #if !BSP_MCU_GROUP_RA6W1 && !BSP_MCU_GROUP_RA6B2 // TIN-TODO + FSP_ERROR_RETURN(bsp_pd_is_up_check(GPIO_PD), FSP_ERR_INVALID_HW_CONDITION); + #endif +#endif + + /* Set driver status to open */ + p_instance_ctrl->open = GPIO_W_OPEN; + + /* Init P0 reg addresses. The regs for other ports are right after P0's regs. */ + p_instance_ctrl->p_reg_p0_data = &GPIO->P0_DATA_REG; + p_instance_ctrl->p_reg_p0_set_data = &GPIO->P0_SET_DATA_REG; + p_instance_ctrl->p_reg_p0_reset_data = &GPIO->P0_RESET_DATA_REG; + p_instance_ctrl->p_reg_p0_00_mode = &GPIO->P0_00_MODE_REG; + +#if defined(BSP_MCU_GROUP_RA6W1) + #if CFG_PMGR + r_gpio_w_subscribe_for_pmgr_notifications(p_ctrl); + is_sleep3_wakeup = RM_PMGR_W_IsSleep3Wakeup(); + + if (is_sleep3_wakeup) + { + R_BSP_RetainedIoRecovery(false); + } + else + #endif + + { + R_BSP_RetainedIoClear(); + r_gpio_w_pins_config(p_instance_ctrl, p_cfg); + } + +#else + r_gpio_w_pins_config(p_instance_ctrl, p_cfg); +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Resets GPIO_W registers. Implements @ref ioport_api_t::close + * + * @retval FSP_SUCCESS The GPIO_W 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_GPIO_W_Close (ioport_ctrl_t * const p_ctrl) +{ + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; +#if defined(BSP_MCU_GROUP_RA6W1) + #if CFG_PMGR + r_gpio_w_unsubscribe_from_pmgr_notifications(); + #endif +#endif +#if (1 == GPIO_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(GPIO_W_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Set state to closed */ + p_instance_ctrl->open = GPIO_W_CLOSED; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Configures the functions of multiple pins by loading configuration data into pin MODE,Set port pins and Reset port pins registers. + * Implements @ref ioport_api_t::pinsCfg. + * + * This function initializes the supplied list of MODE, Set port pins and Reset port pins registers with the supplied values. This data can be generated + * by the Pins tab of the RAFW 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 MODE,Set port pins and Reset port pins register(s) + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + **********************************************************************************************************************/ +fsp_err_t R_GPIO_W_PinsCfg (ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg) +{ + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; + +#if (1 == GPIO_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(GPIO_W_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_cfg); + FSP_ASSERT(NULL != p_cfg->p_pin_cfg_data); +#endif + + r_gpio_w_pins_config(p_instance_ctrl, 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_GPIO_W_PinCfg (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg) +{ + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; + +#if (1 == GPIO_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(GPIO_W_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + R_BSP_PinAccessEnable(); + + r_gpio_w_pin_config(p_instance_ctrl, 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_GPIO_W_PinRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value) +{ +#if (1 == GPIO_W_CFG_PARAM_CHECKING_ENABLE) + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(GPIO_W_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_GPIO_W_PortRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value) +{ + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; + +#if (1 == GPIO_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(GPIO_W_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_port_value); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + *p_port_value = (ioport_size_t) *(p_instance_ctrl->p_reg_p0_data + port); + + 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 pointerd + * + * @note This function is re-entrant for different ports. This function makes use of the Set port pins and Reset port pins registers to atomically + * modify the levels on the specified pins on a port. + **********************************************************************************************************************/ +fsp_err_t R_GPIO_W_PortWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask) +{ + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; + +#if (1 == GPIO_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(GPIO_W_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(mask > (ioport_size_t) 0, FSP_ERR_INVALID_ARGUMENT); +#endif + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + *(p_instance_ctrl->p_reg_p0_set_data + port) = value & mask; + *(p_instance_ctrl->p_reg_p0_reset_data + port) = (ioport_size_t) (~value) & mask; + + FSP_CRITICAL_SECTION_EXIT; + + 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 opene + * @retval FSP_ERR_ASSERTION NULL pointerd + * + * @note This function is re-entrant for different pins. This function makes use of the Set port pins and Reset port pins registers to atomically + * modify the level on the specified pin on a port. + **********************************************************************************************************************/ +fsp_err_t R_GPIO_W_PinWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level) +{ + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; + +#if (1 == GPIO_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(GPIO_W_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(level <= BSP_IO_LEVEL_HIGH, FSP_ERR_INVALID_ARGUMENT); +#elif defined(BSP_MCU_GROUP_RA6W1) + FSP_PARAMETER_NOT_USED(p_instance_ctrl); +#endif + +#if !defined(BSP_MCU_GROUP_RA6W1) + bsp_io_port_t port = (bsp_io_port_t) ((BSP_IO_PORT_BITS & (uint16_t) pin) >> BSP_IO_PORT_OFFSET); + + uint32_t gpio_id = BSP_IO_PIN_BITS & (uint16_t) pin; + + if (BSP_IO_LEVEL_HIGH == level) + { + *(p_instance_ctrl->p_reg_p0_set_data + port) = 1 << gpio_id; + } + else + { + *(p_instance_ctrl->p_reg_p0_reset_data + port) = 1 << gpio_id; + } + +#else + R_BSP_PinWrite(pin, level); +#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_GPIO_W_PortDirectionSet (ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t direction_values, + ioport_size_t mask) +{ + gpio_w_instance_ctrl_t * p_instance_ctrl = (gpio_w_instance_ctrl_t *) p_ctrl; + +#if (1 == GPIO_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(GPIO_W_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(mask > (ioport_size_t) 0, FSP_ERR_INVALID_ARGUMENT); +#endif + + volatile uint32_t * mode_reg; + uint16_t port_gpio_count; + + if (BSP_IO_PORT_00 == port) + { + port_gpio_count = BSP_FEATURE_IO_PORT0_GPIO_COUNT; + mode_reg = p_instance_ctrl->p_reg_p0_00_mode; + } + else if (BSP_IO_PORT_01 == port) + { + port_gpio_count = BSP_FEATURE_IO_PORT1_GPIO_COUNT; + mode_reg = p_instance_ctrl->p_reg_p0_00_mode + BSP_FEATURE_IO_PORT0_GPIO_COUNT; + } + else /* Port 2 */ + { + port_gpio_count = BSP_FEATURE_IO_PORT2_GPIO_COUNT; + mode_reg = p_instance_ctrl->p_reg_p0_00_mode + BSP_FEATURE_IO_PORT0_GPIO_COUNT + + BSP_FEATURE_IO_PORT1_GPIO_COUNT; + } + + for (uint16_t gpio = 0U; gpio < port_gpio_count; gpio++, mode_reg++) + { + if (mask & (1U << gpio)) + { + if (0 != ((direction_values >> gpio) & 1)) + { + *mode_reg = ((*mode_reg) & ~GPIO_P0_00_MODE_REG_PUPD_Msk) | GPIO_W_CFG_PORT_DIRECTION_OUTPUT; + } + else + { + *mode_reg = ((*mode_reg) & ~GPIO_P0_00_MODE_REG_PUPD_Msk) | GPIO_W_CFG_PORT_DIRECTION_INPUT; + } + } + } + + 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_GPIO_W_PortEventInputRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(port); + FSP_PARAMETER_NOT_USED(p_event_data); + + return FSP_ERR_UNSUPPORTED; +} + +/*******************************************************************************************************************//** + * 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_GPIO_W_PinEventInputRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(pin); + FSP_PARAMETER_NOT_USED(p_pin_event); + + return FSP_ERR_UNSUPPORTED; +} + +/*******************************************************************************************************************//** + * 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_GPIO_W_PortEventOutputWrite (ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t event_data, + ioport_size_t mask_value) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(port); + FSP_PARAMETER_NOT_USED(event_data); + FSP_PARAMETER_NOT_USED(mask_value); + + return FSP_ERR_UNSUPPORTED; +} + +/**********************************************************************************************************************//** + * 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_GPIO_W_PinEventOutputWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(pin); + FSP_PARAMETER_NOT_USED(pin_value); + + return FSP_ERR_UNSUPPORTED; +} + +/*******************************************************************************************************************//** + * @} (end addtogroup GPIO_W) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Configures gpios with cfg setting. It calls r_gpio_w_pin_config internally repeatedly + * to have required gpios configured one by one + * + * @param[in] p_ctrl Instance ctrl + * @param[in] p_cfg Pin configuration data + **********************************************************************************************************************/ +static void r_gpio_w_pins_config (gpio_w_instance_ctrl_t * p_ctrl, const ioport_cfg_t * p_cfg) +{ + uint16_t pin_count; +#if !defined(BSP_MCU_GROUP_RA6W1) + const gpio_w_extended_cfg_t * gpio_w_extend_struct = p_cfg->p_extend; + + if (NULL != gpio_w_extend_struct) + { + #if defined GPIO_P2_1P8_MODE_REG_P2_00_1P8_MODE_Msk + GPIO->P2_1P8_MODE_REG = gpio_w_extend_struct->power.p2_pwr; + #elif !BSP_MCU_GROUP_RA6W1 // TIN-TODO + GPIO->P1_PADPWR_CTRL_REG = gpio_w_extend_struct->power.p1_pwr; + #endif + + #if BSP_FEATURE_IO_HAS_WEAK_CONFIG_PER_PORT + GPIO->P0_WEAK_CTRL_REG = gpio_w_extend_struct->weak_pad_power.p0_pwr; + GPIO->P1_WEAK_CTRL_REG = gpio_w_extend_struct->weak_pad_power.p1_pwr; + #if (0 != BSP_FEATURE_IO_PORT2_GPIO_COUNT) + GPIO->P2_WEAK_CTRL_REG = gpio_w_extend_struct->weak_pad_power.p2_pwr; + #endif + #elif !BSP_MCU_GROUP_RA6W1 // TIN-TODO + GPIO->PAD_WEAK_CTRL_REG = gpio_w_extend_struct->weak_pad_power.aggregate; + #endif + + uint32_t temp = GPIO->GPIO_CLK_SEL_REG & GPIO_W_CLK_SEL_REG_FUNC_MASK; + GPIO->GPIO_CLK_SEL_REG = gpio_w_extend_struct->fixed_pin_clk_out | temp; + + GPIO->GPIO_CLK_SEL_REG_b.FUNC_CLOCK_SEL = gpio_w_extend_struct->sel_pin_clk_out.clk_sel; + GPIO->GPIO_CLK_SEL_REG_b.FUNC_CLOCK_EN = gpio_w_extend_struct->sel_pin_clk_out.clk_en; + } +#endif + + for (pin_count = 0U; pin_count < p_cfg->number_of_pins; pin_count++) + { + r_gpio_w_pin_config(p_ctrl, p_cfg->p_pin_cfg_data[pin_count].pin, p_cfg->p_pin_cfg_data[pin_count].pin_cfg); + } +} + +/*******************************************************************************************************************//** + * Writes to the specified pin's register + * + * @param[in] p_ctrl Instance ctrl + * @param[in] pin Pin to write Mux data for + * @param[in] cfg Value to be written + * + **********************************************************************************************************************/ +static void r_gpio_w_pin_config (gpio_w_instance_ctrl_t * p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg) +{ +#if BSP_MCU_GROUP_RA6W1 + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + bsp_io_port_pin_t pin_id = (bsp_io_port_pin_t) (BSP_IO_PIN_BITS & (uint16_t) pin); + bsp_io_port_t port_id = + (bsp_io_port_t) ((BSP_IO_PORT_BITS & (uint16_t) pin) >> BSP_IO_PORT_OFFSET); + bsp_io_level_t level = (bsp_io_level_t) ((cfg & GPIO_W_PRV_LEVEL_BITS) >> GPIO_W_PRV_LEVEL_OFFSET); +#if !defined(BSP_MCU_GROUP_RA6W1) + uint32_t mode = cfg & GPIO_W_MODE_REG_VALID_BITS_MSK; +#else + uint16_t mode = cfg & GPIO_W_PRV_MODE_BITS; +#endif +#if BSP_MCU_GROUP_RA6B1 || BSP_MCU_GROUP_RA6U1 + if (BSP_IO_PORT_01 == port_id) + { + PMU_ANA->POWER_CTRL_REG_b.EN_HSGND = 1; + FSP_HARDWARE_REGISTER_WAIT(PMU_ANA->ANA_STATUS_REG_b.HSGND_OK, 1U); + } +#endif +#if !defined(BSP_MCU_GROUP_RA6W1) + if (GPIO_W_PERIPHERAL_GPIO == (mode & GPIO_W_PRV_FUNC_BITS)) + { + if (BSP_IO_LEVEL_HIGH == level) + { + *(p_ctrl->p_reg_p0_set_data + port_id) = 1 << pin_id; + } + else + { + *(p_ctrl->p_reg_p0_reset_data + port_id) = 1 << pin_id; + } + } + + GPIO_W_PXX_MODE_REG(port_id, pin_id) = mode; +#else + if (GPIO_W_PERIPHERAL_GPIO == (mode & GPIO_W_PRV_FUNC_BITS)) + { + R_BSP_PinWrite(pin, level); + } + + if (GPIO_W_CFG_RETENTION == (cfg & GPIO_W_CFG_RETENTION)) + { + R_BSP_PinCfg(pin, mode); + R_BSP_RetainedIoSet(pin); + } + else + { + R_BSP_PinCfg(pin, mode); + } + + if (GPIO_W_CFG_IRQ_ENABLE == (cfg & GPIO_W_CFG_IRQ_ENABLE)) + { + BSP_IO_PXX_SEL_REG(port_id) |= (uint32_t) (0x01 << pin_id); + } + else + { + BSP_IO_PXX_SEL_REG(port_id) &= ~((uint32_t) (0x01 << pin_id)); + } +#endif +} + +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR +static fsp_err_t r_gpio_w_enter_sleep (ioport_ctrl_t * p_ctrl) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + fsp_err_t err = FSP_SUCCESS; + + for (uint8_t port = 0; port < BSP_FEATURE_IO_PORT_COUNT; port++) + { + /* Store GPIO IRQ settings */ + gpio_w_pol[port] = BSP_IO_PXX_POL_REG(port); + gpio_w_sel1[port] = BSP_IO_PXX_SEL1_REG(port); + gpio_w_sel[port] = BSP_IO_PXX_SEL_REG(port); + } + + R_BSP_RetainedIoExecute(); + + return err; +} + +static fsp_err_t r_gpio_w_wakeup (ioport_ctrl_t * p_ctrl) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + fsp_err_t err = FSP_SUCCESS; + bsp_io_wakeup_pin_t wakeup_pin; + + wakeup_pin = R_BSP_WakeupSourcePinGet(); + R_BSP_RetainedIoRecovery(false); + + for (uint8_t port = 0; port < BSP_FEATURE_IO_PORT_COUNT; port++) + { + /* Restore GPIO IRQ settings */ + BSP_IO_PXX_POL_REG(port) = gpio_w_pol[port]; // Restore polarity (High/Low) + BSP_IO_PXX_SEL1_REG(port) = gpio_w_sel1[port]; // Restore sensitivity (Level/Edge) + BSP_IO_PXX_SEL_REG(port) = gpio_w_sel[port]; // Restore mode (Enable/Disable) + } + + if (wakeup_pin != 0) + { + bsp_io_port_pin_t port_pin = bsp_prv_wakeup_pin_to_port_pin(wakeup_pin); + + if (port_pin != BSP_IO_PORT_FF_PIN_FF) + { + uint8_t port = (uint8_t) ((port_pin >> BSP_IO_PORT_OFFSET) & BSP_IO_PORT_BITS); + uint8_t pin = (uint8_t) (port_pin & BSP_IO_PIN_BITS); + + bool irq_enabled = !!(gpio_w_sel[port] & (1 << pin)); + bool edge_sensitive = !!(gpio_w_sel1[port] & (1 << pin)); + + if (irq_enabled && edge_sensitive) + { + bool irq_edge = !!(gpio_w_pol[port] & (1 << pin)); + bool wakeup_edge = !!(RTC->GPIO_WAKEUP0_REG_b.GPIO_WAKEUP_EDGE_INVERSION_SEL & wakeup_pin); + + if (irq_edge == wakeup_edge) + { + R_BSP_IrqSetPending(GPIO_P0_IRQn + port); + } + } + } + } + + return err; +} + +static void r_gpio_w_pmgr_callback (pmgr_callback_args_t * p_args) +{ + pmgr_instance_info_t * p_pmgr_info = (pmgr_instance_info_t *) p_args->p_instance_info; + + if (p_pmgr_info->power_mode == PMGR_LLD_POWER_MODE_SLEEP4) + { + if (p_args->event == PMGR_EVENT_ENTERING_SLEEP) + { + r_gpio_w_enter_sleep((ioport_ctrl_t *) p_args->p_context); + } + else if (p_args->event == PMGR_EVENT_EXITING_SLEEP) + { + r_gpio_w_wakeup((ioport_ctrl_t *) p_args->p_context); + } + } +} + +static fsp_err_t r_gpio_w_subscribe_for_pmgr_notifications (ioport_ctrl_t * const p_ctrl) +{ + fsp_err_t err = FSP_SUCCESS; + pmgr_ctrl_t * pmgr_ctrl = NULL; + + g_r_gpio_w_pmgr_args.p_context = (void *) p_ctrl; + + pmgr_ctrl = RM_PMGR_W_get_ctrl(); + FSP_ASSERT(pmgr_ctrl != NULL); + + err = RM_PMGR_W_notifier_register(pmgr_ctrl, + r_gpio_w_pmgr_callback, + &g_r_gpio_w_pmgr_args, + &g_r_gpio_w_pmgr_notifier_extend); + FSP_ASSERT(FSP_SUCCESS == err); + + return FSP_SUCCESS; +} + +static fsp_err_t r_gpio_w_unsubscribe_from_pmgr_notifications (void) +{ + fsp_err_t err = FSP_SUCCESS; + pmgr_ctrl_t * pmgr_ctrl = NULL; + FSP_ASSERT(pmgr_ctrl != NULL); + + pmgr_ctrl = RM_PMGR_W_get_ctrl(); + FSP_ASSERT(pmgr_ctrl != NULL); + + err = RM_PMGR_W_notifier_unregister(pmgr_ctrl, g_r_gpio_w_pmgr_notifier_extend.notifier_id); + FSP_ASSERT(FSP_SUCCESS == err); + + return FSP_SUCCESS; +} + + #endif // #if CFG_PMGR +#endif diff --git a/bsp/renesas/ra6w1-ek/ra/fsp/src/r_uart_w/r_uart_w.c b/bsp/renesas/ra6w1-ek/ra/fsp/src/r_uart_w/r_uart_w.c new file mode 100644 index 000000000000..2004d3a93a9d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/ra/fsp/src/r_uart_w/r_uart_w.c @@ -0,0 +1,2065 @@ +/* +* Copyright (c) 2020 - 2026 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "r_uart_w.h" +#if UART_W_DMA_SUPPORT_ENABLE == 1 + #include "r_dmac_w.h" +#endif +#if BSP_MCU_GROUP_RA6W1 + #if (CFG_PMGR == 1) + #include "rm_pmgr_w_instance.h" + #endif +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* UART number */ +#define UART_W_INDEX_MAX (2U) +#define UART_W_MASK_9BITS (0x01FFU) +#define COEFFICIENT_10 (10U) +#define COEFFICIENT_1000 (1000U) +#if !BSP_MCU_GROUP_RA6W1 + #define UART_W_DATA_BITS_9 0 +#endif + +/* UART interrupt ID */ +#define UART_W_INTR_ID_NO_PEND (0x00) +#define UART_W_INTR_MDM_STATUS (UART_UART_MIS_REG_RIMMIS_Msk | UART_UART_MIS_REG_CTSMMIS_Msk | \ + UART_UART_MIS_REG_DCDMMIS_Msk | UART_UART_MIS_REG_DSRMMIS_Msk) +#define UART_W_INTR_ID_TI (UART_UART_MIS_REG_TXMIS_Msk) +#define UART_W_INTR_ID_RDI (UART_UART_MIS_REG_RXMIS_Msk) +#define UART_W_INTR_ID_RLSI (UART_UART_MIS_REG_FEMIS_Msk | UART_UART_MIS_REG_PEMIS_Msk | \ + UART_UART_MIS_REG_BEMIS_Msk | UART_UART_MIS_REG_OEMIS_Msk) +#define UART_W_INTR_ID_TIMEOUT (UART_UART_MIS_REG_RTMIS_Msk) + +#define UART_W_INTR_MASK (UART_UART_MIS_REG_RIMMIS_Msk | UART_UART_MIS_REG_CTSMMIS_Msk | \ + UART_UART_MIS_REG_DCDMMIS_Msk | UART_UART_MIS_REG_DSRMMIS_Msk | \ + UART_UART_MIS_REG_RXMIS_Msk | UART_UART_MIS_REG_TXMIS_Msk | \ + UART_UART_MIS_REG_RTMIS_Msk | UART_UART_MIS_REG_FEMIS_Msk | \ + UART_UART_MIS_REG_PEMIS_Msk | UART_UART_MIS_REG_BEMIS_Msk | \ + UART_UART_MIS_REG_OEMIS_Msk) + +#define UART_W_INTR_CLEAR_MASK (UART_UART_ICR_REG_RIMIC_Msk | UART_UART_ICR_REG_CTSMIC_Msk | \ + UART_UART_ICR_REG_DCDMIC_Msk | UART_UART_ICR_REG_DSRMIC_Msk | \ + UART_UART_ICR_REG_RXIC_Msk | UART_UART_ICR_REG_TXIC_Msk | \ + UART_UART_ICR_REG_RTIC_Msk | UART_UART_ICR_REG_FEIC_Msk | \ + UART_UART_ICR_REG_PEIC_Msk | UART_UART_ICR_REG_BEIC_Msk | \ + UART_UART_ICR_REG_OEIC_Msk) + +#define UART_W_EVENT_NO_EVENT (0) + +/* No limit to the number of bytes to read or write if DMA is not used. */ +#define UART_W_MAX_READ_WRITE_NO_DMA (0xFFFFFFFFU) + +/* "UART" in ASCII. Used to determine if the control block is open. */ +#define UART_W_OPEN (0x55655A5AU) +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR == 1 + #define UART_W_SLEEP (0xAAAAAAAAU) + #endif +#endif + +#define UART_W_INT_MASK (0xFFFU) +#define UART_W_FRA_MASK (0x3FU) + +#define UART_W_REG_SIZE (UART2_BASE - UART_BASE) + +#define UART_W_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 UART_W_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)) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * uart_prv_ns_callback)(uart_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile uart_prv_ns_callback)(uart_callback_args_t * p_args); +#endif +#if BSP_MCU_GROUP_RA6W1 + #if (CFG_PMGR == 1) + +/** UART sleep context required by PMGR */ + +typedef struct st_uart_w_pre_sleep_state +{ + uint32_t UART_IBRD_REG; + uint32_t UART_FBRD_REG; +} uart_w_pre_sleep_state_t; + +typedef struct st_r_uart_w_pmgr_context +{ + pmgr_instance_info_t pmgr_info; + pmgr_callback_args_t clbk_args; + uart_w_pre_sleep_state_t state; + pmgr_w_notifier_extend_t pmgr_notifier_ext; + uart_w_instance_ctrl_t * p_ctrl; +} r_uart_w_pmgr_context_t; + #endif +#endif + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) +static fsp_err_t r_uart_w_read_write_param_check(uart_w_instance_ctrl_t const * const p_ctrl, + uint8_t const * const addr, + uint32_t const bytes); + +#endif + +#if UART_W_DMA_SUPPORT_ENABLE == 1 +static fsp_err_t r_uart_w_dma_config(uart_w_instance_ctrl_t * p_ctrl); +static fsp_err_t r_uart_w_dma_rx_config(uart_w_instance_ctrl_t * p_ctrl); +static fsp_err_t r_uart_w_dma_tx_config(uart_w_instance_ctrl_t * p_ctrl); + +/* ISR call when interrupt is generated */ +void uart_w_dma_handler(dmac_callback_args_t * p_args); + +#endif + +static void r_uart_w_config_set(uart_w_instance_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); +static void r_uart_w_irq_cfg(uart_w_instance_ctrl_t * const p_ctrl, uint8_t const ipl, IRQn_Type const irq); +static void r_uart_w_clear_tx_fifo_intr(uart_w_instance_ctrl_t * const p_ctrl); +static void r_uart_w_baud_set(UART_Type * p_uart_reg, uart_w_baud_setting_t const * const p_baud_setting); +static void r_uart_w_fill_tx_fifo(uart_w_instance_ctrl_t * const p_ctrl, uint32_t size); +static void r_uart_w_call_callback(uart_w_instance_ctrl_t * p_ctrl, uint32_t data, uart_event_t event); +static uint32_t r_uart_w_get_fifo_trigger_len(uart_w_instance_ctrl_t * const p_ctrl, uint32_t fifo_trigger); + +static void r_uart_w_handle_incoming_data(uart_w_instance_ctrl_t * const p_ctrl); +static void r_uart_w_handle_incoming_frame(uart_w_instance_ctrl_t * const p_ctrl); +static void r_uart_w_stop_rx(uart_w_instance_ctrl_t * const p_ctrl); + +#if !BSP_MCU_GROUP_RA6W1 +void hw_clk_enable_uart_w_clk(uint8_t channel); +void hw_clk_disable_uart_w_clk(uint8_t channel); +static uart_w_data_bits_t r_uart_w_get_data_bits(uart_cfg_t const * const p_cfg); +static uart_event_t r_uart_w_get_line_error(uart_w_instance_ctrl_t * const p_ctrl); + +#else +static uart_event_t r_uart_w_get_line_error(uint32_t uart_intr_flag); + + #if CFG_PMGR +static fsp_err_t r_uart_w_enter_sleep(r_uart_w_pmgr_context_t * p_context); +static fsp_err_t r_uart_w_wakeup(r_uart_w_pmgr_context_t * p_context); +static void r_uart_w_pmgr_callback(pmgr_callback_args_t * args); \ + static fsp_err_t r_uart_w_subscribe_for_pmgr_notifications(uart_w_instance_ctrl_t * const p_ctrl); +static fsp_err_t r_uart_w_unsubscribe_from_pmgr_notifications(uart_w_instance_ctrl_t * const p_ctrl); \ + static void r_uart_w_tx_done_timer_cb(TimerHandle_t xTimer); +static uint32_t r_uart_w_get_expected_tx_time_ms(uart_w_instance_ctrl_t * p_ctrl, uint32_t tx_bytes); + + #endif +#endif + +/* ISR call when interrupt is generated */ +void uart_w_isr(void); + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/* UART_W HAL API mapping for UART interface */ +const uart_api_t g_uart_on_uart_w = +{ + .open = R_UART_W_Open, + .close = R_UART_W_Close, + .write = R_UART_W_Write, + .read = R_UART_W_Read, + .infoGet = R_UART_W_InfoGet, + .baudSet = R_UART_W_BaudSet, + .communicationAbort = R_UART_W_Abort, + .callbackSet = R_UART_W_CallbackSet, + .readStop = R_UART_W_ReadStop, +#if BSP_MCU_GROUP_RA6W1 + .receiveSuspend = R_UART_W_ReceiveSuspend, + .receiveResume = R_UART_W_ReceiveResume, +#endif +}; + +#if BSP_MCU_GROUP_RA6W1 + #if (CFG_PMGR == 1) + #define R_UART_W_MAX_CHANNELS __builtin_popcount(BSP_FEATURE_UART_W_VALID_CHANNEL_MASK) + +// Min time possible is 1 rtos tic ~ 2ms + #define R_UART_W_TX_TIME_MIN_MS 2 + +/* Keep UART PMGR context here */ +static r_uart_w_pmgr_context_t g_uart_pmgr_context[R_UART_W_MAX_CHANNELS]; + + #define UART_TX_DONE_TIMER_NAME "UART_TX_DONE" + #define UART_TX_DONE_TIMER_DEFAULT_TIMEOUT_TICKS pdMS_TO_TICKS(50) + #endif +#endif + +/*******************************************************************************************************************//** + * @addtogroup UART_W + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * 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 Data bits specified is not supported by the driver. + * @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. + * + * @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_UART_W_Open (uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * const p_cfg) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + + /* Check parameters. */ + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_cfg); + + FSP_ASSERT(p_cfg->p_extend); + FSP_ASSERT(((uart_w_extended_cfg_t *) p_cfg->p_extend)->p_baud_setting); + FSP_ERROR_RETURN(UART_W_OPEN != p_ctrl->open, FSP_ERR_ALREADY_OPEN); + #if !BSP_MCU_GROUP_RA6W1 + FSP_ERROR_RETURN(UART_W_DATA_BITS_9 < p_cfg->data_bits, FSP_ERR_INVALID_ARGUMENT); + #endif + + /* Make sure this channel exists. */ + FSP_ERROR_RETURN(BSP_FEATURE_UART_W_VALID_CHANNEL_MASK & (1U << (p_cfg->channel + UART_W_CHANNEL_OFFSET)), + FSP_ERR_IP_CHANNEL_NOT_PRESENT); + FSP_ASSERT(p_cfg->rxi_irq >= 0); + + #if BSP_MCU_GROUP_RA6W3 + FSP_ASSERT(p_cfg->txi_irq >= 0); + FSP_ASSERT(((uart_w_extended_cfg_t *) p_cfg->p_extend)->gen_irq >= 0); + #endif + + #if UART_W_DMA_SUPPORT_ENABLE == 1 + if (p_cfg->p_transfer_tx) + { + const dmac_extended_cfg_t * p_extend_tx = p_cfg->p_transfer_tx->p_cfg->p_extend; + + /* UART TX should occupy odd DMA channels */ + FSP_ASSERT((uint32_t) p_extend_tx->channel & 1); + } + + if (p_cfg->p_transfer_rx) + { + const dmac_extended_cfg_t * p_extend_rx = p_cfg->p_transfer_rx->p_cfg->p_extend; + + /* UART RX should occupy even DMA channels */ + FSP_ASSERT(!((uint32_t) p_extend_rx->channel & 1)); + } + #endif +#endif + + /* Get the register address of the channel. */ + p_ctrl->p_reg = (UART_Type *) (UART_BASE + (UART_W_REG_SIZE * p_cfg->channel)); + + /* Initialize uart_ctrl_t */ + p_ctrl->fifo_depth = BSP_FEATURE_UART_W_FIFO_DEPTH; + 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->p_tx_src = NULL; + p_ctrl->tx_src_bytes = 0U; + p_ctrl->p_rx_dest = NULL; + p_ctrl->rx_dest_bytes = 0; + + /* Configure the interrupts. */ + r_uart_w_irq_cfg(p_ctrl, p_cfg->rxi_ipl, p_cfg->rxi_irq); +#if !BSP_MCU_GROUP_RA6W1 + r_uart_w_irq_cfg(p_ctrl, p_cfg->txi_ipl, p_cfg->txi_irq); +#endif + +#if BSP_MCU_GROUP_RA6W3 + r_uart_w_irq_cfg(p_ctrl, ((uart_w_extended_cfg_t *) p_cfg->p_extend)->gen_ipl, + ((uart_w_extended_cfg_t *) p_cfg->p_extend)->gen_irq); +#endif + + hw_clk_enable_uart_w_clk(p_cfg->channel); + + /* Set the UART configuration settings provided in ::uart_cfg_t and ::uart_w_extended_cfg_t. */ + r_uart_w_config_set(p_ctrl, p_cfg); + +#if UART_W_DMA_SUPPORT_ENABLE == 1 + + /* Config dma rx/tx */ + r_uart_w_dma_config(p_ctrl); +#endif + +#if BSP_MCU_GROUP_RA6W1 + #if (CFG_PMGR == 1) + p_ctrl->uart_tx_done_timer = xTimerCreate(UART_TX_DONE_TIMER_NAME, + UART_TX_DONE_TIMER_DEFAULT_TIMEOUT_TICKS, + pdFALSE, + (void *) p_ctrl, + r_uart_w_tx_done_timer_cb); + FSP_ASSERT(p_ctrl->uart_tx_done_timer); + r_uart_w_subscribe_for_pmgr_notifications((uart_w_instance_ctrl_t *) p_ctrl); + #endif +#endif + + p_ctrl->open = UART_W_OPEN; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Aborts any in progress transfers. Disables interrupts, receiver, and transmitter. Closes lower level transfer + * drivers if used. Reduces power consumption. 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_UART_W_Close (uart_ctrl_t * const p_api_ctrl) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(UART_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Mark the channel not open so other APIs cannot use it. */ + p_ctrl->open = 0U; + + p_ctrl->fifo_depth = 0; + +#if BSP_MCU_GROUP_RA6W1 + #if (CFG_PMGR == 1) + r_uart_w_unsubscribe_from_pmgr_notifications((uart_w_instance_ctrl_t *) p_ctrl); + xTimerDelete(p_ctrl->uart_tx_done_timer, 0); + #endif +#endif + + /* Disable irq. */ + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + +#if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(p_ctrl->p_cfg->txi_irq); + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); +#endif + + FSP_HARDWARE_REGISTER_WAIT(p_ctrl->p_reg->UART_FR_REG_b.BUSY, 0); + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + p_ctrl->p_reg->UART_CR_REG_b.UARTEN = 0; + FSP_CRITICAL_SECTION_EXIT; + + hw_clk_disable_uart_w_clk(p_ctrl->p_cfg->channel); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * 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_NOT_OPEN The control block has not been opened + * @retval FSP_ERR_IN_USE A UART transmission is in progress + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::reconfigure + **********************************************************************************************************************/ +fsp_err_t R_UART_W_Write (uart_ctrl_t * const p_api_ctrl, uint8_t const * const p_src, uint32_t const bytes) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; +#if UART_W_CFG_PARAM_CHECKING_ENABLE + fsp_err_t err = FSP_SUCCESS; +#endif +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR + uint32_t expected_tx_time_ms; + #endif +#endif + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + err = r_uart_w_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 + + p_ctrl->tx_src_bytes = bytes; + p_ctrl->p_tx_src = p_src; + +#if UART_W_DMA_SUPPORT_ENABLE == 1 + + /* DMA mode,transfer tx should be set */ + if (p_ctrl->p_cfg->p_transfer_tx) + { + r_uart_w_dma_tx_config(p_ctrl); + } + else +#endif + { +#if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.TXIM = 0; + R_BSP_IrqEnable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); +#else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.TXIM = 0; + R_BSP_IrqEnable(p_ctrl->p_cfg->rxi_irq); +#endif + + /* If the fifo is not used the first write will be done from this function. Subsequent writes will be done + * from uart isr. */ + uint32_t cnt = 1; + + /* Is FIFO enabled for the channel */ + if (p_ctrl->p_reg->UART_LCR_H_REG_b.FEN) + { + cnt = p_ctrl->tx_src_bytes > p_ctrl->fifo_depth ? p_ctrl->fifo_depth : p_ctrl->tx_src_bytes; + } + +#if BSP_MCU_GROUP_RA6W1 + #if (CFG_PMGR == 1) + if (p_ctrl->tx_onging_flag == false) + { + RM_PMGR_W_add_sleep_constraint(RM_PMGR_W_get_ctrl(), PMGR_CONSTRAINT_SLEEP_PROHIBITED); + } + p_ctrl->tx_onging_flag = true; + #endif +#endif + r_uart_w_fill_tx_fifo(p_ctrl, cnt); + + if (!p_ctrl->tx_src_bytes) + { +#if BSP_MCU_GROUP_RA6W1 + #if (CFG_PMGR == 1) + expected_tx_time_ms = r_uart_w_get_expected_tx_time_ms(p_ctrl, bytes); + if (xTimerIsTimerActive(p_ctrl->uart_tx_done_timer) == pdFALSE) + { + xTimerChangePeriod(p_ctrl->uart_tx_done_timer, pdMS_TO_TICKS(expected_tx_time_ms), portMAX_DELAY); + xTimerStart(p_ctrl->uart_tx_done_timer, portMAX_DELAY); + } + #endif +#endif + if (p_ctrl->p_callback) + { + r_uart_w_call_callback(p_ctrl, 0U, UART_EVENT_TX_COMPLETE); + } + } + else + { +#if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.TXIM = 1; + R_BSP_IrqEnableNoClear(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); +#else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.TXIM = 1; + R_BSP_IrqEnableNoClear(p_ctrl->p_cfg->rxi_irq); +#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_NOT_OPEN The control block has not been opened + * @retval FSP_ERR_IN_USE A previous read operation is still in progress. + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::reconfigure + **********************************************************************************************************************/ +fsp_err_t R_UART_W_Read (uart_ctrl_t * const p_api_ctrl, uint8_t * const p_dest, uint32_t const bytes) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + fsp_err_t err = FSP_SUCCESS; + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + err = r_uart_w_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 + + /* Save the destination address and size for use in rxi_isr. */ + p_ctrl->p_rx_dest = p_dest; + p_ctrl->rx_dest_bytes = bytes; + +#if UART_W_DMA_SUPPORT_ENABLE == 1 + + /* DMA mode, transfer rx set */ + if (p_ctrl->p_cfg->p_transfer_rx) + { + r_uart_w_dma_rx_config(p_ctrl); + #if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = 0; + R_BSP_IrqEnable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + #else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = 0; + R_BSP_IrqEnable(p_ctrl->p_cfg->rxi_irq); + #endif + } + else +#endif + { + uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend; + + /* Is FIFO enabled for the channel */ + if (p_ctrl->p_reg->UART_LCR_H_REG_b.FEN && (r_uart_w_get_fifo_trigger_len(p_ctrl, p_extend->rx_fifo_trigger) > + p_ctrl->rx_dest_bytes)) + { +#if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = 1; + R_BSP_IrqEnableNoClear(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); +#else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = 1; + R_BSP_IrqEnableNoClear(p_ctrl->p_cfg->rxi_irq); +#endif + } + } + + return err; +} + +/*******************************************************************************************************************/ /** + * Updates the Uart configuration. p_baud_setting is a pointer to a uart_w_baud_setting_t structure. + * + * @warning This terminates any in-progress transmission. + * + * @retval FSP_SUCCESS Uart been reconfiugred 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 + **********************************************************************************************************************/ +fsp_err_t R_UART_W_ConfSet (uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * const p_cfg) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_cfg); +#endif + p_ctrl->p_cfg = p_cfg; + + /* Apply new baud rate register settings. */ + r_uart_w_config_set(p_ctrl, p_cfg); + + 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_UART_W_InfoGet (uart_ctrl_t * const p_api_ctrl, uart_info_t * const p_info) +{ +#if UART_W_CFG_PARAM_CHECKING_ENABLE + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; +#else + FSP_PARAMETER_NOT_USED(p_api_ctrl); +#endif + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_info); + FSP_ERROR_RETURN(UART_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + p_info->read_bytes_max = UART_W_MAX_READ_WRITE_NO_DMA; + p_info->write_bytes_max = UART_W_MAX_READ_WRITE_NO_DMA; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Updates the baud rate using the clock selected in Open. p_baud_setting is a pointer to a uart_w_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 + **********************************************************************************************************************/ +fsp_err_t R_UART_W_BaudSet (uart_ctrl_t * const p_api_ctrl, void const * const p_baud_setting) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + uart_w_baud_setting_t * p_baud = (uart_w_baud_setting_t *) p_baud_setting; +#if BSP_MCU_GROUP_RA6W1 + uint32_t lcr_h_reg_b_fen; + uint32_t RS485EN_REG; + uint32_t UART_IFLS_REG; + uint32_t UART_LCR_H_REG; + uint32_t UART_CR_REG; +#endif + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(UART_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(p_baud); +#endif + +#if BSP_MCU_GROUP_RA6W1 + p_ctrl->p_reg->UART_CR_REG_b.UARTEN = 0; + r_uart_w_clear_tx_fifo_intr(p_ctrl); + RS485EN_REG = p_ctrl->p_reg->UART_RS485EN_REG; + p_ctrl->p_reg->UART_RS485EN_REG = RS485EN_REG; + UART_IFLS_REG = p_ctrl->p_reg->UART_IFLS_REG; + p_ctrl->p_reg->UART_IFLS_REG = UART_IFLS_REG; + + lcr_h_reg_b_fen = p_ctrl->p_reg->UART_LCR_H_REG_b.FEN; + p_ctrl->p_reg->UART_LCR_H_REG_b.FEN = lcr_h_reg_b_fen & + (UART_UART_LCR_H_REG_FEN_Msk >> UART_UART_LCR_H_REG_FEN_Pos); +#endif + + /* Apply new baud rate register settings. */ + r_uart_w_baud_set(p_ctrl->p_reg, p_baud); +#if BSP_MCU_GROUP_RA6W1 + p_ctrl->p_reg->UART_WA_REG_b.WAE = 0; + UART_LCR_H_REG = p_ctrl->p_reg->UART_LCR_H_REG; + p_ctrl->p_reg->UART_LCR_H_REG = UART_LCR_H_REG; + UART_CR_REG = p_ctrl->p_reg->UART_CR_REG; + p_ctrl->p_reg->UART_CR_REG = UART_CR_REG; + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + p_ctrl->p_reg->UART_CR_REG_b.UARTEN = 1; + FSP_CRITICAL_SECTION_EXIT; +#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_W_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_UART_W_Abort (uart_ctrl_t * const p_api_ctrl, uart_dir_t communication_to_abort) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + fsp_err_t err = FSP_ERR_UNSUPPORTED; + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(UART_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + if (UART_DIR_TX & communication_to_abort) + { + err = FSP_SUCCESS; + p_ctrl->tx_src_bytes = 0U; +#if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.TXIM = 0; + R_BSP_IrqEnable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); +#else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.TXIM = 0; + R_BSP_IrqEnable(p_ctrl->p_cfg->rxi_irq); +#endif + +#if UART_W_DMA_SUPPORT_ENABLE == 1 + if (NULL != p_ctrl->p_cfg->p_transfer_rx) + { + p_ctrl->p_reg->UART_DMACR_REG_b.TXDMAE = 0; + + err = p_ctrl->p_cfg->p_transfer_rx->p_api->disable(p_ctrl->p_cfg->p_transfer_rx->p_ctrl); + } +#endif + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + + if (UART_DIR_RX & communication_to_abort) + { + err = FSP_SUCCESS; + p_ctrl->rx_dest_bytes = 0U; + +#if UART_W_DMA_SUPPORT_ENABLE == 1 + if (NULL != p_ctrl->p_cfg->p_transfer_tx) + { + p_ctrl->p_reg->UART_DMACR_REG_b.RXDMAE = 0; + #if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RXIM = 1; + R_BSP_IrqEnableNoClear(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + #else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RXIM = 1; + R_BSP_IrqEnableNoClear(p_ctrl->p_cfg->rxi_irq); + #endif + + err = p_ctrl->p_cfg->p_transfer_tx->p_api->disable(p_ctrl->p_cfg->p_transfer_tx->p_ctrl); + } +#endif + } + + return err; +} + +/*******************************************************************************************************************//** + * 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_UART_W_CallbackSet (uart_ctrl_t * const p_api_ctrl, + void ( * p_callback)(uart_callback_args_t *), + void * const p_context, + uart_callback_args_t * const p_callback_memory) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(UART_W_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 UART_W_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; +} + +/*******************************************************************************************************************//** + * 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. + * @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_UART_W_ReadStop (uart_ctrl_t * const p_api_ctrl, uint32_t * remaining_bytes) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(UART_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + *remaining_bytes = p_ctrl->rx_dest_bytes; + p_ctrl->rx_dest_bytes = 0U; +#if UART_W_DMA_SUPPORT_ENABLE == 1 + if (NULL != p_ctrl->p_cfg->p_transfer_rx) + { + p_ctrl->p_reg->UART_DMACR_REG_b.RXDMAE = 0; + + R_BSP_IrqDisable(irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RXIM = 1; + R_BSP_IrqEnable(irq); + + 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 + + return FSP_SUCCESS; +} + +#if BSP_MCU_GROUP_RA6W1 + +/*******************************************************************************************************************//** + * Provides API to stop any RX activity. Reception isn't enabled after receiveSuspend(). No UART_EVENT_RX_CHAR event is + * generated and character reception is suspended until next call receiveResume(). + * Implements @ref uart_api_t::receiveSuspend + * + * @retval FSP_SUCCESS UART RX activity suspended successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_INVALID_STATE Hardware flow control isn't enabled for this channel. + * @retval FSP_ERR_UNSUPPORTED Operation isn't supported for current configuration. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. + **********************************************************************************************************************/ +fsp_err_t R_UART_W_ReceiveSuspend (uart_ctrl_t * const p_api_ctrl) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + + #if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(UART_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend; + FSP_ERROR_RETURN(UART_W_AUTO_FLOW_CONTROL_ENABLED == p_extend->flow_control, FSP_ERR_INVALID_STATE); + #endif + + #if !UART_W_DMA_SUPPORT_ENABLE + + /* Enable RX interrupts */ + + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RXIM = 0; + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = 0; + R_BSP_IrqEnableNoClear(p_ctrl->p_cfg->rxi_irq); + + return FSP_SUCCESS; + #else + + return FSP_ERR_UNSUPPORTED; + #endif +} + +/*******************************************************************************************************************//** + * Provides API to resume receiving of data over UART. Suspended read() operation is resumed. UART_EVENT_RX_CHAR event + * is generated upon receiving character without prior read() operation. + * Implements @ref uart_api_t::receiveResume + * + * @retval FSP_SUCCESS UART RX activity resumed successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_INVALID_STATE Hardware flow control isn't enabled for this channel. + * @retval FSP_ERR_UNSUPPORTED Operation isn't supported for current configuration. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. + **********************************************************************************************************************/ +fsp_err_t R_UART_W_ReceiveResume (uart_ctrl_t * const p_api_ctrl) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + + #if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(UART_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend; + FSP_ERROR_RETURN(UART_W_AUTO_FLOW_CONTROL_ENABLED == p_extend->flow_control, FSP_ERR_INVALID_STATE); + #endif + + #if !UART_W_DMA_SUPPORT_ENABLE + + /* Enable RX interrupts */ + + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RXIM = 1; + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = !!p_ctrl->p_reg->UART_LCR_H_REG_b.FEN; + R_BSP_IrqEnable(p_ctrl->p_cfg->rxi_irq); + + return FSP_SUCCESS; + #else + + return FSP_ERR_UNSUPPORTED; + #endif +} + +#endif + +/*******************************************************************************************************************//** + * Calculates baud rate register settings. Evaluates and determines the best possible settings set to the baud rate + * related registers. + * + * @param[in] baudrate Baud rate [bps]. For example, 19200, 57600, 115200, etc. + * @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 Invalid baudrate + **********************************************************************************************************************/ +fsp_err_t R_UART_W_BaudCalculate (uint32_t baudrate, uart_w_baud_setting_t * const p_baud_setting) +{ +#if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_baud_setting); + FSP_ERROR_RETURN((0U != baudrate), FSP_ERR_INVALID_ARGUMENT); +#endif + +#if !BSP_MCU_GROUP_RA6W3 + uint64_t frac_coeff = COEFFICIENT_1000; +#endif + uint64_t div_fraction_part; + uint64_t freq_hz; + uint64_t div_integer_part; + uint64_t frac_hz; + + freq_hz = R_FSP_SystemClockHzGet(FSP_PRIV_CLOCK_UART); + div_integer_part = freq_hz / (16 * baudrate); + frac_hz = freq_hz - div_integer_part * 16 * baudrate; +#if !BSP_MCU_GROUP_RA6W3 + div_fraction_part = (((frac_hz * frac_coeff) / (16 * baudrate)) * 64 + 5 * frac_coeff / 10) / frac_coeff; +#else + div_fraction_part = (frac_hz * 64U + (16U * baudrate) / 2U) / (16U * baudrate); + if (div_fraction_part >= 64U) + { + div_fraction_part = 0U; + div_integer_part++; + } +#endif + + p_baud_setting->fra_baud = div_fraction_part & UART_W_FRA_MASK; + p_baud_setting->int_baud = div_integer_part & UART_W_INT_MASK; + + return FSP_SUCCESS; +} + +#if BSP_MCU_GROUP_RA6W1 +bool R_UART_W_IsWritting (uart_ctrl_t * const p_api_ctrl) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + + return p_ctrl->tx_src_bytes || !p_ctrl->p_reg->UART_FR_REG_b.TXFE || p_ctrl->p_reg->UART_FR_REG_b.BUSY; +} + +bool R_UART_W_IsOpened (uart_ctrl_t * const p_api_ctrl) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_api_ctrl; + + return p_ctrl->open == UART_W_OPEN; +} + +#endif + +/*******************************************************************************************************************//** + * @} (end addtogroup UART_W) + **********************************************************************************************************************/ +#if !BSP_MCU_GROUP_RA6W1 + +/** + * \brief Enable clock for specific UART channel + * + * \param[in] channel UART channel to activate clock + */ +void hw_clk_enable_uart_w_clk (uint8_t channel) +{ + // CRG_TOP->CLK_AMBA_REG_b.PERI_CLK_ENABLE = 1; + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + switch (channel) + { + case 0: + { + CRG_COM->CLK_COM_REG_b.UART_ENABLE = 1; + break; + } + + case 1: + { + CRG_COM->CLK_COM_REG_b.UART2_ENABLE = 1; + break; + } + + case 2: + { + CRG_COM->CLK_COM_REG_b.UART3_ENABLE = 1; + break; + } + + case 3: + { + CRG_COM->CLK_COM_REG_b.UART4_ENABLE = 1; + break; + } + } + + FSP_CRITICAL_SECTION_EXIT; +} + +/** + * \brief Disable clock for specific UART channel + * + * \param[in] channel UART channel to deactivate clock + */ +void hw_clk_disable_uart_w_clk (uint8_t channel) +{ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + switch (channel) + { + case 0: + { + CRG_COM->CLK_COM_REG_b.UART_ENABLE = 0; + break; + } + + case 1: + { + CRG_COM->CLK_COM_REG_b.UART2_ENABLE = 0; + break; + } + + case 2: + { + CRG_COM->CLK_COM_REG_b.UART3_ENABLE = 0; + break; + } + + case 3: + { + CRG_COM->CLK_COM_REG_b.UART4_ENABLE = 0; + break; + } + } + + FSP_CRITICAL_SECTION_EXIT; +} + +#endif + +/*********************************************************************************************************************** + * Private Functions + **********************************************************************************************************************/ +#if (UART_W_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 + **********************************************************************************************************************/ +static fsp_err_t r_uart_w_read_write_param_check (uart_w_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(UART_W_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + + return FSP_SUCCESS; +} + +#endif + +#if UART_W_DMA_SUPPORT_ENABLE == 1 +static fsp_err_t r_uart_w_dma_config (uart_w_instance_ctrl_t * p_ctrl) +{ + fsp_err_t err = FSP_SUCCESS; + + const transfer_instance_t * p_transfer_tx = p_ctrl->p_cfg->p_transfer_tx; + if (p_transfer_tx) + { + p_transfer_tx->p_cfg->p_info->transfer_settings_word = UART_W_TX_TRANSFER_SETTINGS; + p_transfer_tx->p_cfg->p_info->p_dest = (void *) &(p_ctrl->p_reg->UART_DR_REG); + + err = p_transfer_tx->p_api->open(p_transfer_tx->p_ctrl, p_transfer_tx->p_cfg); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + + const transfer_instance_t * p_transfer_rx = p_ctrl->p_cfg->p_transfer_rx; + if (p_transfer_rx) + { + p_transfer_rx->p_cfg->p_info->transfer_settings_word = UART_W_RX_TRANSFER_SETTINGS; + p_transfer_rx->p_cfg->p_info->p_src = (void *) &(p_ctrl->p_reg->UART_DR_REG); + + err = p_transfer_rx->p_api->open(p_transfer_rx->p_ctrl, p_transfer_rx->p_cfg); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + + return err; +} + +static fsp_err_t r_uart_w_dma_rx_config (uart_w_instance_ctrl_t * p_ctrl) +{ + fsp_err_t err = FSP_SUCCESS; + + if (p_ctrl->p_cfg->p_transfer_rx) + { + /* Configure the receive DMA instance. */ + p_ctrl->p_cfg->p_transfer_rx->p_cfg->p_info->length = (uint16_t) p_ctrl->rx_dest_bytes; + p_ctrl->p_cfg->p_transfer_rx->p_cfg->p_info->p_dest = (void *) p_ctrl->p_rx_dest; + if (NULL == p_ctrl->p_rx_dest) + { + static uint32_t dummy_rx = 0; + p_ctrl->p_cfg->p_transfer_rx->p_cfg->p_info->transfer_settings_word_b.dest_addr_mode = + TRANSFER_ADDR_MODE_FIXED; + p_ctrl->p_cfg->p_transfer_rx->p_cfg->p_info->p_dest = &dummy_rx; + } + + err = p_ctrl->p_cfg->p_transfer_rx->p_api->reconfigure(p_ctrl->p_cfg->p_transfer_rx->p_ctrl, + p_ctrl->p_cfg->p_transfer_rx->p_cfg->p_info); + + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + + p_ctrl->p_reg->UART_DMACR_REG_b.RXDMAE = 1; + } + + return err; +} + +static fsp_err_t r_uart_w_dma_tx_config (uart_w_instance_ctrl_t * p_ctrl) +{ + fsp_err_t err = FSP_SUCCESS; + + if (p_ctrl->p_cfg->p_transfer_tx) + { + /* Configure the transmit DMA instance. */ + p_ctrl->p_cfg->p_transfer_tx->p_cfg->p_info->length = (uint16_t) p_ctrl->tx_src_bytes; + p_ctrl->p_cfg->p_transfer_tx->p_cfg->p_info->p_src = p_ctrl->p_tx_src; + + if (NULL == p_ctrl->p_tx_src) + { + static uint32_t dummy_tx = 0; + p_ctrl->p_cfg->p_transfer_tx->p_cfg->p_info->transfer_settings_word_b.src_addr_mode = + TRANSFER_ADDR_MODE_FIXED; + p_ctrl->p_cfg->p_transfer_tx->p_cfg->p_info->p_src = &dummy_tx; + } + + err = p_ctrl->p_cfg->p_transfer_tx->p_api->reconfigure(p_ctrl->p_cfg->p_transfer_tx->p_ctrl, + p_ctrl->p_cfg->p_transfer_tx->p_cfg->p_info); + + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + + p_ctrl->p_reg->UART_DMACR_REG_b.TXDMAE = 1; + } + + return err; +} + +#endif + +/*******************************************************************************************************************//** + * Sets interrupt priority and initializes vector info. + * + * @param[in] p_ctrl Pointer to UART channel control block + * @param[in] ipl Interrupt priority level + * @param[in] irq IRQ number for this interrupt + **********************************************************************************************************************/ +static void r_uart_w_irq_cfg (uart_w_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_IrqCfgEnable(irq, ipl, p_ctrl); +} + +static void r_uart_w_baud_set (UART_Type * p_uart_reg, uart_w_baud_setting_t const * const p_baud_setting) +{ + uint32_t uart_enabled = p_uart_reg->UART_CR_REG_b.UARTEN; + + /* Disable UART channel before changing the baud rate */ + p_uart_reg->UART_CR_REG_b.UARTEN = 0; + + p_uart_reg->UART_IBRD_REG_b.BAUD_DIVINT = (p_baud_setting->int_baud & UART_W_INT_MASK); + p_uart_reg->UART_FBRD_REG_b.BAUD_DIVFRAC = (p_baud_setting->fra_baud & UART_W_FRA_MASK); + + /* Clear interrupts before re-enabling the channel */ + p_uart_reg->UART_ICR_REG = UART_W_INTR_CLEAR_MASK; + + p_uart_reg->UART_CR_REG_b.UARTEN = uart_enabled & UART_UART_CR_REG_UARTEN_Msk; +} + +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to UART channel control block + * @param[in] data See uart_callback_args_t in r_uart_api.h + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_uart_w_call_callback (uart_w_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 + + /* The 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. */ + uart_prv_ns_callback p_callback = (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; + } +} + +/*******************************************************************************************************************//** + * ISR called when interrupt is generated. + **********************************************************************************************************************/ +#if UART_W_DMA_SUPPORT_ENABLE == 1 +void uart_w_dma_handler (dmac_callback_args_t * p_args) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) p_args->p_context; + const transfer_instance_t * p_transfer_rx = p_ctrl->p_cfg->p_transfer_rx; + const transfer_instance_t * p_transfer_tx = p_ctrl->p_cfg->p_transfer_tx; + + if (p_transfer_rx != NULL) + { + const dmac_extended_cfg_t * p_extend_rx = p_transfer_rx->p_cfg->p_extend; + if ((p_args->event == DMAC_B_EVENT_TRANSFER_COMPLETE) && (p_args->channel == p_extend_rx->channel)) + { + p_transfer_rx->p_api->disable(p_transfer_rx->p_ctrl); + p_ctrl->rx_dest_bytes = 0; + + /* TODO Partial read */ + if (NULL != p_ctrl->p_callback) + { + r_uart_w_call_callback(p_ctrl, 0U, UART_EVENT_RX_COMPLETE); + } + + p_ctrl->p_reg->UART_DMACR_REG_b.RXDMAE = 0; + #if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RXIM = 1; + R_BSP_IrqEnableNoClear(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + #else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RXIM = 1; + R_BSP_IrqEnableNoClear(p_ctrl->p_cfg->rxi_irq); + #endif + } + } + + if (p_transfer_tx != NULL) + { + const dmac_extended_cfg_t * p_extend_tx = p_transfer_tx->p_cfg->p_extend; + if ((p_args->event == DMAC_B_EVENT_TRANSFER_COMPLETE) && (p_args->channel == p_extend_tx->channel)) + { + p_transfer_tx->p_api->disable(p_transfer_tx->p_ctrl); + p_ctrl->tx_src_bytes = 0; + if (NULL != p_ctrl->p_callback) + { + r_uart_w_call_callback(p_ctrl, 0U, UART_EVENT_TX_COMPLETE); + } + + p_ctrl->p_reg->UART_DMACR_REG_b.TXDMAE = 0; + } + } +} + +#endif + +/*******************************************************************************************************************//** + * ISR called when interrupt is generated. + **********************************************************************************************************************/ +void uart_w_isr (void) +{ + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE; + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Recover ISR context saved in open. */ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + volatile uint32_t uart_intr_flag = (p_ctrl->p_reg->UART_MIS_REG & UART_W_INTR_MASK); + UART_Type * p_uart_reg = p_ctrl->p_reg; + +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR + uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend; + uint32_t expected_tx_time_ms; + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + #endif +#endif +#if BSP_MCU_GROUP_RA6W3 + volatile uint32_t * ielsrn_reg = ICU_IELSRn_REG(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + + /* Clear pending IRQ to make sure it doesn't fire again after exiting. */ + R_BSP_IrqStatusClear(irq); +#endif + + while (UART_W_INTR_ID_NO_PEND != uart_intr_flag) + { + if ((UART_W_INTR_ID_RDI | UART_W_INTR_ID_TIMEOUT) & uart_intr_flag) + { + r_uart_w_handle_incoming_data(p_ctrl); + + p_uart_reg->UART_ICR_REG = (UART_UART_ICR_REG_RXIC_Msk | UART_UART_ICR_REG_RTIC_Msk); +#if BSP_MCU_GROUP_RA6W3 + switch (p_ctrl->p_cfg->channel) + { + case UART1_CHANNEL_NUM: + { + FSP_REG_VAR_FIELD_SET(ICU, ICU_IELSR0_REG, ICU_IELS, *ielsrn_reg, ICU_EVENT_UARTWB1_IRQ); + break; + } + + case UART2_CHANNEL_NUM: + { + FSP_REG_VAR_FIELD_SET(ICU, ICU_IELSR0_REG, ICU_IELS, *ielsrn_reg, ICU_EVENT_UARTWB2_IRQ); + break; + } + + case UART3_CHANNEL_NUM: + { + FSP_REG_VAR_FIELD_SET(ICU, ICU_IELSR0_REG, ICU_IELS, *ielsrn_reg, ICU_EVENT_UARTWB3_IRQ); + break; + } + + case UART4_CHANNEL_NUM: + { + FSP_REG_VAR_FIELD_SET(ICU, ICU_IELSR0_REG, ICU_IELS, *ielsrn_reg, ICU_EVENT_UARTWB4_IRQ); + break; + } + } +#endif + } + else if (UART_W_INTR_ID_TI & uart_intr_flag) + { + uint32_t cnt = 1; /* The data sent should be at least 1 */ + + p_uart_reg->UART_ICR_REG_b.TXIC = 1; + + /* Is FIFO enabled for the channel */ + if (p_uart_reg->UART_LCR_H_REG_b.FEN) + { + cnt = p_ctrl->tx_src_bytes > p_ctrl->fifo_depth / 2 ? p_ctrl->fifo_depth / 2 : p_ctrl->tx_src_bytes; + } + + r_uart_w_fill_tx_fifo(p_ctrl, cnt); + + if (!p_ctrl->tx_src_bytes) + { + p_uart_reg->UART_IMSC_REG_b.TXIM = 0; +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR + expected_tx_time_ms = + r_uart_w_get_expected_tx_time_ms(p_ctrl, + r_uart_w_get_fifo_trigger_len(p_ctrl, p_extend->rx_fifo_trigger)); + if (xTimerIsTimerActive(p_ctrl->uart_tx_done_timer) == pdFALSE) + { + xTimerChangePeriodFromISR(p_ctrl->uart_tx_done_timer, + pdMS_TO_TICKS(expected_tx_time_ms), + &xHigherPriorityTaskWoken); + xTimerStartFromISR(p_ctrl->uart_tx_done_timer, &xHigherPriorityTaskWoken); + } + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + #endif +#endif + if (NULL != p_ctrl->p_callback) + { + r_uart_w_call_callback(p_ctrl, 0U, UART_EVENT_TX_COMPLETE); + } + } + } + else if (UART_W_INTR_ID_RLSI & uart_intr_flag) + { + /* Return Line status. */ +#if BSP_MCU_GROUP_RA6W1 + uart_event_t error_code = r_uart_w_get_line_error(uart_intr_flag); +#else + uart_event_t error_code = r_uart_w_get_line_error(p_ctrl); +#endif + if (NULL != p_ctrl->p_callback) + { + r_uart_w_call_callback(p_ctrl, 0U, error_code); + } + +#if BSP_MCU_GROUP_RA6W1 + + /* Need to pop corrupted byte from the top of the FIFO */ + if (uart_intr_flag & (UART_UART_MIS_REG_FEMIS_Msk | \ + UART_UART_MIS_REG_PEMIS_Msk | \ + UART_UART_MIS_REG_BEMIS_Msk)) + { + (void) (*(volatile uint8_t *) &p_ctrl->p_reg->UART_DR_REG); + + /* Clear irq status register condition. */ + p_uart_reg->UART_RSR_REG = 0; + } + +#else + + /* Clear irq status register condition. */ + p_uart_reg->UART_RSR_REG = 0; +#endif + p_uart_reg->UART_ICR_REG = (UART_UART_ICR_REG_FEIC_Msk | UART_UART_ICR_REG_PEIC_Msk | \ + UART_UART_ICR_REG_BEIC_Msk | UART_UART_ICR_REG_OEIC_Msk); + } + else if (UART_W_INTR_MDM_STATUS & uart_intr_flag) + { + p_uart_reg->UART_ICR_REG = (UART_UART_ICR_REG_RIMIC_Msk | UART_UART_ICR_REG_CTSMIC_Msk | \ + UART_UART_ICR_REG_DCDMIC_Msk | UART_UART_ICR_REG_DSRMIC_Msk); + } + else + { + /* Clear unidentified interrupts */ + p_uart_reg->UART_ICR_REG = UART_W_INTR_CLEAR_MASK; + } + + uart_intr_flag = (p_ctrl->p_reg->UART_MIS_REG & UART_W_INTR_MASK); + } + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE; +} + +/*******************************************************************************************************************//** + * Clear pending TX FIFO interrupt. + * + * @param[in] p_ctrl Pointer to UART channel control block + **********************************************************************************************************************/ +static void r_uart_w_clear_tx_fifo_intr (uart_w_instance_ctrl_t * const p_ctrl) +{ + (void) p_ctrl->p_reg->UART_FR_REG_b.TXFE; +} + +/*******************************************************************************************************************//** + * Configures UART related registers based on user configurations. + * + * @param[in] p_ctrl Pointer to UART channel control block + * @param[in] p_cfg Pointer to UART specific configuration structure + **********************************************************************************************************************/ +static void r_uart_w_config_set (uart_w_instance_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg) +{ + uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t *) p_cfg->p_extend; +#if BSP_MCU_GROUP_RA6W1 + uint32_t data_bits = (uint32_t) p_cfg->data_bits; +#else + uint32_t data_bits = (uint32_t) r_uart_w_get_data_bits(p_cfg); +#endif + + p_ctrl->p_reg->UART_CR_REG_b.UARTEN = 0; + + r_uart_w_clear_tx_fifo_intr(p_ctrl); + + /* Enable RS485 */ + p_ctrl->p_reg->UART_RS485EN_REG = ((p_ctrl->p_reg->UART_RS485EN_REG & ~UART_UART_RS485EN_REG_RS485E_Msk) | + (uint32_t) p_extend->rs485_enable << UART_UART_RS485EN_REG_RS485E_Pos); + + if (!(p_ctrl->p_cfg->p_transfer_rx || p_ctrl->p_cfg->p_transfer_tx || p_extend->fifo_enable || + p_extend->flow_control)) + { + p_ctrl->p_reg->UART_LCR_H_REG_b.FEN = 0; + p_ctrl->p_reg->UART_IFLS_REG &= ~(UART_UART_IFLS_REG_RXIFLSEL_Msk | UART_UART_IFLS_REG_TXIFLSEL_Msk); + } + else + { + p_ctrl->p_reg->UART_LCR_H_REG_b.FEN = 1; + p_ctrl->p_reg->UART_IFLS_REG = ((p_ctrl->p_reg->UART_IFLS_REG & + ~(UART_UART_IFLS_REG_RXIFLSEL_Msk | UART_UART_IFLS_REG_TXIFLSEL_Msk)) | + ((uint32_t) p_extend->rx_fifo_trigger << + UART_UART_IFLS_REG_RXIFLSEL_Pos) | + ((uint32_t) p_extend->tx_fifo_trigger << + UART_UART_IFLS_REG_TXIFLSEL_Pos)); + } + + /* Set the baud rate. */ + r_uart_w_baud_set(p_ctrl->p_reg, p_extend->p_baud_setting); + + p_ctrl->p_reg->UART_CR_REG = ((p_ctrl->p_reg->UART_LCR_H_REG & ~UART_UART_CR_REG_LBE_Msk) | + ((uint32_t) p_extend->loop_back_enable << UART_UART_CR_REG_LBE_Pos) | + UART_UART_CR_REG_RXE_Msk | UART_UART_CR_REG_TXE_Msk); + p_ctrl->p_reg->UART_WA_REG_b.WAE = 0; + + if (UART_PARITY_OFF != p_cfg->parity) + { + if (UART_PARITY_ODD == p_cfg->parity) + { + p_ctrl->p_reg->UART_LCR_H_REG = ((p_ctrl->p_reg->UART_LCR_H_REG & ~UART_UART_LCR_H_REG_EPS_Msk) | + UART_UART_LCR_H_REG_PEN_Msk); + } + else + { + p_ctrl->p_reg->UART_LCR_H_REG |= UART_UART_LCR_H_REG_EPS_Msk | UART_UART_LCR_H_REG_PEN_Msk; + } + } + else + { + p_ctrl->p_reg->UART_LCR_H_REG &= ~(UART_UART_LCR_H_REG_PEN_Msk | UART_UART_LCR_H_REG_EPS_Msk); + } + + p_ctrl->p_reg->UART_LCR_H_REG = ((p_ctrl->p_reg->UART_LCR_H_REG & + ~(UART_UART_LCR_H_REG_WLEN_Msk | UART_UART_LCR_H_REG_STP2_Msk)) | + ((uint32_t) p_cfg->stop_bits << UART_UART_LCR_H_REG_STP2_Pos) | + (data_bits << UART_UART_LCR_H_REG_WLEN_Pos)); + p_ctrl->p_reg->UART_CR_REG = ((p_ctrl->p_reg->UART_CR_REG & + ~(UART_UART_CR_REG_RTSEn_Msk | UART_UART_CR_REG_CTSEn_Msk)) | + ((uint32_t) p_extend->flow_control << UART_UART_CR_REG_RTSEn_Pos) | + ((uint32_t) p_extend->flow_control << UART_UART_CR_REG_CTSEn_Pos)); + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + p_ctrl->p_reg->UART_CR_REG_b.UARTEN = 1; + FSP_CRITICAL_SECTION_EXIT; + +#if !UART_W_DMA_SUPPORT_ENABLE + #if BSP_MCU_GROUP_RA6W3 + + /* Enable RX and line status interrupts */ + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG |= (UART_UART_IMSC_REG_FEIM_Msk | UART_UART_IMSC_REG_PEIM_Msk | \ + UART_UART_IMSC_REG_BEIM_Msk | UART_UART_IMSC_REG_OEIM_Msk | \ + UART_UART_IMSC_REG_RXIM_Msk); + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = !!p_ctrl->p_reg->UART_LCR_H_REG_b.FEN; + R_BSP_IrqEnable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + #else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG |= (UART_UART_IMSC_REG_FEIM_Msk | UART_UART_IMSC_REG_PEIM_Msk | \ + UART_UART_IMSC_REG_BEIM_Msk | UART_UART_IMSC_REG_OEIM_Msk | \ + UART_UART_IMSC_REG_RXIM_Msk); + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = !!p_ctrl->p_reg->UART_LCR_H_REG_b.FEN; + R_BSP_IrqEnable(p_ctrl->p_cfg->rxi_irq); + #endif +#endif +} + +#if !BSP_MCU_GROUP_RA6W1 + +/*******************************************************************************************************************//** + * Return UART data bits configuration. + * + * @param[in] p_cfg Pointer to UART specific configuration structure + * + * @retval UART data bits configuration. + **********************************************************************************************************************/ +static uart_w_data_bits_t r_uart_w_get_data_bits (uart_cfg_t const * const p_cfg) +{ + uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t *) p_cfg->p_extend; + + if (p_extend->extended_data_bits_enable) + { + return p_extend->data_bits; + } + + if (UART_DATA_BITS_7 == p_cfg->data_bits) + { + return UART_W_DATA_BITS_7; + } + + return UART_W_DATA_BITS_8; +} + +#endif + +/*******************************************************************************************************************//** + * Fill number of bytes from the source buffer pointer. + * + * @param[in] p_ctrl Pointer to UART channel control block + * @param[in] size number of bytes + **********************************************************************************************************************/ +static void r_uart_w_fill_tx_fifo (uart_w_instance_ctrl_t * const p_ctrl, uint32_t size) +{ + for ( ; size; size--) + { + if (p_ctrl->p_reg->UART_FR_REG_b.TXFF) + { + + /* FIFO buffer is full, wait for next interrupt to retry */ + return; + } + + (*(volatile uint8_t *) &p_ctrl->p_reg->UART_DR_REG) = *p_ctrl->p_tx_src; + + p_ctrl->tx_src_bytes--; + p_ctrl->p_tx_src++; + } +} + +/*******************************************************************************************************************//** + * Return the number of bytes required to trigger FIFO event. + * + * @param[in] p_ctrl Pointer to the control block for the channel + * @param[in] fifo_trigger Trigger level for FIFO operations + * + * @retval The number of bytes corresponding to specified FIFO trigger level. + **********************************************************************************************************************/ +static uint32_t r_uart_w_get_fifo_trigger_len (uart_w_instance_ctrl_t * const p_ctrl, uint32_t fifo_trigger) +{ + switch (fifo_trigger) + { + case UART_W_RX_FIFO_TRIGGER_EIGHTH: + { + return p_ctrl->fifo_depth / 8U; + } + + case UART_W_RX_FIFO_TRIGGER_QUARTER: + { + return p_ctrl->fifo_depth / 4U; + } + + case UART_W_RX_FIFO_TRIGGER_HALF: + { + return p_ctrl->fifo_depth / 2U; + } + + case UART_W_RX_FIFO_TRIGGER_THREE_QUARTERS: + { + return p_ctrl->fifo_depth * 3U / 4U; + } + + case UART_W_RX_FIFO_TRIGGER_SEVEN_EIGHTHS: + { + return p_ctrl->fifo_depth * 7U / 8U; + } + + default: + { + return 1; + } + } +} + +#if BSP_MCU_GROUP_RA6W1 + +/*******************************************************************************************************************/ /** + * Return UART line status event error code. + * + * @retval UART line status event error code. + **********************************************************************************************************************/ +static uart_event_t r_uart_w_get_line_error (uint32_t uart_intr_flag) +{ + uart_event_t error_code = UART_W_EVENT_NO_EVENT; + + if (UART_UART_MIS_REG_FEMIS_Msk & uart_intr_flag) + { + error_code |= UART_EVENT_ERR_FRAMING; + } + + if (UART_UART_MIS_REG_PEMIS_Msk & uart_intr_flag) + { + error_code |= UART_EVENT_ERR_PARITY; + } + + if (UART_UART_MIS_REG_BEMIS_Msk & uart_intr_flag) + { + error_code |= UART_EVENT_BREAK_DETECT; + } + + if (UART_UART_MIS_REG_OEMIS_Msk & uart_intr_flag) + { + error_code |= UART_EVENT_ERR_OVERFLOW; + } + + return error_code; +} + +#else + +/*******************************************************************************************************************//** + * Return UART line status event error code. + * + * @param[in] p_ctrl Pointer to UART channel control block + * + * @retval UART line status event error code. + **********************************************************************************************************************/ +static uart_event_t r_uart_w_get_line_error (uart_w_instance_ctrl_t * const p_ctrl) +{ + uint32_t rsr = p_ctrl->p_reg->UART_RSR_REG; + uart_event_t error_code = UART_W_EVENT_NO_EVENT; + + if (UART_UART_RSR_REG_RSR_FE_Msk & rsr) + { + error_code |= UART_EVENT_ERR_FRAMING; + } + + if (UART_UART_RSR_REG_RSR_PE_Msk & rsr) + { + error_code |= UART_EVENT_ERR_PARITY; + } + + if (UART_UART_RSR_REG_RSR_BE_Msk & rsr) + { + error_code |= UART_EVENT_BREAK_DETECT; + } + + if (UART_UART_RSR_REG_RSR_OE_Msk & rsr) + { + error_code |= UART_EVENT_ERR_OVERFLOW; + } + + return error_code; +} + +#endif + +/*******************************************************************************************************************//** + * Handle incoming UART data. + * + * @param[in] p_ctrl Pointer to UART channel control block + **********************************************************************************************************************/ +static void r_uart_w_handle_incoming_data (uart_w_instance_ctrl_t * const p_ctrl) +{ + uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend; + + /* Is FIFO enabled for the channel */ + if (p_ctrl->p_reg->UART_LCR_H_REG_b.FEN) + { + uint32_t byte; + uint32_t cnt = r_uart_w_get_fifo_trigger_len(p_ctrl, p_extend->rx_fifo_trigger); + + for (byte = 0; byte < cnt; byte++) + { + if (p_ctrl->p_reg->UART_FR_REG_b.RXFE) + { + /* No frames left to process */ + break; + } + + r_uart_w_handle_incoming_frame(p_ctrl); + } + } + else + { + if (!p_ctrl->p_reg->UART_FR_REG_b.RXFE) + { + /* We have pending frame */ + r_uart_w_handle_incoming_frame(p_ctrl); + } + } + + if (p_ctrl->p_reg->UART_LCR_H_REG_b.FEN && p_ctrl->rx_dest_bytes) + { + if (r_uart_w_get_fifo_trigger_len(p_ctrl, p_extend->rx_fifo_trigger) > p_ctrl->rx_dest_bytes) + { +#if BSP_MCU_GROUP_RA6W3 + R_BSP_IrqDisable(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = 1; + R_BSP_IrqEnableNoClear(((uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend)->gen_irq); +#else + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + p_ctrl->p_reg->UART_IMSC_REG_b.RTIM = 1; + R_BSP_IrqEnableNoClear(p_ctrl->p_cfg->rxi_irq); +#endif + } + } +} + +/*******************************************************************************************************************//** + * Handle incoming UART frame. + * + * @param[in] p_ctrl Pointer to UART channel control block + **********************************************************************************************************************/ +static void r_uart_w_handle_incoming_frame (uart_w_instance_ctrl_t * const p_ctrl) +{ + uint8_t data = (*(volatile uint8_t *) &p_ctrl->p_reg->UART_DR_REG); + + /* No pending RX flow. Calling user callback with UART_EVENT_RX_CHAR code */ + if (0 == p_ctrl->rx_dest_bytes) + { + if (NULL != p_ctrl->p_callback) + { + r_uart_w_call_callback(p_ctrl, data, UART_EVENT_RX_CHAR); + } + } + else + { + *p_ctrl->p_rx_dest = data; + + p_ctrl->p_rx_dest++; + p_ctrl->rx_dest_bytes--; + + if (0 == p_ctrl->rx_dest_bytes) + { + r_uart_w_stop_rx(p_ctrl); + } + } +} + +/*******************************************************************************************************************//** + * Finish current UART RX flow. + * + * @param[in] p_ctrl Pointer to UART channel control block + **********************************************************************************************************************/ +static void r_uart_w_stop_rx (uart_w_instance_ctrl_t * const p_ctrl) +{ + /* Trying to pull all the data remaining */ + while (p_ctrl->rx_dest_bytes) + { + if (p_ctrl->p_reg->UART_FR_REG_b.RXFE) + { + /* No frames left to process */ + break; + } + + /* We have pending frame */ + r_uart_w_handle_incoming_frame(p_ctrl); + } + + p_ctrl->rx_dest_bytes = 0; + + if (NULL != p_ctrl->p_callback) + { + r_uart_w_call_callback(p_ctrl, 0U, UART_EVENT_RX_COMPLETE); + } +} + +#if BSP_MCU_GROUP_RA6W1 + #if CFG_PMGR == 1 + +/*******************************************************************************************************************/ /** + * Prepare UART for sleep mode 4/5 + * + * @param[in] p_context Pointer to PMGR interface of UART instance + **********************************************************************************************************************/ +static fsp_err_t r_uart_w_enter_sleep (r_uart_w_pmgr_context_t * p_context) +{ + fsp_err_t err = FSP_SUCCESS; + #if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_context); + #endif + + uart_w_instance_ctrl_t * p_ctrl = p_context->p_ctrl; + FSP_ERROR_RETURN(p_ctrl->open == UART_W_OPEN, FSP_ERR_INVALID_MODE); + + /* Store the baud rate and CR after reset */ + p_context->state.UART_IBRD_REG = p_ctrl->p_reg->UART_IBRD_REG; + p_context->state.UART_FBRD_REG = p_ctrl->p_reg->UART_FBRD_REG; + + p_ctrl->p_reg->UART_CR_REG_b.UARTEN = 0; + + p_ctrl->open = UART_W_SLEEP; + + return err; +} + +/*******************************************************************************************************************/ /** + * Restore UART from wakeup + * + * @param[in] p_context Pointer to PMGR interface of UART instance + **********************************************************************************************************************/ +static fsp_err_t r_uart_w_wakeup (r_uart_w_pmgr_context_t * p_context) +{ + fsp_err_t err = FSP_SUCCESS; + #if (UART_W_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_context); + #endif + uart_w_instance_ctrl_t * p_ctrl = p_context->p_ctrl; + + FSP_ERROR_RETURN(p_ctrl->open == UART_W_SLEEP, FSP_ERR_INVALID_MODE); + + r_uart_w_irq_cfg(p_ctrl, p_ctrl->p_cfg->rxi_ipl, p_ctrl->p_cfg->rxi_irq); + hw_clk_enable_uart_w_clk(p_ctrl->p_cfg->channel); + r_uart_w_config_set(p_ctrl, p_ctrl->p_cfg); + + /* Restore the baud rate - + * Can be modified by setter func so can't be restored as part of r_uart_w_config_set() + */ + p_ctrl->p_reg->UART_IBRD_REG = p_context->state.UART_IBRD_REG; + p_ctrl->p_reg->UART_FBRD_REG = p_context->state.UART_FBRD_REG; + + p_ctrl->open = UART_W_OPEN; + + return err; +} + +static void r_uart_w_pmgr_callback (pmgr_callback_args_t * p_args) +{ + pmgr_instance_info_t * p_pmgr_info = (pmgr_instance_info_t *) p_args->p_instance_info; + + if (p_pmgr_info->power_mode == PMGR_LLD_POWER_MODE_SLEEP4) + { + if (p_args->event == PMGR_EVENT_ENTERING_SLEEP) + { + /* Entering sleep 4/5 - close UART */ + r_uart_w_enter_sleep((r_uart_w_pmgr_context_t *) p_args->p_context); + } + else if (p_args->event == PMGR_EVENT_EXITING_SLEEP) + { + /* Open UART with previous settings */ + r_uart_w_wakeup((r_uart_w_pmgr_context_t *) p_args->p_context); + } + } +} + +static fsp_err_t r_uart_w_subscribe_for_pmgr_notifications (uart_w_instance_ctrl_t * const p_ctrl) +{ + fsp_err_t err = FSP_SUCCESS; + pmgr_ctrl_t * pmgr_ctrl = NULL; + + r_uart_w_pmgr_context_t * context = &g_uart_pmgr_context[p_ctrl->p_cfg->channel]; + + context->pmgr_info.power_mode = PMGR_LLD_POWER_MODE_SLEEP4; + context->pmgr_info.wake_source = PMGR_WAKE_SOURCE_NONE, + context->pmgr_notifier_ext.order = PMGR_W_NOTIFIER_ORDER_SYS_HIGH; + context->p_ctrl = p_ctrl; + + context->clbk_args.constraints = PMGR_CONSTRAINT_NONE; + context->clbk_args.event = PMGR_EVENT_NOT_SET; + context->clbk_args.p_context = (void *) context; + context->clbk_args.p_instance_info = (void *) &context->pmgr_info; + + pmgr_ctrl = RM_PMGR_W_get_ctrl(); + FSP_ASSERT(pmgr_ctrl != NULL); + + err = RM_PMGR_W_notifier_register(pmgr_ctrl, + r_uart_w_pmgr_callback, + &context->clbk_args, + &context->pmgr_notifier_ext); + FSP_ASSERT(FSP_SUCCESS == err); + + return FSP_SUCCESS; +} + +static fsp_err_t r_uart_w_unsubscribe_from_pmgr_notifications (uart_w_instance_ctrl_t * const p_ctrl) +{ + fsp_err_t err = FSP_SUCCESS; + pmgr_ctrl_t * pmgr_ctrl = NULL; + + pmgr_ctrl = RM_PMGR_W_get_ctrl(); + FSP_ASSERT(pmgr_ctrl != NULL); + + r_uart_w_pmgr_context_t * context = &g_uart_pmgr_context[p_ctrl->p_cfg->channel]; + err = RM_PMGR_W_notifier_unregister(pmgr_ctrl, context->pmgr_notifier_ext.notifier_id); + FSP_ASSERT(FSP_SUCCESS == err); + + return FSP_SUCCESS; +} + +static uint32_t r_uart_w_get_expected_tx_time_ms (uart_w_instance_ctrl_t * p_ctrl, uint32_t tx_bytes) +{ + uart_cfg_t const * const p_cfg = p_ctrl->p_cfg; + uint8_t bits_per_byte = p_cfg->data_bits + p_cfg->parity + p_cfg->stop_bits + 1; + uint32_t total_bits = tx_bytes * bits_per_byte; + uint64_t freq_hz = R_FSP_SystemClockHzGet(FSP_PRIV_CLOCK_UART); + uint32_t baudrate = 0; + uint32_t expected_time_ms = 0; + + if (p_ctrl->p_reg->UART_IBRD_REG_b.BAUD_DIVINT) + { + baudrate = (uint32_t) (freq_hz / (16 * p_ctrl->p_reg->UART_IBRD_REG_b.BAUD_DIVINT)); + } + + if (baudrate) + { + expected_time_ms = ((total_bits * 1000) / baudrate); + } + + return (expected_time_ms < R_UART_W_TX_TIME_MIN_MS) ? R_UART_W_TX_TIME_MIN_MS : expected_time_ms; +} + +static void r_uart_w_tx_done_timer_cb (TimerHandle_t xTimer) +{ + uart_w_instance_ctrl_t * p_ctrl = (uart_w_instance_ctrl_t *) pvTimerGetTimerID(xTimer); + uart_w_extended_cfg_t * p_extend = (uart_w_extended_cfg_t *) p_ctrl->p_cfg->p_extend; + uint32_t uart_expected_time_ms; + + vPortEnterCritical(); + if (R_UART_W_IsWritting(p_ctrl) == false) + { + if (p_ctrl->tx_onging_flag) + { + p_ctrl->tx_onging_flag = false; + RM_PMGR_W_remove_sleep_constraint(RM_PMGR_W_get_ctrl(), PMGR_CONSTRAINT_SLEEP_PROHIBITED); + } + + vPortExitCritical(); + } + else + { + vPortExitCritical(); + + // Uart still busy wait for next timer cb + uart_expected_time_ms = + r_uart_w_get_expected_tx_time_ms(p_ctrl, r_uart_w_get_fifo_trigger_len(p_ctrl, p_extend->rx_fifo_trigger)); + + if (xTimerIsTimerActive(xTimer) == pdFALSE) + { + xTimerChangePeriod(xTimer, pdMS_TO_TICKS(uart_expected_time_ms), portMAX_DELAY); + + xTimerStart(xTimer, portMAX_DELAY); + } + } +} + + #endif +#endif diff --git a/bsp/renesas/ra6w1-ek/rafw_cfg/SConscript b/bsp/renesas/ra6w1-ek/rafw_cfg/SConscript new file mode 100644 index 000000000000..721f9dcda996 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/SConscript @@ -0,0 +1,18 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = [] +group = [] +CPPPATH = [] + +if rtconfig.PLATFORM in ['iccarm']: + print("\nThe current project does not support IAR build\n") + Return('group') +elif rtconfig.PLATFORM in ['gcc', 'armclang']: + 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/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/board_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/board_cfg.h new file mode 100644 index 000000000000..454d4f48766d --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_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/rrq61xxx_evb/board.h" +#endif /* BOARD_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_cfg.h new file mode 100644 index 000000000000..bef3d34a1737 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_cfg.h @@ -0,0 +1,75 @@ +/* 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 FSP_NOT_DEFINED 0 +#ifndef BSP_CFG_RTOS +#if (FSP_NOT_DEFINED) != (FSP_NOT_DEFINED) + #define BSP_CFG_RTOS (2) + #elif (FSP_NOT_DEFINED) != (FSP_NOT_DEFINED) + #define BSP_CFG_RTOS (1) + #else +#define BSP_CFG_RTOS (0) +#endif +#endif +#undef FSP_NOT_DEFINED +#ifndef BSP_CFG_RTC_USED +#define BSP_CFG_RTC_USED (FSP_NOT_DEFINED) +#endif +#undef RRQ_NOT_DEFINED +#if defined(_RRQ_BOOT_IMAGE) + #define BSP_CFG_BOOT_IMAGE (1) + #else +#define BSP_CFG_BOOT_IMAGE ((0)) +#endif +#define BSP_CFG_STACK_MAIN_BYTES (0x400) +#define BSP_CFG_HEAP_BYTES (0) +#define BSP_CFG_NVM_SIZE_BYTES (0x180000) +#define BSP_CFG_PARAM_CHECKING_ENABLE (0) +#define BSP_CFG_ASSERT (0) +#define BSP_CFG_ERROR_LOG (0) +#define BSP_CFG_WAKEUP_RESET_HANDLER_ENABLE (0) + +#define BSP_CFG_C_RUNTIME_INIT ((1)) +#define BSP_CFG_EARLY_INIT ((0)) + +#ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED +#define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1) +#endif +#ifndef BSP_CLOCK_CFG_XTAL32M_STABILIZATION_USEC +#define BSP_CLOCK_CFG_XTAL32M_STABILIZATION_USEC 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 600 +#endif +#ifndef BSP_CFG_CLOCK_CALIBRATION_CYCLES +#define BSP_CFG_CLOCK_CALIBRATION_CYCLES 25 +#endif + +#ifndef BSP_CFG_IMAGE_HEADER_VERSION +#define BSP_CFG_IMAGE_HEADER_VERSION 0x00000000 +#endif +#ifndef BSP_CFG_PRODUCTION_HEADER_CRC +#define BSP_CFG_PRODUCTION_HEADER_CRC 0xFDA8 +#endif + +#ifndef BSP_CFG_CMN_TIMING_DEBUG +/* TODO add a property for this */ +#define BSP_CFG_CMN_TIMING_DEBUG (0U) +#endif + +#define __PROGRAM_START + +#ifdef __cplusplus + } + #endif +#endif /* BSP_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h new file mode 100644 index 000000000000..bd6a901c32d6 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_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/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h new file mode 100644 index 000000000000..6617fb0932c0 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h @@ -0,0 +1,12 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_DEVICE_PN_CFG_H_ +#define BSP_MCU_DEVICE_PN_CFG_H_ +#define BSP_MCU_R7SA6W1CEDZDD +#define BSP_MCU_FEATURE_SET ('D') +#define BSP_ROM_SIZE_BYTES (134217728) +#define BSP_RAM_SIZE_BYTES (675840) +#define BSP_DATA_FLASH_SIZE_BYTES (0x40000) +#define BSP_NUMBER_OF_CORES (1) +#define BSP_PACKAGE_WLCSP +#define BSP_PACKAGE_PINS (70) +#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h new file mode 100644 index 000000000000..f829a0b11c14 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h @@ -0,0 +1,481 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_FAMILY_CFG_H_ +#define BSP_MCU_FAMILY_CFG_H_ +#include "bsp_mcu_device_pn_cfg.h" +#include "bsp_mcu_device_cfg.h" +#ifndef __ASSEMBLER__ +#include "../../../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_override.h" +#include "../../../ra/fsp/src/bsp_w/mcu/ra6w1/bsp_mcu_info.h" +#endif +#include "bsp_clock_cfg.h" +#define BSP_API_OVERRIDE "../../../ra/fsp/src/bsp_w/mcu/all/bsp_api_override.h" +#define BSP_MCU_GROUP_RA6W1 (1) + +#define TIN_SKU_WIFI4_B24 (0x26) +#define TIN_SKU_WIFI6_B24 (0x22) +#define TIN_SKU_WIFI6_B24_5 (0x20) +#define TIN_SKU_WIFI6_B24_5_BLE (0x28) + +/** Chipset part number pre-definition. Used in cmake build only. In e2s build, + * this macro is auto generated by device selection in FSP configurator */ +#define BSP_MCU_R7SA6W1CEDZDd + +#if defined(BSP_MCU_R7SA6W1AEDZDD) || defined(BSP_MCU_R7SA6W1AEDZNR) || defined(BSP_MCU_RRQ61051_208) + #define TIN_SKU_BUILD_ID TIN_SKU_WIFI4_B24 + #elif defined(BSP_MCU_R7SA6W1BEDZDD) || defined(BSP_MCU_R7SA6W1BEDZNR) || defined(BSP_MCU_RRQ61051_408) + #define TIN_SKU_BUILD_ID TIN_SKU_WIFI6_B24 + #elif defined(BSP_MCU_R7SA6W1CEDZDD) || defined(BSP_MCU_R7SA6W1CEDZNR) || defined(BSP_MCU_RRQ61001_008) || \ + defined(BSP_MCU_RRQ61001_009) || defined(BSP_MCU_RRQ61001_010) + #define TIN_SKU_BUILD_ID TIN_SKU_WIFI6_B24_5 + #elif defined(BSP_MCU_R7JA6W2DEDZNR) || defined(BSP_MCU_RRQ61051_008) || defined(BSP_MCU_RRQ61051_009) || \ + defined(BSP_MCU_RRQ61051_010) + #define TIN_SKU_BUILD_ID TIN_SKU_WIFI6_B24_5_BLE + #else +#define TIN_SKU_BUILD_ID TIN_SKU_WIFI6_B24_5 +#endif + +// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +#define CFG_PMGR FSP_NOT_DEFINED + +#define CFG_CLI (FSP_NOT_DEFINED) + +#define CFG_MBEDTLS (FSP_NOT_DEFINED) + +#define CFG_RTC_W (FSP_NOT_DEFINED) + +#define SUPPORT_FSP_RM_OTA_W (FSP_NOT_DEFINED) + +#if (1 == FSP_NOT_DEFINED) + #define RM_MAP_PERSISTANT_W + #endif + +#if (1 == FSP_NOT_DEFINED) + #define RM_STDIO_W + #endif + +#ifndef __SUPPORT_WIFI_USER_GPIO__ +#if (1 == 1) +#define __SUPPORT_WIFI_USER_GPIO__ (1) +#endif +#endif + +#if (1 == FSP_NOT_DEFINED) + #ifndef SUPPORT_FSP_RM_OTA_W + #define SUPPORT_FSP_RM_OTA_W (1) + #endif + #ifndef __SUPPORT_OTA__ + #define __SUPPORT_OTA__ (1) + #endif + #endif + +#ifndef CFG_WIFI +#if (1 == FSP_NOT_DEFINED) + #define CFG_WIFI (1) + #else +#define CFG_WIFI (0) +#endif +#endif + +#ifndef OS_FREERTOS +#define OS_FREERTOS /* Define this to use FreeRTOS */ +#endif + +#define CONFIG_PLL + +#define dg_configXTAL_BASED_CPU40M ( 0 ) +#define dg_configUSE_PM_STATISTICS ( 1 ) + +#ifndef dg_configSYSTEMVIEW +#define dg_configSYSTEMVIEW ( 0 ) +#endif + +#if (dg_configSYSTEMVIEW == 1) + #define dg_configSYSTEMVIEW_MONITOR_QUEUE ( 0 ) + #define dg_configSYSTEMVIEW_MONITOR_MALLOC ( 0 ) + #define dg_configSYSTEMVIEW_MONITOR_EVENT_GROUP ( 0 ) + #define dg_configSYSTEMVIEW_STUCK_UNTIL_ATTACH ( 0 ) + #endif + +#ifdef dg_configEXEC_MODE + #undef dg_configEXEC_MODE + #endif +#define dg_configEXEC_MODE MODE_IS_CACHED + +#ifdef dg_configCODE_LOCATION + #undef dg_configCODE_LOCATION + #endif +#define dg_configCODE_LOCATION NON_VOLATILE_IS_FLASH + +#ifndef dg_configUSE_ROMCRYPTO +#define dg_configUSE_ROMCRYPTO (1) +#endif + +#ifndef dg_configUSE_HW_OTPC +#define dg_configUSE_HW_OTPC ( 1 ) +#endif + +#ifndef dg_configUSE_HW_TIMER +#define dg_configUSE_HW_TIMER (1) +#endif + +#define BSP_CFG_OSPI_8_LINES_SUPPORT (0) + +#define BSP_LOCO_HZ (15000) +#define BSP_MOCO_HZ (512000) + +#define BSP_HOCO_HZ (32000000) +#define BSP_SUB_CLOCK_HZ (32768) +#define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U) +#define BSP_VECTOR_TABLE_MAX_ENTRIES (76U) + +#define BSP_RCX_HZ (32000) + +#ifndef BSP_CFG_PRODUCTION_BUILD +#define BSP_CFG_PRODUCTION_BUILD (0) +#endif +#ifndef BSP_CFG_DEBUGGER_ENABLE +#define BSP_CFG_DEBUGGER_ENABLE (1) +#endif +#ifndef BSP_CFG_CMAC_DEBUGGER_ENABLE +#define BSP_CFG_CMAC_DEBUGGER_ENABLE (0) +#endif +#ifndef BSP_CFG_SNC_DEBUGGER_ENABLE +#define BSP_CFG_SNC_DEBUGGER_ENABLE (0) +#endif +#ifndef BSP_CFG_DEBUG_CMN_TIMING +#define BSP_CFG_DEBUG_CMN_TIMING (1) +#endif +#ifndef BSP_CFG_PFS_PROTECT +#define BSP_CFG_PFS_PROTECT (0) +#endif + +#define BSP_CFG_IVT_COPY_ENABLE (0) + +#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 + +#define dg_configUSE_CLOCK_MGR (0U) + +/* 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 + +/* Type 1 Peripheral Security Attribution */ + +/* Peripheral Security Attribution Register (PSAR) Settings */ +#ifndef BSP_TZ_CFG_PSARB +#define BSP_TZ_CFG_PSARB (\ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 8) /* IIC1 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 9) /* IIC0 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 18) /* SPI1 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 19) /* SPI0 */ | \ + 0x07b3fcff) /* Unused */ +#endif +#ifndef BSP_TZ_CFG_PSARC +#define BSP_TZ_CFG_PSARC (\ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 0) /* CAC */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* CRC */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 13) /* DOC */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 20) /* TFU */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 21) /* IIRFA */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* CANFD */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 31) /* SCE5 */ | \ + 0x77cfdffc) /* Unused */ +#endif +#ifndef BSP_TZ_CFG_PSARD +#define BSP_TZ_CFG_PSARD (\ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 2) /* AGT1 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 3) /* AGT0 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* POEG3 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 12) /* POEG2 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 13) /* POEG1 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 14) /* POEG0 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 16) /* ADC120 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 19) /* DAC121 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 20) /* DAC120 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* TSN */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 25) /* ACMPHS3 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 26) /* ACMPHS2 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* ACMPHS1 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 28) /* ACMPHS0 */ | \ + 0xe1a687f3) /* Unused */ +#endif +#ifndef BSP_TZ_CFG_PSARE +#define BSP_TZ_CFG_PSARE (\ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* WDT */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 2) /* IWDT */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 4) /* KINT */ | \ + 0xffffffec) /* Unused */ +#endif +#ifndef BSP_TZ_CFG_MSSAR +#define BSP_TZ_CFG_MSSAR (\ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 0) /* ELC */ | \ + (((FSP_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 (\ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 0) | /* LVD Channel 1 */ \ + (((FSP_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 ((FSP_NOT_DEFINED > 0) ? 0xFFFFFCEAU : 0xFFFFFFFFU) +#endif +/* Deep Standby Interrupt Factor Security Attribution Register. */ +#ifndef BSP_TZ_CFG_DPFSAR +#define BSP_TZ_CFG_DPFSAR ((FSP_NOT_DEFINED > 0) ? 0xFFEC0000U : 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 (0xFFE1F482U) +#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 (FSP_NOT_DEFINED) +#endif + +/* Security attribution for registers for IRQ channels. */ +#ifndef BSP_TZ_CFG_ICUSARA +#define BSP_TZ_CFG_ICUSARA (\ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* External IRQ0 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 1U) /* External IRQ1 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 2U) /* External IRQ2 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 3U) /* External IRQ3 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 4U) /* External IRQ4 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 5U) /* External IRQ5 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 6U) /* External IRQ6 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 7U) /* External IRQ7 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 8U) /* External IRQ8 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 9U) /* External IRQ9 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 10U) /* External IRQ10 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 11U) /* External IRQ11 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 12U) /* External IRQ12 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 13U) /* External IRQ13 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 14U) /* External IRQ14 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 15U) /* External IRQ15 */ | \ + 0xFFFF0000U) +#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_DMASARA +#define BSP_TZ_CFG_DMASARA (\ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* DMAC Channel 0 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 1U) /* DMAC Channel 1 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 2U) /* DMAC Channel 2 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 3U) /* DMAC Channel 3 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 4U) /* DMAC Channel 4 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 5U) /* DMAC Channel 5 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 6U) /* DMAC Channel 6 */ | \ + (((FSP_NOT_DEFINED > 0) ? 0U : 1U) << 7U) /* DMAC Channel 7 */ | \ + 0xFFFFFF00U) +#endif + +/* Security attribution registers for WUPEN0. */ +#ifndef BSP_TZ_CFG_ICUSARE +#define BSP_TZ_CFG_ICUSARE ((FSP_NOT_DEFINED > 0) ? 0x00E2FFFFU : 0xFFFFFFFFU) +#endif + +/* Security attribution registers for WUPEN1. */ +#ifndef BSP_TZ_CFG_ICUSARF +#define BSP_TZ_CFG_ICUSARF ((FSP_NOT_DEFINED > 0) ? 0xFFFF80F7U : 0xFFFFFFFFU) +#endif + +/* Trusted Event Route Control Register for IELSR, DMAC.DELSR and ELC.ELSR. */ +#ifndef BSP_TZ_CFG_TEVTRCR +#define BSP_TZ_CFG_TEVTRCR (1) +#endif + +/* Set DTCSTSAR if the Secure program uses the DTC. */ +#if FSP_NOT_DEFINED == FSP_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_DMASARA) +#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 | (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) +#define OFS_SEQ2 (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) +#define OFS_SEQ3 (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) +#define OFS_SEQ4 (FSP_NOT_DEFINED) |(FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) +#define OFS_SEQ5 (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) +#define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5) + +#define BSP_CFG_ROM_REG_OFS2 ((FSP_NOT_DEFINED) | 0xFFFFFFFEU) + +/* Option Function Select Register 1 Security Attribution */ +#ifndef BSP_CFG_ROM_REG_OFS1_SEL +#if defined(_RA_TZ_SECURE) || defined(_RA_TZ_NONSECURE) + #define BSP_CFG_ROM_REG_OFS1_SEL (0xFCF0F0D0U | ((BSP_CFG_CLOCKS_SECURE == 0) ? 0xF00U : 0U) | ((FSP_NOT_DEFINED > 0) ? 0U : 0x2FU)) +#else +#define BSP_CFG_ROM_REG_OFS1_SEL (0xFCF0F0D0U) +#endif +#endif +#define BSP_CFG_ROM_REG_OFS1_INITECCEN (FSP_NOT_DEFINED) +#define BSP_CFG_ROM_REG_OFS1 (0xFCFFFED0 | (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) | (FSP_NOT_DEFINED) | (BSP_CFG_ROM_REG_OFS1_INITECCEN)) + +/* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */ +#define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector) + +/* Dual Mode Select Register */ +#ifndef BSP_CFG_ROM_REG_DUALSEL +#define BSP_CFG_ROM_REG_DUALSEL (0xFFFFFFF8U | (FSP_NOT_DEFINED)) +#endif + +/* Block Protection Register 0 */ +#ifndef BSP_CFG_ROM_REG_BPS0 +#define BSP_CFG_ROM_REG_BPS0 (~(FSP_NOT_DEFINED 0U)) +#endif +/* Block Protection Register 1 */ +#ifndef BSP_CFG_ROM_REG_BPS1 +#define BSP_CFG_ROM_REG_BPS1 (~(FSP_NOT_DEFINED 0U)) +#endif +/* Block Protection Register 2 */ +#ifndef BSP_CFG_ROM_REG_BPS2 +#define BSP_CFG_ROM_REG_BPS2 (~(FSP_NOT_DEFINED 0U)) +#endif +/* Block Protection Register 3 */ +#ifndef BSP_CFG_ROM_REG_BPS3 +#define BSP_CFG_ROM_REG_BPS3 (~(FSP_NOT_DEFINED 0U)) +#endif +/* Permanent Block Protection Register 0 */ +#ifndef BSP_CFG_ROM_REG_PBPS0 +#define BSP_CFG_ROM_REG_PBPS0 (~(FSP_NOT_DEFINED 0U)) +#endif +/* Permanent Block Protection Register 1 */ +#ifndef BSP_CFG_ROM_REG_PBPS1 +#define BSP_CFG_ROM_REG_PBPS1 (~(FSP_NOT_DEFINED 0U)) +#endif +/* Permanent Block Protection Register 2 */ +#ifndef BSP_CFG_ROM_REG_PBPS2 +#define BSP_CFG_ROM_REG_PBPS2 (~(FSP_NOT_DEFINED 0U)) +#endif +/* Permanent Block Protection Register 3 */ +#ifndef BSP_CFG_ROM_REG_PBPS3 +#define BSP_CFG_ROM_REG_PBPS3 (~(FSP_NOT_DEFINED 0U)) +#endif +/* Security Attribution for Block Protection Register 0 (If any blocks are marked as protected in the secure application, then mark them as secure) */ +#ifndef BSP_CFG_ROM_REG_BPS_SEL0 +#define BSP_CFG_ROM_REG_BPS_SEL0 (BSP_CFG_ROM_REG_BPS0 & BSP_CFG_ROM_REG_PBPS0) +#endif +/* Security Attribution for Block Protection Register 1 (If any blocks are marked as protected in the secure application, then mark them as secure) */ +#ifndef BSP_CFG_ROM_REG_BPS_SEL1 +#define BSP_CFG_ROM_REG_BPS_SEL1 (BSP_CFG_ROM_REG_BPS1 & BSP_CFG_ROM_REG_PBPS1) +#endif +/* Security Attribution for Block Protection Register 2 (If any blocks are marked as protected in the secure application, then mark them as secure) */ +#ifndef BSP_CFG_ROM_REG_BPS_SEL2 +#define BSP_CFG_ROM_REG_BPS_SEL2 (BSP_CFG_ROM_REG_BPS2 & BSP_CFG_ROM_REG_PBPS2) +#endif +/* Security Attribution for Block Protection Register 3 (If any blocks are marked as protected in the secure application, then mark them as secure) */ +#ifndef BSP_CFG_ROM_REG_BPS_SEL3 +#define BSP_CFG_ROM_REG_BPS_SEL3 (BSP_CFG_ROM_REG_BPS3 & BSP_CFG_ROM_REG_PBPS3) +#endif +#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT +#define BSP_CLOCK_CFG_MAIN_OSC_WAIT (FSP_NOT_DEFINED) +#endif +#endif /* BSP_MCU_FAMILY_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h new file mode 100644 index 000000000000..675955a03e16 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h @@ -0,0 +1,5 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_OFS_CFG_H_ +#define BSP_MCU_OFS_CFG_H_ + +#endif /* BSP_MCU_OFS_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_pin_cfg.h new file mode 100644 index 000000000000..c4eb21d4c600 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/bsp/bsp_pin_cfg.h @@ -0,0 +1,18 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_PIN_CFG_H_ +#define BSP_PIN_CFG_H_ +#include "r_gpio_w.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +extern const ioport_cfg_t g_bsp_pin_cfg; /* RRQ61xxx-EVB */ +#if !defined(BSP_MCU_GROUP_RA6W1) //TIN-TODO +extern gpio_w_extended_cfg_t g_bsp_pin_cfg_extd; /* RRQ61xxx-EVB_extd */ +#endif + +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/ra6w1-ek/rafw_cfg/fsp_cfg/r_ext_irq_w_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_ext_irq_w_cfg.h new file mode 100644 index 000000000000..1a4b652aa0af --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_ext_irq_w_cfg.h @@ -0,0 +1,13 @@ +/* generated configuration header file - do not edit */ +#ifndef R_EXT_IRQ_W_CFG_H_ +#define R_EXT_IRQ_W_CFG_H_ +#ifdef __cplusplus +extern "C" { +#endif + +#define EXT_IRQ_W_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE) + +#ifdef __cplusplus +} +#endif +#endif /* R_EXT_IRQ_W_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_gpio_w_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_gpio_w_cfg.h new file mode 100644 index 000000000000..e3d09d8292f6 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_gpio_w_cfg.h @@ -0,0 +1,13 @@ +/* generated configuration header file - do not edit */ +#ifndef R_GPIO_W_CFG_H_ +#define R_GPIO_W_CFG_H_ +#ifdef __cplusplus +extern "C" { +#endif + +#define GPIO_W_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE) + +#ifdef __cplusplus +} +#endif +#endif /* R_GPIO_W_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_uart_w_cfg.h b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_uart_w_cfg.h new file mode 100644 index 000000000000..563610cb9e57 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_cfg/fsp_cfg/r_uart_w_cfg.h @@ -0,0 +1,15 @@ +/* generated configuration header file - do not edit */ +#ifndef R_UART_W_CFG_H_ +#define R_UART_W_CFG_H_ +#ifdef __cplusplus + extern "C" { + #endif + +#define UART_W_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE) +#define UART_W_DMA_SUPPORT_ENABLE (0) +#define UART_W_CTRL_FLOW_CONTROL_SUPPORT FSP_NOT_DEFINED + +#ifdef __cplusplus + } + #endif +#endif /* R_UART_W_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_gen/SConscript b/bsp/renesas/ra6w1-ek/rafw_gen/SConscript new file mode 100644 index 000000000000..180db757ac47 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_gen/SConscript @@ -0,0 +1,18 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = [] +group = [] +CPPPATH = [] + +if rtconfig.PLATFORM in ['iccarm']: + print("\nThe current project does not support IAR build\n") + Return('group') +elif rtconfig.PLATFORM in ['gcc', 'armclang']: + src = Glob('*.c') + CPPPATH = [cwd] + +group = DefineGroup('ra_gen', src, depend = [''], CPPPATH = CPPPATH) +Return('group') diff --git a/bsp/renesas/ra6w1-ek/rafw_gen/bsp_clock_cfg.h b/bsp/renesas/ra6w1-ek/rafw_gen/bsp_clock_cfg.h new file mode 100644 index 000000000000..7d3fcb7840ce --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_gen/bsp_clock_cfg.h @@ -0,0 +1,30 @@ +/* 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_XTALM_HZ (40000000) /* XTAL 40MHz */ +#define BSP_CFG_XTALK_HZ (32768) /* XTAL 32768Hz */ +#define BSP_RCX_HZ (32000) /* RCX 32kHz */ +#define BSP_CFG_PLL480M_HZ (480000000) /* PLL 480MHz */ +#define BSP_CFG_XTAL40M_CLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_XTALM) /* XTAL40M_CLK Enabled */ +#define BSP_CFG_XTAL_CLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_XTALK) /* XTAL_CLK Enabled */ +#define BSP_CFG_RCX_CLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_RCX) /* RCX_CLK Enabled */ +#define BSP_CFG_PLL_CLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_XTALM) /* PLL Src: XTAL40M */ +#define BSP_CFG_PLL_MUL (BSP_CLOCKS_PLL_CLOCK_MUL_12_1) /* PLL Mul 12/1 */ +#define BSP_CFG_LP_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_XTALK) /* LP_CLK Src: XTAL */ +#define BSP_CFG_PLL_SYS_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL) /* PLL_SYS Src: PLL */ +#define BSP_CFG_PLL_SYS_MUL (BSP_CLOCKS_PLL_SYS_CLOCK_MUL_1_3) /* PLL_SYS Mul 1/3 */ +#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL) /* SYS_CLK Src: PLL_SYS */ +#define BSP_CFG_HCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* HCLK Div /1 */ +#define BSP_CFG_QSPICLK_DIV (BSP_CLOCKS_QSPI_CLK_DIV_2) /* QSPICLK Div /2 */ +#define BSP_CFG_PLL_SPI_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* PLL_SPI Disabled */ +#define BSP_CFG_PLL_SPI_MUL (BSP_CLOCKS_PLL_SPI_CLOCK_MUL_1_6) /* PLL_SPI Mul 1/6 */ +#define BSP_CFG_SPICLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_XTAL_SYS) /* SPI_CLK Src: XTAL_SYS */ +#define BSP_CFG_PLL_PERI_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL) /* PLL_PERI Src: PLL */ +#define BSP_CFG_PLL_PERI_DIV (BSP_CLOCKS_PLL_PERI_CLOCK_DIV_1_6) /* PLL_PERI Div /6 */ +#define BSP_CFG_PERI_CLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_XTAL_SYS) /* PERI_CLK Src: XTAL_SYS */ +#define BSP_CFG_I2C1CLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_DIV1) /* I2C1 Div /1 */ +#define BSP_CFG_I2C2CLK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_DIV1) /* I2C2 Div /1 */ +#define BSP_CFG_WDOG_DIV (BSP_CLOCKS_WDOG_DIV_320) /* WDOG Div /320 */ +#endif /* BSP_CLOCK_CFG_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_gen/common_data.c b/bsp/renesas/ra6w1-ek/rafw_gen/common_data.c new file mode 100644 index 000000000000..86ff4994ec7a --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_gen/common_data.c @@ -0,0 +1,7 @@ +/* generated common source file - do not edit */ +#include "common_data.h" +gpio_w_instance_ctrl_t g_gpio_w_ctrl; +const ioport_instance_t g_gpio_w = { .p_api = &g_ioport_on_gpio_w, .p_ctrl = + &g_gpio_w_ctrl, .p_cfg = &g_bsp_pin_cfg, }; +void g_common_init(void) { +} diff --git a/bsp/renesas/ra6w1-ek/rafw_gen/common_data.h b/bsp/renesas/ra6w1-ek/rafw_gen/common_data.h new file mode 100644 index 000000000000..88563494ee40 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_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_gpio_w.h" +#include "bsp_pin_cfg.h" +FSP_HEADER +#define IOPORT_CFG_NAME g_bsp_pin_cfg +#define IOPORT_CFG_OPEN R_GPIO_W_Open +#define IOPORT_CFG_CTRL g_gpio_w_ctrl + +/* GPIO_W Instance */ +extern const ioport_instance_t g_gpio_w; + +/* GPIO_W control structure. */ +extern gpio_w_instance_ctrl_t g_gpio_w_ctrl; +void g_common_init(void); +FSP_FOOTER +#endif /* COMMON_DATA_H_ */ diff --git a/bsp/renesas/ra6w1-ek/rafw_gen/hal_data.c b/bsp/renesas/ra6w1-ek/rafw_gen/hal_data.c new file mode 100644 index 000000000000..f2e6b10bd5c9 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_gen/hal_data.c @@ -0,0 +1,47 @@ +/* generated HAL source file - do not edit */ +#include "hal_data.h" +uart_w_instance_ctrl_t g_uart1_ctrl; +/** UART_W extended configuration for UART HAL driver */ +uart_w_baud_setting_t g_uart1_baud_setting = { .fra_baud = 26, .int_baud = 43 }; + +/** UART extended configuration for UART_W HAL driver */ +const uart_w_extended_cfg_t g_uart1_cfg_extend = + { .fifo_enable = UART_W_FIFO_ENABLE, .rx_fifo_trigger = + UART_W_RX_FIFO_TRIGGER_SEVEN_EIGHTHS, .tx_fifo_trigger = + UART_W_TX_FIFO_TRIGGER_EIGHTH, .p_baud_setting = + &g_uart1_baud_setting, .flow_control = + UART_W_AUTO_FLOW_CONTROL_DISABLED, .loop_back_enable = + UART_W_LOOP_BACK_DISABLE, .rs485_enable = UART_W_RS485_DISABLE, }; + +/** UART interface configuration */ +const uart_cfg_t g_uart1_cfg = { .channel = 1 - UART_W_CHANNEL_OFFSET, + .data_bits = UART_W_DATA_BITS_8, .parity = UART_PARITY_OFF, .stop_bits = + UART_STOP_BITS_1, .p_callback = user_uart0_callback, .p_context = + NULL, .p_extend = &g_uart1_cfg_extend, +#define FSP_NOT_DEFINED (1) +#if (FSP_NOT_DEFINED == FSP_NOT_DEFINED) + .p_transfer_tx = NULL, +#else + .p_transfer_tx = &FSP_NOT_DEFINED, +#endif +#if (FSP_NOT_DEFINED == FSP_NOT_DEFINED) + .p_transfer_rx = NULL, +#else + .p_transfer_rx = &FSP_NOT_DEFINED, +#endif +#undef FSP_NOT_DEFINED + .rxi_ipl = (12), +#if defined(VECTOR_NUMBER_UARTW1_IRQ) + .rxi_irq = VECTOR_NUMBER_UARTW1_IRQ, +#else + .rxi_irq = FSP_INVALID_VECTOR, +#endif + + }; + +/* Instance structure to use this module. */ +const uart_instance_t g_uart1 = { .p_ctrl = &g_uart1_ctrl, + .p_cfg = &g_uart1_cfg, .p_api = &g_uart_on_uart_w }; +void g_hal_init(void) { + g_common_init(); +} diff --git a/bsp/renesas/ra6w1-ek/rafw_gen/hal_data.h b/bsp/renesas/ra6w1-ek/rafw_gen/hal_data.h new file mode 100644 index 000000000000..32c889808291 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_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_uart_w.h" +#include "r_uart_api.h" +FSP_HEADER +/** UART_W Instance. */ +extern const uart_instance_t g_uart1; + +/** Access the UART instance using these structures when calling API functions directly (::p_api is not used). */ +extern uart_w_instance_ctrl_t g_uart1_ctrl; +extern const uart_cfg_t g_uart1_cfg; +extern const uart_w_extended_cfg_t g_uart1_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/ra6w1-ek/rafw_gen/main.c b/bsp/renesas/ra6w1-ek/rafw_gen/main.c new file mode 100644 index 000000000000..a36b37275936 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_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/ra6w1-ek/rafw_gen/pin_data.c b/bsp/renesas/ra6w1-ek/rafw_gen/pin_data.c new file mode 100644 index 000000000000..8b8eec63a0f7 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_gen/pin_data.c @@ -0,0 +1,100 @@ +/* generated pin source file - do not edit */ +#include "bsp_api.h" +#include "r_gpio_w.h" + +const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = { { .pin = BSP_IO_PORT_00_PIN_00, + .pin_cfg = (GPIO_W_CFG_DRV_8mA | GPIO_W_CFG_PERIPHERAL_PIN + | GPIO_W_CFG_PORT_DIRECTION_INPUT | GPIO_W_CFG_SLW_FAST + | GPIO_W_PERIPHERAL_UART_RX) }, { .pin = BSP_IO_PORT_00_PIN_01, + .pin_cfg = (GPIO_W_CFG_DRV_8mA | GPIO_W_CFG_PERIPHERAL_PIN + | GPIO_W_CFG_PORT_DIRECTION_OUTPUT | GPIO_W_CFG_SLW_SLOW + | GPIO_W_PERIPHERAL_UART_TX) }, { .pin = BSP_IO_PORT_00_PIN_02, + .pin_cfg = (GPIO_W_CFG_ANALOG_ENABLE | GPIO_W_CFG_DRV_8mA + | GPIO_W_CFG_SLW_SLOW) }, { .pin = BSP_IO_PORT_00_PIN_03, + .pin_cfg = (GPIO_W_CFG_ANALOG_ENABLE | GPIO_W_CFG_DRV_8mA + | GPIO_W_CFG_SLW_SLOW) }, { .pin = BSP_IO_PORT_00_PIN_10, + .pin_cfg = (GPIO_W_CFG_DRV_8mA | GPIO_W_CFG_PORT_DIRECTION_OUTPUT + | GPIO_W_CFG_PORT_OUTPUT_LOW | GPIO_W_CFG_SLW_SLOW) }, { .pin = + BSP_IO_PORT_01_PIN_00, .pin_cfg = (GPIO_W_CFG_DRV_8mA + | GPIO_W_CFG_PORT_DIRECTION_OUTPUT | GPIO_W_CFG_PORT_OUTPUT_LOW + | GPIO_W_CFG_SLW_SLOW) }, { .pin = BSP_IO_PORT_01_PIN_01, .pin_cfg = + (GPIO_W_CFG_DRV_8mA | GPIO_W_CFG_PORT_DIRECTION_OUTPUT + | GPIO_W_CFG_PORT_OUTPUT_LOW | GPIO_W_CFG_SLW_SLOW) }, { .pin = + BSP_IO_PORT_01_PIN_02, .pin_cfg = (GPIO_W_CFG_DRV_8mA + | GPIO_W_CFG_PORT_DIRECTION_OUTPUT | GPIO_W_CFG_PORT_OUTPUT_LOW + | GPIO_W_CFG_SLW_SLOW) }, { .pin = BSP_IO_PORT_01_PIN_03, .pin_cfg = + (GPIO_W_CFG_DRV_8mA | GPIO_W_CFG_PORT_DIRECTION_OUTPUT + | GPIO_W_CFG_PORT_OUTPUT_LOW | GPIO_W_CFG_SLW_SLOW) }, { .pin = + BSP_IO_PORT_01_PIN_16, .pin_cfg = (GPIO_W_CFG_PERIPHERAL_PIN + | GPIO_W_CFG_PORT_DIRECTION_INPUT | GPIO_W_PERIPHERAL_SWCLK) }, { .pin = + BSP_IO_PORT_01_PIN_17, .pin_cfg = (GPIO_W_CFG_PERIPHERAL_PIN + | GPIO_W_CFG_PORT_DIRECTION_INPUT | GPIO_W_PERIPHERAL_SWDIO) }, }; + +#if !defined(BSP_MCU_GROUP_RA6W1) //TIN-TODO +gpio_w_extended_cfg_t g_bsp_pin_cfg_extd = { .power.p1_pwr = + GPIO_W_CFG_SUPPLY_V30, +#if BSP_FEATURE_IO_HAS_WEAK_CONFIG_PER_PORT + .weak_pad_power = + { + .p0_pwr = GPIO_W_CFG_DRV_NORMAL, + .p1_pwr = GPIO_W_CFG_DRV_NORMAL, + #if BSP_FEATURE_IO_PORT2_GPIO_COUNT > 0 + .p2_pwr = GPIO_W_CFG_DRV_NORMAL, + #endif + }, +#else + .weak_pad_power.aggregate = GPIO_W_CFG_DRV_NORMAL, +#endif + .fixed_pin_clk_out = BSP_IO_CLK_NONE_OUT, +#if BSP_CFG_CLKOUT_SOURCE + .sel_pin_clk_out.clk_en = 1, + .sel_pin_clk_out.clk_sel = BSP_CFG_CLKOUT_SOURCE - 1, +#else + .sel_pin_clk_out.clk_en = 0, .sel_pin_clk_out.clk_sel = + (bsp_io_clk_func_t) 0, +#endif + }; +#endif + +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 !defined(BSP_MCU_GROUP_RA6W1) //TIN-TODO + .p_extend = &g_bsp_pin_cfg_extd, +#endif + }; + +#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/ra6w1-ek/rafw_gen/vector_data.c b/bsp/renesas/ra6w1-ek/rafw_gen/vector_data.c new file mode 100644 index 000000000000..2652fdaef8aa --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_gen/vector_data.c @@ -0,0 +1,22 @@ +/* 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 BSP_FEATURE_BSP_HAS_ICU + #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] = uart_w_isr, /* UARTW1 IRQ (Generic interrupt) */ + }; + const bsp_interrupt_event_t g_interrupt_event_link_select[BSP_ICU_VECTOR_MAX_ENTRIES] = + { + [0] = BSP_PRV_IELS_ENUM(EVENT_UARTW1_IRQ), /* UARTW1 IRQ (Generic interrupt) */ + }; + #endif + #else +BSP_DONT_REMOVE const fsp_vector_t g_vector_table[BSP_IRQ_VECTOR_MAX_ENTRIES] BSP_PLACE_IN_SECTION(BSP_SECTION_APPLICATION_VECTORS) = +{ +#if VECTOR_DATA_IRQ_COUNT > 0 + [2] = uart_w_isr, /* UARTW1 IRQ (Generic interrupt) */ + #endif +}; +#endif diff --git a/bsp/renesas/ra6w1-ek/rafw_gen/vector_data.h b/bsp/renesas/ra6w1-ek/rafw_gen/vector_data.h new file mode 100644 index 000000000000..c6ccaacd440e --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rafw_gen/vector_data.h @@ -0,0 +1,25 @@ +/* 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 (1) +#endif +/* ISR prototypes */ +void uart_w_isr(void); +#if defined(BSP_MCU_GROUP_RA6B1) || defined(BSP_MCU_GROUP_RA6U1) //BROMINE-TODO + /* Vector table allocations */ + #define VECTOR_NUMBER_UARTW1_IRQ ((IRQn_Type) 0) /* UARTW1 IRQ (Generic interrupt) */ + #define UARTW1_IRQ_IRQn ((IRQn_Type) 0) /* UARTW1 IRQ (Generic interrupt) */ +#else +/* Vector table allocations */ +#define VECTOR_NUMBER_UARTW1_IRQ ((IRQn_Type) 2) /* UARTW1 IRQ (Generic interrupt) */ +#define UARTW1_IRQ_IRQn ((IRQn_Type) 2) /* UARTW1 IRQ (Generic interrupt) */ +#endif +#ifdef __cplusplus + } + #endif +#endif /* VECTOR_DATA_H */ diff --git a/bsp/renesas/ra6w1-ek/rtconfig.h b/bsp/renesas/ra6w1-ek/rtconfig.h new file mode 100644 index 000000000000..f13cfde9ecb7 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rtconfig.h @@ -0,0 +1,430 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +#define SOC_R7SA6W1CED + +/* RT-Thread Kernel */ + +/* klibc options */ + +/* rt_vsnprintf options */ + +/* end of rt_vsnprintf options */ + +/* rt_vsscanf options */ + +/* end of rt_vsscanf options */ + +/* rt_memset options */ + +/* end of rt_memset options */ + +/* rt_memcpy options */ + +/* end of rt_memcpy options */ + +/* rt_memmove options */ + +/* end of rt_memmove options */ + +/* rt_memcmp options */ + +/* end of rt_memcmp options */ + +/* rt_strstr options */ + +/* end of rt_strstr options */ + +/* rt_strcasecmp options */ + +/* end of rt_strcasecmp options */ + +/* rt_strncpy options */ + +/* end of rt_strncpy options */ + +/* rt_strcpy options */ + +/* end of rt_strcpy options */ + +/* rt_strncmp options */ + +/* end of rt_strncmp options */ + +/* rt_strcmp options */ + +/* end of rt_strcmp options */ + +/* rt_strlen options */ + +/* end of rt_strlen options */ + +/* rt_strnlen options */ + +/* end of rt_strnlen options */ +/* end of klibc options */ +#define RT_NAME_MAX 12 +#define RT_CPUS_NR 1 +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 4 +#define RT_TIMER_THREAD_STACK_SIZE 512 + +/* kservice options */ + +/* end of kservice options */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP +/* end of Memory Management */ +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart0" +#define RT_USING_CONSOLE_OUTPUT_CTL +#define RT_VER_NUM 0x50300 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ +#define RT_USING_HW_ATOMIC +#define ARCH_USING_HW_ATOMIC_8 +#define ARCH_USING_HW_ATOMIC_16 +#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_BUF_STRATEGY_OVERWRITE +#define RT_SERIAL_USING_DMA +#define RT_USING_PIN +/* end of Device Drivers */ + +/* C/C++ and POSIX layer */ + +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 +/* end of Timezone and Daylight Saving Time */ +/* end of ISO-ANSI C layer */ + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* end of Interprocess Communication (IPC) */ +/* end of POSIX (Portable Operating System Interface) layer */ +/* end of C/C++ and POSIX layer */ + +/* Network */ + +/* end of Network */ + +/* Memory protection */ + +/* end of Memory protection */ + +/* Utilities */ + +/* end of Utilities */ + +/* Using USB legacy version */ + +/* end of Using USB legacy version */ +/* end of RT-Thread Components */ + +/* RT-Thread Utestcases */ + +/* end of RT-Thread Utestcases */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ + +/* CYW43012 WiFi */ + +/* end of CYW43012 WiFi */ + +/* BL808 WiFi */ + +/* end of BL808 WiFi */ + +/* CYW43439 WiFi */ + +/* end of CYW43439 WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* XML: Extensible Markup Language */ + +/* end of XML: Extensible Markup Language */ +/* end of language packages */ + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + +/* end of LVGL: powerful and easy-to-use embedded GUI library */ + +/* u8g2: a monochrome graphic library */ + +/* end of u8g2: a monochrome graphic library */ +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* enhanced kernel services */ + +/* end of enhanced kernel services */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* HAL & SDK Drivers */ + +/* STM32 HAL & SDK Drivers */ + +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ + +/* WCH HAL & SDK Drivers */ + +/* end of WCH HAL & SDK Drivers */ + +/* AT32 HAL & SDK Drivers */ + +/* end of AT32 HAL & SDK Drivers */ + +/* HC32 DDL Drivers */ + +/* end of HC32 DDL Drivers */ + +/* NXP HAL & SDK Drivers */ + +/* end of NXP HAL & SDK Drivers */ + +/* NUVOTON Drivers */ + +/* end of NUVOTON Drivers */ + +/* GD32 Drivers */ + +/* end of GD32 Drivers */ + +/* HPMicro SDK */ + +/* end of HPMicro SDK */ + +/* FT32 HAL & SDK Drivers */ + +/* end of FT32 HAL & SDK Drivers */ + +/* NOVOSNS Drivers */ + +/* end of NOVOSNS Drivers */ +/* end of HAL & SDK Drivers */ + +/* sensors drivers */ + +/* end of sensors drivers */ + +/* touch drivers */ + +/* end of touch drivers */ +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* Signal Processing and Control Algorithm Packages */ + +/* end of Signal Processing and Control Algorithm Packages */ + +/* miscellaneous packages */ + +/* project laboratory */ + +/* end of project laboratory */ + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +/* end of miscellaneous packages */ + +/* Arduino libraries */ + + +/* Projects and Demos */ + +/* end of Projects and Demos */ + +/* Sensors */ + +/* end of Sensors */ + +/* Display */ + +/* end of Display */ + +/* Timing */ + +/* end of Timing */ + +/* Data Processing */ + +/* end of Data Processing */ + +/* Data Storage */ + +/* Communication */ + +/* end of Communication */ + +/* Device Control */ + +/* end of Device Control */ + +/* Other */ + +/* end of Other */ + +/* Signal IO */ + +/* end of Signal IO */ + +/* Uncategorized */ + +/* end of Arduino libraries */ +/* end of RT-Thread online packages */ +#define SOC_FAMILY_RENESAS_RA_WIRELESS +#define SOC_SERIES_R7SA6W1 + +/* Hardware Drivers Config */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO_W +#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 */ +/* end of Hardware Drivers Config */ + +#endif diff --git a/bsp/renesas/ra6w1-ek/rtconfig.py b/bsp/renesas/ra6w1-ek/rtconfig.py new file mode 100644 index 000000000000..d014992f03d8 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/rtconfig.py @@ -0,0 +1,103 @@ +import os +import sys + +# toolchains options +ARCH='arm' +CPU='cortex-m33' +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' + POST_ACTION += 'python3 scripts/gen_rrq61_flash_image.py rtthread.bin rtthread.img.bin RA6W1-RRQ61001\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/ra6w1-ek/script/fsp.ld b/bsp/renesas/ra6w1-ek/script/fsp.ld new file mode 100644 index 000000000000..55e7ceb358f8 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/script/fsp.ld @@ -0,0 +1,385 @@ +INCLUDE memory_regions.ld +MEMORY +{ + RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH + RAMCODE (rx) : ORIGIN = RAMCODE_START, LENGTH = RAMCODE_LENGTH + FLASH (rx) : ORIGIN = FLASH_START, LENGTH = FLASH_LENGTH + IPDRAM (rwx) : ORIGIN = IPDRAM_START, LENGTH = IPDRAM_LENGTH + FRAGRAM (rwx) : ORIGIN = FRAGRAM_START, LENGTH = FRAGRAM_LENGTH + MACHW_MIB (rwx) : ORIGIN = MACHW_MIB_START, LENGTH = MACHW_MIB_LENGTH +} + +/* code entry point...need to define to keep crt0 _start out */ +ENTRY( Reset_Handler) +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a) + +SECTIONS +{ + /***** FLASH memory section allocations ******/ + .flash.startof (READONLY) : + { + __ddsc_FLASH_START = .; + __ROM_Start = .; + + }> FLASH + /* MCU vector table */ + __flash_vectors$$ (READONLY) : + { + __flash_vectors$$Base = .; _VECTORS = .; + PROVIDE(__Vectors = .); + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + __flash_vectors$$Limit = .; + }> FLASH + __Vectors_Size = __Vectors_End - __flash_vectors$$Base; + __flash_noinit$$ (NOLOAD) : + { + __flash_noinit$$Base = .; + /* section.flash.noinit */ + *(.flash_noinit) + __flash_noinit$$Limit = .; + }> FLASH + /***** IPDRAM memory section allocations ******/ + .ipdram.startof : + { + __ddsc_IPDRAM_START = .; + + }> IPDRAM + /* ipdram initialized from flash */ + __ipdram_from_flash$$ : ALIGN(4) + { + __ipdram_from_flash$$Base = .;__ipdram_from_flash$$Load = LOADADDR(__ipdram_from_flash$$); + /* section.ipdram.from_flash */ + *(.ipdram_from_flash) + /* section.ipdram.code_from_flash */ + *(.ipdram_code_from_flash) + . = ALIGN(4); + __ipdram_from_flash$$Limit = .; + }> IPDRAM AT > FLASH + /* Non-initialized ipdram */ + __ipdram_noinit$$ (NOLOAD) : + { + __ipdram_noinit$$Base = .; + /* section.ipdram.noinit */ + *(.ipdram_noinit) + __ipdram_noinit$$Limit = .; + }> IPDRAM + /* Zeroed ipdram */ + __ipdram_zero$$ (NOLOAD) : ALIGN(4) + { + __ipdram_zero$$Base = .; + /* section.ipdram.zero */ + *(.ipdram) + . = ALIGN(4); + __ipdram_zero$$Limit = .; + }> IPDRAM + .ipdram.endof ALIGN(.,512) : + { + __ddsc_IPDRAM_END = .; + + }> IPDRAM + + /***** FRAGRAM memory section allocations ******/ + .fragram.startof : + { + __ddsc_FRAGRAM_START = .; + + }> FRAGRAM + /* fragram initialized from flash */ + __fragram_from_flash$$ : ALIGN(4) + { + __fragram_from_flash$$Base = .;__fragram_from_flash$$Load = LOADADDR(__fragram_from_flash$$); + /* section.fragram.from_flash */ + *(.fragram_from_flash) + /* section.fragram.code_from_flash */ + *(.fragram_code_from_flash) + . = ALIGN(4); + __fragram_from_flash$$Limit = .; + }> FRAGRAM AT > FLASH + /* Non-initialized fragram */ + __fragram_noinit$$ (NOLOAD) : + { + __fragram_noinit$$Base = .; + /* section.fragram.noinit */ + *(.fragram_noinit) + __fragram_noinit$$Limit = .; + }> FRAGRAM + /* Zeroed fragram */ + __fragram_zero$$ (NOLOAD) : ALIGN(4) + { + __fragram_zero$$Base = .; + /* section.fragram.zero */ + *(.fragram) + . = ALIGN(4); + __fragram_zero$$Limit = .; + }> FRAGRAM + .fragram.endof ALIGN(.,512) : + { + __ddsc_FRAGRAM_END = .; + + }> FRAGRAM + + /***** MACHW_MIB memory section allocations ******/ + .machw_mib.startof : + { + __ddsc_MACHW_MIB_START = .; + + }> MACHW_MIB + /* machw_mib initialized from flash */ + __machw_mib_from_flash$$ : ALIGN(4) + { + __machw_mib_from_flash$$Base = .;__machw_mib_from_flash$$Load = LOADADDR(__machw_mib_from_flash$$); + /* section.machw_mib.from_flash */ + *(.machw_mib_from_flash) + /* section.machw_mib.code_from_flash */ + *(.machw_mib_code_from_flash) + . = ALIGN(4); + __machw_mib_from_flash$$Limit = .; + }> MACHW_MIB AT > FLASH + /* Non-initialized machw_mib */ + __machw_mib_noinit$$ (NOLOAD) : + { + __machw_mib_noinit$$Base = .; + /* section.machw_mib.noinit */ + *(.machw_mib_noinit) + __machw_mib_noinit$$Limit = .; + }> MACHW_MIB + /* Zeroed machw_mib */ + __machw_mib_zero$$ (NOLOAD) : ALIGN(4) + { + __machw_mib_zero$$Base = .; + /* section.machw_mib.zero */ + *(.machw_mib) + . = ALIGN(4); + __machw_mib_zero$$Limit = .; + }> MACHW_MIB + .machw_mib.endof ALIGN(.,512) : + { + __ddsc_MACHW_MIB_END = .; + + }> MACHW_MIB + + /***** RAM memory section allocations ******/ + .ram.startof : + { + __ddsc_RAM_START = .; + + }> RAM + __ram_dtc_vector$$ (NOLOAD) : + { + __ram_dtc_vector$$Base = .; + *(.fsp_dtc_vector_table) + __ram_dtc_vector$$Limit = .; + }> RAM + /* ram initialized from flash */ + __ram_from_flash$$ : ALIGN(4) + { + __ram_from_flash$$Base = .;__ram_from_flash$$Load = LOADADDR(__ram_from_flash$$); + __data_start__ = .; + /* section.ram.from_flash */ + *(.ram_from_flash) + *(.data*) + *(vtable) + . = ALIGN(4); + __data_end__ = .; + __ram_from_flash$$Limit = .; + }> RAM AT > FLASH + __etext = LOADADDR(__ram_from_flash$$); + /* Main Stack */ + __ram_main_stack$$ (NOLOAD) : + { + __ram_main_stack$$Base = .; + /* section.ram.main_stack */ + *(.bss.g_main_stack) + __ram_main_stack$$Limit = .; + }> RAM + /* Non-initialized ram */ + __ram_noinit$$ (NOLOAD) : + { + __ram_noinit$$Base = .; + /* section.ram.noinit */ + *(.bss.g_heap) + *(.ram_noinit) + *(.noinit) + __ram_noinit$$Limit = .; + }> RAM + /* Zeroed ram */ + __ram_zero$$ (NOLOAD) : ALIGN(4) + { + __ram_zero$$Base = .; + __bss_start__ = .; + /* section.ram.zero */ + *(.ram) + *(.bss*) + . = ALIGN(4); + __bss_end__ = .; + __ram_zero$$Limit = .; + }> RAM + /* Thread Stacks */ + __ram_thread_stack$$ (NOLOAD) : ALIGN(8) + { + __ram_thread_stack$$Base = .; + KEEP(*(.stack?*)) + __ram_thread_stack$$Limit = .; + }> RAM + .ram.endof ALIGN(.,512) : + { + __ddsc_RAM_END = .; + + }> RAM + + __flash_readonly$$ (READONLY) : + { + __flash_readonly$$Base = .; + /* section.flash.readonly */ + *(.flash) + /* section.flash.code */ + *(.flash_code) + *(.text*) + *(.rodata*) + KEEP(*(.mcuboot_sce9_key)) + KEEP(*(.version)) + KEEP(*(.init)) + KEEP(*(.fini)) + + /* RT-Thread metadata must live in normal flash, not in the MCU vector table. */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + . = ALIGN(4); + __rt_utest_tc_tab_start = .; + KEEP(*(UtestTcTab)) + __rt_utest_tc_tab_end = .; + + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + KEEP(*(FalPartTable)) + __flash_readonly$$Limit = .; + }> FLASH + __flash_ctor$$ (READONLY) : + { + + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + EXCLUDE_FILE (*crtend?.o *crtend.o) *(.ctors) + *(SORT(.ctors.*)) + *(.ctors) + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + EXCLUDE_FILE (*crtend?.o *crtend.o) *(.dtors) + *(SORT(.dtors.*)) + *(.dtors) + + }> FLASH + __flash_preinit_array$$ (READONLY) : + { + __preinit_array_start = .; + KEEP(*(.preinit_array)) + __preinit_array_end = .; + }> FLASH + __flash_.got$$ (READONLY) : + { + + *(.got.plt) + *(.got) + + }> FLASH + __flash_init_array$$ (READONLY) : + { + __init_array_start = .; + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + __init_array_end = .; + }> FLASH + __flash_fini_array$$ (READONLY) : + { + __fini_array_start = .; + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + __fini_array_end = .; + }> FLASH + /* .ARM.extab sections contain exception unwinding information. */ + __flash_arm.extab$$ (READONLY) : + { + + *(.ARM.extab*) + *(.gnu.linkonce.armextab.*) + + }> FLASH + /* .ARM.exidx sections contains index entries for section unwinding. */ + __flash_arm.exidx$$ (READONLY) : + { + __exidx_start = .; + *(.ARM.exidx*) + *(.gnu.linkonce.armexidx.*) + __exidx_end = .; + }> FLASH + .flash.endof ALIGN(.,512) (READONLY) : + { + __ddsc_FLASH_END = .; + __ROM_End = .; + + }> FLASH + + /***** RAMCODE memory section allocations ******/ + .ramcode.startof (READONLY) : + { + + . += __ddsc_RAM_END - __ddsc_RAM_START; __ddsc_RAMCODE_START = .; + + }> RAMCODE + /* ramcode initialized from flash */ + __ramcode_from_flash$$ (READONLY) : + { + __ramcode_from_flash$$Base = .;__ramcode_from_flash$$Load = LOADADDR(__ramcode_from_flash$$); + /* section.ram.code_from_flash */ + *(.ram_code_from_flash) + *libnosys.a:sbrk.o(.text*) + *libgcc.a:_aeabi_uldivmod.o(.text*) + *libgcc.a:_muldi3.o(.text*) + *libmacsw.a:txl_he.o(.text*) + *libmacsw.a:txl_cntrl.o(.text*) + *libmacsw.a:txl_hwdesc.o(.text*) + *libgcc.a:_dvmd_tls.o(.text*) + *libgcc.a:bpabi.o(.text*) + *libgcc.a:_udivdi3.o(.text*) + *libgcc.a:_clzdi2.o(.text*) + *libgcc.a:_clzsi2.o(.text*) + __ramcode_from_flash$$Limit = .; + }> RAMCODE AT > FLASH + .ramcode.endof ALIGN(.,512) (READONLY) : + { + __ddsc_RAMCODE_END = .; + + }> RAMCODE + +} + +PROVIDE( __StackLimit = __ram_main_stack$$Base); +PROVIDE( __StackTop = __ram_main_stack$$Limit); +PROVIDE( __StackTopAll = __ram_thread_stack$$Limit); +PROVIDE( __stack = __StackTop); +PROVIDE( __HeapBase = ALIGN(ORIGIN(RAM) + (__ddsc_RAMCODE_END - ORIGIN(RAMCODE)), 8)); +PROVIDE( __HeapLimit = ORIGIN(RAM) + LENGTH(RAM)); +PROVIDE( __RAM_segment_used_end__ = __HeapBase); +PROVIDE( __bss_start__ = __ram_zero$$Base); +PROVIDE( __bss_end__ = __ram_zero$$Limit); +PROVIDE( end = __HeapBase); +PROVIDE( _end = __HeapBase); +PROVIDE( __end__ = __HeapBase); + +ASSERT(__HeapBase <= __HeapLimit, "RAM overflow: no space left for RT-Thread heap"); + diff --git a/bsp/renesas/ra6w1-ek/script/memory_regions.ld b/bsp/renesas/ra6w1-ek/script/memory_regions.ld new file mode 100644 index 000000000000..4292c2e7c4e7 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/script/memory_regions.ld @@ -0,0 +1,13 @@ +/* generated memory regions file - do not edit */ +RAM_START = 0x20000000; +RAM_LENGTH = 0x000a5000; +RAMCODE_START = 0x08000000; +RAMCODE_LENGTH = 0x000a5000; +FLASH_START = 0x00000000; +FLASH_LENGTH = 0x08000000; +IPDRAM_START = 0x200a5000; +IPDRAM_LENGTH = 0x00003b00; +FRAGRAM_START = 0x200aa500; +FRAGRAM_LENGTH = 0x00005700; +MACHW_MIB_START = 0x60b00800; +MACHW_MIB_LENGTH = 0x00001000; diff --git a/bsp/renesas/ra6w1-ek/scripts/gen_rrq61_flash_image.py b/bsp/renesas/ra6w1-ek/scripts/gen_rrq61_flash_image.py new file mode 100644 index 000000000000..695dcf5e72f8 --- /dev/null +++ b/bsp/renesas/ra6w1-ek/scripts/gen_rrq61_flash_image.py @@ -0,0 +1,334 @@ +#!/usr/bin/env python3 + +"""Generate flash image for EK-RRQ61000 board.""" +# See reference implementation in the following legacy SDK files: +# binaries/mkimage/mkimage_new_header.py +# binaries/mkimage/non_secure_cfg.xml.AT25SL641-8MB + +import argparse +import binascii +from collections import namedtuple +from rrq61_fw_version import get_fw_version +import os +from os import path +import re + + +# The following code is taken from mkimage_new_header.py (slightly modified): +def _initial(byte): + polynomial = 0x1021 + crc = 0 + byte <<= 8 + for _i in range(8): + if (crc ^ byte) & 0x8000: + crc = (crc << 1) ^ polynomial + else: + crc <<= 1 + byte <<= 1 + return crc + + +_tab = [_initial(byte) for byte in range(256)] + + +def _update_crc(crc, byte): + tmp = (crc >> 8) ^ byte + crc = (crc << 8) ^ _tab[tmp & 0xFF] + return crc & 0xFFFF + + +def crcb(data): + """Calculate 16-bit long CRC.""" + crc = 0xFFFF # preset + for byte in data: + crc = _update_crc(crc, byte) + return crc + + +def to_bytes(value, num_bytes, byteorder='little', signed=False): + """Convert integer value to specified number of bytes.""" + return value.to_bytes(num_bytes, byteorder, signed=signed) + +ProductHeaderValues = namedtuple('ProductHeaderValues', [ + 'is_corrupt', 'sram_boot', 'crc_corrupt', 'active_fw_addr', + 'update_fw_addr', 'burstcmda_reg', 'burstcmdb_reg', 'ctrlmode_reg', + 'flash_config']) + + +def get_product_header(header): + """Produce product header binary blob.""" + # See calcCRC() in mkimage_new_header.py + data = bytearray() + if header.crc_corrupt: + data.extend(b'\xDE\xAD\xC0\xDE') + else: + data.extend(b'\x53\x73' if header.is_corrupt else b'\x50\x70') + data.extend(to_bytes(header.active_fw_addr, 4)) + data.extend(to_bytes(header.update_fw_addr, 4)) + data.extend(to_bytes(header.burstcmda_reg, 4)) + data.extend(to_bytes(header.burstcmdb_reg, 4)) + data.extend(to_bytes(header.ctrlmode_reg, 4)) + flash_config_id = to_bytes(0x22AA if header.sram_boot else 0x11AA, 2) + data.extend(flash_config_id) + flash_config_len = to_bytes(len(header.flash_config), 2) + data.extend(flash_config_len) + data.extend(header.flash_config) + crc = to_bytes(crcb(data), 2) + data.extend(crc) + product_header_size = 0x1000 # 4096 bytes + num_bytes_uninitialized = product_header_size - len(data) + data.extend(b'\xFF' * num_bytes_uninitialized) + return data + + +ImageHeaderValues = namedtuple('ImageHeaderValues', [ + 'is_corrupt', 'security', 'version', 'timestamp', 'image_size', + 'image_crc']) + + +def get_image_header(header): + """Produce image header binary blob.""" + # See __init__() from ImageHeader class in mkimage_new_header.py + data = bytearray() + if header.is_corrupt: + raise ValueError('image_header_corrupt is not supported') + data.extend(b'DA16') + data.extend(to_bytes(header.timestamp, 4)) + data.extend(header.version) + num_zeros = 64 - len(header.version) + data.extend(b'\x00' * num_zeros) + if header.security: + raise ValueError('security for image header is not supported') + pointer_to_ivt = 1024 + data.extend(to_bytes(pointer_to_ivt, 4)) + data.extend(to_bytes(header.image_size, 4)) + data.extend(to_bytes(header.image_crc, 4)) + secure_boot_option = 0 + data.extend(to_bytes(secure_boot_option, 4)) + secure_cert_size = 0 + data.extend(to_bytes(secure_cert_size, 4)) + secure_cert_crc = 0 + data.extend(to_bytes(secure_cert_crc, 4)) + crc = binascii.crc32(data) + data.extend(to_bytes(crc, 4)) + image_header_size = 0x400 + num_bytes_uninitialized = image_header_size - len(data) + data.extend(b'\xFF' * num_bytes_uninitialized) + return data + +def get_firmware_version_e2s(fw_version_file): + """ + Reads the firmware version from fw_version.h. + If not found, defaults to '1.0.0'. + """ + try: + with open(fw_version_file, "r") as file: + content = file.read() + match = re.search(r'#define FIRMWARE_VERSION\s+"([^"]+)"', content) + if match: + return match.group(1) + except FileNotFoundError: + print("fw_version.h file not found, using default version.") + + return "1.0.0" # Default version + +def gen_flash_image(in_file, out_file, ra6w_grp): + """Generate output flash image.""" + in_file_data = in_file.read() + in_file.close() + out_file_name = out_file.name + + # From non_secure_cfg.xml.AT25SL641-8MB (product headers 1 and 2): + ph_values = ProductHeaderValues( + is_corrupt=False, + sram_boot=False, + crc_corrupt=False, + active_fw_addr=0x00002000, + update_fw_addr=0x00002000, + burstcmda_reg=0xa8a500eb, + burstcmdb_reg=0x00030616, + ctrlmode_reg=0xF8000532, + flash_config=b'\x02\x31\x02', + ) + + headers_data = get_product_header(ph_values) # first product header + # Second product header is the same as first one according to file + # non_secure_cfg.xml.AT25SL641-8MB, hence: + headers_data.extend(headers_data) + + # Set f/w version info + fw_version = get_fw_version() + if not fw_version: + # This condition will be true when we are building project + # using e2studio and project is prepared outside the repo + # In this case fetch the value from fw_version.h which is generated + # when packs are created. + script_dir = os.path.dirname(os.path.abspath(__file__)) # Get script directory + fw_version_file = os.path.abspath(os.path.join(script_dir, "../ra/fsp/src/rm_wifi/fw_version.h")) + if not os.path.isfile(fw_version_file): + # Try another location + fw_version_file = os.path.abspath(os.path.join(script_dir, "../ra/fsp/inc/fw_version.h")) + fw_version = get_firmware_version_e2s(fw_version_file) + + else: + # Check if out_file_name contains 'rm_wifi_test_app.img' + if 'rm_wifi_test_app' in out_file_name or 'vndm_wlan' in out_file_name: + fw_version = fw_version+"-e2studio" + else: + # If not, append "-cmake" + fw_version = fw_version+"-cmake" + header_fw_version = ra6w_grp + '-' + fw_version + # From non_secure_cfg.xml.AT25SL641-8MB (image header): + ih_values = ImageHeaderValues( + is_corrupt=False, + security=False, + version=header_fw_version.encode(), + timestamp=0x5939110D, + image_size=len(in_file_data), + image_crc=binascii.crc32(in_file_data), + ) + img_header=get_image_header(ih_values) + headers_data.extend(img_header) + out_file.write(headers_data) + out_file.write(in_file_data) + out_file.close() + + #gen OTA images for test + if((os.getcwd().find('rm_wifi') != -1) and out_file_name.find('rm_wifi_typical.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'rm_wifi_typical_', ra6w_grp) + + elif((os.getcwd().find('rm_wifi') != -1) and out_file_name.find('rm_wifi_ba.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'rm_wifi_ba_', ra6w_grp) + + elif((os.getcwd().find('rm_matter') != -1) and out_file_name.find('rm_matter_wifi_atcmd_test_app.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'rm_matter_wifi_atcmd_test_app_', ra6w_grp) + + elif((os.getcwd().find('rm_matter') != -1) and out_file_name.find('rm_matter_wifi_lock_test_app.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'rm_matter_wifi_lock_test_app_', ra6w_grp) + + elif((os.getcwd().find('vndm_rm_matter') != -1) and out_file_name.find('vndm_rm_matter_wifi_lock_test_app.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'vndm_rm_matter_wifi_lock_test_app_', ra6w_grp) + + elif((os.getcwd().find('rm_wifi_test_app') != -1) and out_file_name.find('rm_wifi_test_app.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'rm_wifi_test_app_', ra6w_grp) + + elif((os.getcwd().find('rm_wifi_test_app') != -1) and out_file_name.find('rm_wifi_test_app_at_sdio.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'rm_wifi_test_app_at_sdio_', ra6w_grp) + + elif((os.getcwd().find('rm_wifi_test_app') != -1) and out_file_name.find('rm_wifi_test_app_at_spi.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'rm_wifi_test_app_at_spi_', ra6w_grp) + + elif((os.getcwd().find('rm_wifi_test_app') != -1) and out_file_name.find('rm_wifi_test_app_at_uart.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'rm_wifi_test_app_at_uart_', ra6w_grp) + + elif((os.getcwd().find('red_wifi_test_app') != -1) and out_file_name.find('red_wifi_test_app.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'red_wifi_test_app_', ra6w_grp) + + elif((os.getcwd().find('vndm_wlan') != -1) and out_file_name.find('vndm_wlan_ble_coex_app.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'vndm_wlan_ble_coex_app_', ra6w_grp) + + elif((os.getcwd().find('vndm_wlan') != -1) and out_file_name.find('vndm_wlan_ble_coex_app_at_sdio.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'vndm_wlan_ble_coex_app_at_sdio_', ra6w_grp) + + elif((os.getcwd().find('vndm_wlan') != -1) and out_file_name.find('vndm_wlan_ble_coex_app_at_spi.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'vndm_wlan_ble_coex_app_at_spi_', ra6w_grp) + + elif((os.getcwd().find('vndm_wlan') != -1) and out_file_name.find('vndm_wlan_ble_coex_app_at_uart.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'vndm_wlan_ble_coex_app_at_uart_', ra6w_grp) + + elif((os.getcwd().find('vndm_wlan') != -1) and out_file_name.find('vndm_wlan_ble_sps_app.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'vndm_wlan_ble_sps_app_', ra6w_grp) + + elif((os.getcwd().find('vndm_wlan') != -1) and out_file_name.find('vndm_wlan_ble_codeless_app.img') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'vndm_wlan_ble_codeless_app_', ra6w_grp) + + elif((os.getcwd().find('vndm_wlan') != -1) and out_file_name.find('vndm_wlan_ble_coex_provisioning_app') != -1) : + gen_ota_flash_images(in_file_data, fw_version, 'vndm_wlan_ble_coex_provisioning_app_', ra6w_grp) + + elif((os.getcwd().find('rm_ota_w') != -1) and out_file_name.find('rm_ota_w_typical.img')) : + # Same version ex) RA6W1-0000000000-00000 + test_fw_version = ra6w_grp + '-' + fw_version + gen_ota_flash_image(in_file_data, test_fw_version, 'rm_ota_w_ota') + + else: + project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + configuration_file_path = project_root + "/configuration.xml" + try: + with open(configuration_file_path, "r", encoding="utf-8") as f: + configuration_file_content = f.read() + if(' +#include "hal_data.h" +#ifdef RT_USING_NANO +#include +#else +#include +#endif /* RT_USING_NANO */ + + +void hal_entry(void) +{ + rt_kprintf("\nHello RT-Thread on RA6W1!\n"); + + while (1) + { + rt_thread_mdelay(1000); + + } +}

    AEf=%gUfiS?Xlm1f`I9$Yw&ApKO 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
    sTq#Gt1; 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%0DoiV9th6_5}kq60KRV28hiCIEK#Msz)_gqX{ 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

  • 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